# ESPHome installeren in Debian 10 (standalone)

ESPHome is een systeem om een ESP8266/ESP32 microcontroller te configureren met behulp van configuratie bestanden geschreven in YAML. ESPHome maakt zoveel mogelijk gebruik van dezelfde structuur en opbouw van deze YAML bestanden als Home Assistant. ESPHome is daarom ook makkelijk te integreren in Home Assistant.  
  
Je kunt ook gebruik maken van de ESPHome Dashboard, een web interface die het configuratie bestand voor je aanmaakt, controleert op syntax fouten en compileert naar een firmware bestand voor de microcontroler. Dit firmware (.bin) bestand kan je downloaden en daarna in de microcontroller flashen met behulp van je USB naar serieel converter. Eventuele latere wijzigingen van de configuratie kunnen daarna via OTA (Over The Air) weggeschreven worden naar de microcontroller.

Wanneer je Home Assistant Supervised hebt geïnstalleerd, dan kan je op een eenvoudige manier ESPHome installeren en gebruiken vanuit Home Assistant. Heb je Home Assistant Core draaien, dan kan je ESPHome installeren vanaf de commandline.  
Dit laatste wordt beschreven in onderstaand artikel.

De installatie instructies lijken in grote lijnen op de **[installatie van Home Assistant Core](https://www.linuxfun.nl/books/home-assistant/page/home-assistant-core-installatie-in-debian-10-buster-met-python "Home Assistant").** ESPHome is ook geschreven in Python. In dit document gaan we er van uit dat Home Assistant Core reeds is geïnstalleerd.   
Voor ESPHome maken we een aparte gebruiker. Ook maken we een virtuele Python omgeving en een systemd opstartscript om de ESPHome Dashboard automatisch te starten wanneer het systeem opstart.

#### **Gebruiker aanmaken voor ESPHome**

```bash
useradd -rm -s /bin/bash esphome -G dialout
```

#### **Virtuele Python omgeving aanmaken**

Directory voor de virtuele Python omgeving aanmaken en rechten toekennen:

```bash
cd /srv
mkdir esphome
chown esphome:esphome esphome
```

Vervolgens gaan we de virtuele Python omgeving maken. Dit doen we onder de gebruiker esphome:

```bash
sudo -u esphome -H -s
cd /srv/esphome
virtualenv --system-site-packages -p /usr/local/bin/python3.9 /srv/esphome
source bin/activate
```

Nu de virtuele omgeving is aangemaakt kunnen we nog een benodigd Python pakket installeren met:

```bash
python3 -m pip install wheel
```

En dan installeren we ESPHome:

```bash
pip3 install esphome
```

Verlaat de virtuele Python omgeving met **exit** of **&lt;CTRL-D&gt;**.

#### **ESPHome Dashboard automatisch starten met systemd**

We maken nu een bestand aan zodat ESPHome Dashboard automatisch start bij het opstarten van het systeem.  
Open de editor:

```bash
nano /etc/systemd/system/esphome-dashboard.service
```

Hier plaatsen we het volgende in:

```bash
[Unit]
Description=ESPHome Dashboard
After=network.target
[Service]
WorkingDirectory=/home/esphome
User=esphome
ExecStart=/srv/esphome/bin/esphome dashboard config
Restart=on-failure
RestartSec=5s
Environment="PATH=/srv/esphome/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games"
[Install]
WantedBy=multi-user.target
```

In bovenstaand opstartscript zien we dat de **WorkingDirectory** is ingesteld op /home/esphome.  
Dit betekent dat de configuratie bestanden van ESPHome in deze directory weggeschreven worden.  
Deze bestanden staan weer in de directory **config** (dus /home/esphome/config).

De regel met **ExecStart** start de ESPHome Dashboard op.  
Je kunt de web interface eventueel ook nog beveiligen met een eigen inlogscherm door onderstaande parameters toe te voegen:

```bash
ExecStart=/srv/esphome/bin/esphome dashboard config --username user --password password --open-ui
```

De regel die begint met **Environment** zorgt er voor dat de omgevingsvariabelen goed ingesteld worden.  
In dit geval is dat het pad naar de juiste directories. Wanneer dit niet goed staat ingesteld, werkt het compileren niet in ESPHome.

Vervolgens voeren we het volgende uit:

```bash
systemctl --system daemon-reload
systemctl enable esphome-dashboard.service
systemctl start esphome-dashboard.service
```

Controleer of de service nu actief is met:

```bash
systemctl status esphome-dashboard.service
```

Je kunt nu naar de ESPHome Dashboard via http://&lt;IP-ADRES-MACHINE&gt;:6052

#### **ESPHome updaten**

Wanneer er een nieuwe versie uit is van ESPHome kan men deze via de commandline updaten:

```bash
sudo -u esphome -H -s
cd /srv/esphome
source bin/activate
pip3 install --upgrade esphome
```

Als dit succesvol is verlopen kan je de virtuele omgeving verlaten met &lt;CTRL-D&gt; of exit. Hierna dient men ESPHome te herstarten met:

```bash
systemctl restart esphome-dashboard.service
```


#### **Bronnen**

[ESPHome homepage](https://esphome.io/index.html)  
[How to create a systemd service for python script with virtualenv](https://gist.github.com/ricferr/90583f608f0b0ae9c3cf6833be04ab85)