# Installatie

# 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)

# Home Assistant Core installatie in Debian 10 (Buster) met Python

In dit document wordt beschreven hoe je Home Assistent Core kan installeren door middel van Python in Debian 10 (Buster).  
Home Assistant Core bevat dus niet de Supervisor en de add-ons.

#### **Python installeren**

Op het moment van schrijven is voor Home Assistant Python 3.9 nodig. In Debian 10 hebben we standaard alleen de beschikking over Python 2.7 en Python 3.7. Je kan met onderstaand commando controleren welke versies van Python geïnstalleerd zijn in Debian:

```bash
ls /usr/bin/python*
```

De actieve Python versie kan je controleren met:

```bash
python -V
```

Hoe je de nieuwste Python 3.9 versie kan installeren vanuit source staat beschreven in het artikel [Python installeren vanuit source in Debian 10](https://www.linuxfun.nl/books/linux/page/python-installeren-vanuit-source-in-debian-10 "Python installeren vanuit source in Debian 10").

Hoe je de standaard Python versie kan instellen en kan wisselen van Python versie staat beschreven in het artikel [Default Python versie wijzigen in Debian 10](https://www.linuxfun.nl/books/linux/page/default-python-versie-wijzigen-in-debian-10 "Default Python versie wijzigen in Debian 10").

#### **Overige benodigde pakketten installeren**

Onderstaande uitvoeren om de rest van de benodigde pakketten te installeren:

```bash
apt-get install libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5 sudo
```

#### **Gebruiker aanmaken voor Home Assistant**

We gaan nu een gebruiker aanmaken speciaal voor Home Assistant:

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

Bovenstaand commando maakt de gebruiker homeassistant aan, maakt de home directory /home/homeassistant aan en voegt de gebruiker toe aan de groep dialout.

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

Je kunt in Python een virtuele omgeving maken die onafhankelijk draait van de rest. Het voordeel is dat je eventueel verschillende Python versies naast elkaar kan draaien. Voor Home Assistant maken we een virtuele omgeving aan in de directory /srv/homeassistant.  
De configuratie bestanden van Home Assistant komen te staan in /home/homeassistant.

We gaan eerst het Python pakket pip updaten (pip is de package installer voor Python) en vervolgens het pakket virtualenv voor het maken van de virtuele Python omgeving. **We gaan in onderstaande handelingen uit van een geïnstalleerde Python 3.9 ve**rsie.

```bash
python3.9 -m pip install --upgrade pip
pip3 install virtualenv
```

We voeren het volgende uit om de directory aan te maken en de gebruiker homeassistant eigenaar te maken van deze directory:

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

Vervolgens gaan we de virtuele Python omgeving maken. Dit doen we onder de gebruiker homeassistant.  
Let op dat je de juiste python versie kiest, in ons geval python3.9.  
Je kunt het juiste pad controleren op de commandline met: which python3.9

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

Merk op dat we in de virtuele omgeving zitten door de prompt die je nu ziet.  
In mijn geval is dat **<span class="has-inline-color has-theme-palette-1-color">(homeassistant) homeassistant@hass:/srv/homeassistant$</span>**  
Nu de virtuele omgeving is aangemaakt kunnen we nog een benodigd Python pakket installeren met:

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

En uiteindelijk installeren we Home Assistant Core met:

```
pip3 install homeassistant
```

Start Home Assistant Core nu eenmalig door:

```bash
hass
```

De installatie wordt nu afgemaakt en de configuratie directory /home/homeassistant/.homeassistant wordt ook aangemaakt.  
Je kunt nu met je webbrowser naar http://&lt;IP-ADRES-MACHINE&gt;:8123 om de eerste gebruiker aan te maken voor Home Assistant.  
Let op dat het even kan duren voordat je dit scherm krijgt. Home Assistant is dan nog niet klaar met de installatie, dus heb even geduld.

Wanneer je kan inloggen en Home Assistant werkt, dan kan je het nu afbreken met **Control-C**.  
Verlaat de virtuele Python omgeving nu met **exit** of **&lt;CTRL-D&gt;**.

#### **Home Assistant Core automatisch starten met systemd**

We maken nu een bestand aan zodat Home Assistant automatisch start bij het opstarten van de PC.  
Open de editor:

```bash
nano /etc/systemd/system/home-assistant@homeassistant.service
```

Hier plaatsen we het volgende in:

```bash
[Unit]
Description=Home Assistant
After=network-online.target

[Service]
Type=simple
User=%i
WorkingDirectory=/home/%i/.homeassistant
ExecStart=/srv/homeassistant/bin/hass -c "/home/%i/.homeassistant"

[Install]
WantedBy=multi-user.target
```

Vervolgens voeren we het volgende uit:

```bash
systemctl --system daemon-reload
systemctl enable home-assistant@homeassistant.service
systemctl start home-assistant@homeassistant.service
```

Controleer of de service nu actief is met:

```bash
systemctl status home-assistant@homeassistant.service
```

#### **Home Assistant updaten**

Er komen regelmatig nieuwe updates uit van Home Assistant. De update kan vanaf de commandline uitgevoerd worden binnen de virtuele Python omgeving. We doen dit onder de gebruiker homeassistant en gaan daarna naar de virtuele omgeving:

```bash
sudo -u homeassistant -H -s
cd /srv/homeassistant
source bin/activate
```

Controleer of je ook daadwerkelijk in de virtuele omgeving zit door de juiste prompt die je krijgt:  
**(homeassistant) homeassistant@hass:/srv/homeassistant$**  
Daarna kunnen we Home Assistant updaten met het commando:

```bash
pip3 install --upgrade homeassistant
```

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

```bash
systemctl restart home-assistant@homeassistant.service
```

#### **Automatisch naar virtuele omgeving gaan voor homeassistant**

Om niet iedere keer bovenstaande handelingen uit te hoeven voeren als je Home Assistant wilt updaten kunnen we het bestand ~/.bashrc gebruiken in de home directory van homeassistant. Hiervoor gaan we eerst naar de home directory toe:

```bash
cd /home/homeassistant
```

Onderstaande commando’s zorgen ervoor dat er twee regels toegevoegd worden in het bestand .bashrc die er voor zorgen dat we direct in de virtuele omgeving zitten zodra we inloggen met de gebruiker homeassistant:

```bash
sh -c 'echo "cd /srv/homeassistant" >> ~/.bashrc'
sh -c 'echo "source /srv/homeassistant/bin/activate" >> ~/.bashrc'
```

Log nu in als gebruiker homeassistant met:

```bash
sudo -u homeassistant -H -s
```

Je zou nu in de virtuele omgeving moeten zitten, herkenbaar aan de prompt.

#### **Bronnen**

[Home Assistant – Installation](https://www.home-assistant.io/installation)  
[Autostart using systemd](https://community.home-assistant.io/t/autostart-using-systemd/199497)  
[Updating Home Assistant](https://home-assistant-china.github.io/docs/installation/updating/)

# Home Assistant Supervised installatie in Debian 10 (Buster)

In deze instructies wordt beschreven hoe men Home Assistant Supervised kan installeren in Debian 10 (Buster).  
De installatie zal in grote lijnen ook uitgevoerd kunnen worden in andere Linux distributies.  
  
Home Assistant Supervised is een complete installatie van alle modules (Home Assistant Core, Home Assistant Supervisor en add-ons).  
Alle modules draaien in Docker. De installatie wordt uitgevoerd door middel van een script.

#### **Debian updaten en benodigde pakketten installeren**

Zorg er eerst voor dat Debian up-to-date is:

```bash
apt-get update
apt-get upgrade
```

Installeer vervolgens de volgende benodigde pakketten:

```bash
apt-get install software-properties-common apparmor-utils apt-transport-https ca-certificates curl dbus jq network-manager
```

#### **ModemManager uitschakelen**

ModemManager hebben we niet nodig en kan conflicten geven met eventuele andere devices, dus gaan we deze uitschakelen:

```bash
systemctl disable ModemManager
systemctl stop ModemManager
```

#### **Docker installeren**

```bash
curl -fsSL get.docker.com | sh
```

#### **Home Assistant Supervised installeren**

```bash
curl -sL "https://raw.githubusercontent.com/Kanga-Who/home-assistant/master/supervised-installer.sh" | bash -s
```

De installatie heeft enige tijd nodig.  
Je kunt nu met je webbrowser gaan naar http://&lt;IP-ADRES-MACHINE&gt;:8123  
Wanneer de installatie klaar is krijg je het inlogscherm te zien. Je kan dan een eerste inlog account aanmaken.  
Hierna kan je verder gaan met de configuratie van Home Assistant.

#### **Bronnen**

[https://community.home-assistant.io/t/installing-home-assistant-supervised-on-debian-10/200253](https://community.home-assistant.io/t/installing-home-assistant-supervised-on-debian-10/200253)