Home Assistant Smart Home Teil 3 – Installation & Addons
Nachdem alle vorbereitenden Installationen und Konfigurationen nun abgeschlossen sind, ist der nächste Schritt die Installation und Konfiguration von Home Assistant OS in einer VM und die Installation von Addons, die ich im weiteren Verlauf der Automatisierung verwende. Zum Zeitpunkt der Installation verwende ich Home Assistant OS 5.8.
Bereitstellung der VM
Die Bereitstellung einer VM mit Home Assistant unter Proxmox VE ist denkbar einfach. Dafür gibt es auf GitHub ein Installationsscript. Dazu verbinde ich mich zum PVE Server per SSH und führe folgenden Befehl aus:
bash -c "$(wget -qLO - https://github.com/whiskerz007/proxmox_hassos_install/raw/master/install.sh)"
Wenn ihr meiner Empfehlung, die Systeme per Firewall zu schützen gefolgt seid, muss natürlich eine Freischaltung zu github.com eingerichtet sein, damit das alles funktioniert. Das sollte aber so oder so gemacht werden, da auch Updates für Home Assistant und einige Erweiterungen bei GitHub liegen.
Nachdem das Script die VM erstellt hat, passe ich sie noch bzgl. CPU, RAM und Disk nach meinen Bedürfnissen an. Dann kann die VM auch schon gestartet werden.
Konfiguration der VM
Ist die VM mit Standardwerten gestartet, passe ich einige davon an. Das geht einerseits nach der Ersteinrichtung über die Web-GUI, andererseits bereits vorher über die CLI. Ich nutze die letztere Option und öffne dazu erst mal in PVE die Konsole der VM und melde mich mit dem User root (ohne Passwort) an. Danach startet man mit dem Command login
den Konfigurationsmodus.
Hostname
Der Hostname lautet im Standard homeassistant (bei älteren Versionen auch hassos). Diesen ändere ich wie folgt ab:
hostnamectl set-hostname <Neuer-Hostname>
Statische IP
Nach der Installation bekommt der Home Assistant Server seine IP erst mal per DHCP-Server, sofern ein solcher im Netz vorhanden ist. Einem Server sollte man allerdings bevorzugt eine statische IP vergeben. Dies mache ich wie folgt:
nmcli c mod $(nmcli -g uuid c) ipv4.method manual ipv4.addresses "<Home-Assistant-IP>/24" ipv4.gateway "<Gateway-IP>" ipv4.dns "<DNS1-IP>,<DNS2-IP>" nmcli c up $(nmcli -g uuid c)
Disk Size
Standardmäßig ist die Disk der OVA-Version nur 6 GB groß. Diese habe ich entsprechend in PVE auf 40 GB vergößert, da ich etwas zusätzlichen Platz haben möchte. Ich habe einige Forenbeiträge gefunden, wonach man dann die Disk manuell per CLI vergößern muss. Glücklicherweise war das bei mir nicht der Fall, ich musste nichts anpassen. Home Assistant OS hat bei meiner Installation die Partition automatisch auf die maximale Größe der vDisk geändert. Das hat auch funktioniert, wenn man die vDisk nochmal nachträglich erweitert hat. Die Partition wurde bei jedem Bootvorgang erweitert.
NTP
Eigentlich würde ich auch gerne noch den NTP Server anpassen auf meine präferierte Quelle. Leider habe ich das bis dato nicht hinbekommen. In mehreren Forenbeiträgen ist zu lesen, dass das mit einer Konfigurationsdatei auf einem USB Stick funktioniert oder dass man die timesyncd.conf Datei entsprechend anpassen muss. Ersteres führt bei mir dazu, dass das System nicht mehr bootet (nie mehr!) und Letzteres wird offensichtlich ignoriert. Wer hier eine Idee hat, her damit!
Ansonsten hier meine Konfiguration (auch wenn sie nicht funktioniert, vielleicht findet ja jemand einen Fehler):
timedatectl set-timezone Europe/Berlin nano /etc/systemd/timesyncd.conf
[Time] NTP=<Meine-interne-NTP-Server-IP> FallbackNTP=de.pool.ntp.org europe.pool.ntp.org
Initiale Konfiguration
Nachdem alle Vorarbeiten soweit erledigt sind und ich die VM abschließend neu gestartet habe, melde ich mich das erste Mal in der Home Assistant Web GUI (http://<Home-Assistant-IP>:8123/
) an und führe dort die initiale Konfiguration durch (User anlegen, Standort festlegen, etc.).
Add-ons
Im Anschluss an die Grundinstallation und -konfiguration installiere ich nun noch einige Add-ons, die die tägliche Arbeit mit Home Assistant erleichtern.
Check Home Assistant configuration (official)
Das Check Home Assistant configuration
Add-on kann verwendet werden, um die aktuelle Konfiguration vor einem Home Assistant Update zu überprüfen, ob sie mit der neuen Version fehlerfrei funktioniert. Das Addon wird zum Test jeweils vor einem Update gestartet und im Log auf das Ergebnis hin geprüft.
Configuration
version: latest
Samba share (official)
Das Samba share
Add-on installiert das Samba-Freigabeprotokoll und legt gleichzeitig Freigaben auf dem HA-Server an, die für die Konfiguration benötigt werden (addons, backup, config, media, share, ssl).
Configuration
workgroup: HOME username: homeassistant password: <Passwort> interface: '' allow_hosts: - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 - 'fe80::/10' veto_files: - ._* - .DS_Store - Thumbs.db - icon? - .Trashes compatibility_mode: false
SSH & Web Terminal (community)
Configuration
ssh: username: homeassistant password: <Passwort> authorized_keys: [] sftp: false compatibility_mode: false allow_agent_forwarding: false allow_remote_port_forwarding: false allow_tcp_forwarding: false zsh: true share_sessions: false packages: [] init_commands: []
Network
Container Host Description 22/tcp 22 SSH server port (make empty to disable)
Visual Studio Code (community)
Configuration
packages: [] init_commands: []
Node-RED (community)
Configuration
log_level: info|trace|debug|warning|error|fatal credential_secret: !secret node-red_credentialsecret dark_mode: true|false http_node: username: !secret node-red_user password: !secret node-red_password http_static: username: !secret node-red_user password: !secret node-red_password ssl: false certfile: fullchain.pem keyfile: privkey.pem require_ssl: false dark_mode: true|false system_packages: [] npm_packages: [] init_commands: []
credential_secret
Anmeldeinformationen werden von Node-RED im Speicher mit einem geheimen Schlüssel verschlüsselt. Mit dieser Option können Sie Ihren geheimen Schlüssel angeben. Dies kann alles sein, was man möchte, es ist wie ein Passwort. Der Schlüssel sollte an einem sicheren Ort aufbewahrt werden, da es in der Zukunft gebraucht werden könnte und ohne den Schlüssel die Node-RED Daten verloren gehen können.
Network
Container Host Description 80/tcp 1080 Web interface
Konfigurationsdateien
configuration.yaml
Die wichtigste Konfigurationskomponente von Home Assistant ist die Datei configuration.yaml
im config
-Ordner. In ihr werden alle Konfigurationen vorgenommen, die nicht über die Web GUI eingerichtet werden können.
Mit zunehmender Anzahl von Integrations, Devices und Entities kann die Datei daher recht umfangreich und unübersichtlich werden. Da allerdings gleichzeitig immer mehr Integrations über die GUI konfigurierbar werden und dann die Unterstützung für die YAML Konfiguration irgendwann wegfällt, habe ich mich trotzdem dazu entschlossen, die Konfiguration der Integrations, Devices und Entities, die noch über die Konfigurationsdatei vorgenommen werden müssen, nicht zu splitten, sondern alles in die configuration.yaml
direkt einzutragen. Alle anderen Einträge wie z.B. Secrets, Automationen, Scripte, Recorder-Einstellungen, etc., lagere ich in eigene yaml-Dateien aus. Wie das mit Hilfe von !include
Einträgen funktioniert, könnt ihr hier nachlesen.
recorder.yaml
Die recorder.yaml
Datei konfiguriert die Datenbankverbindung für die Aufzeichnung von historischen Daten in Home Assistant. Standardmäßig wird die Datei nicht benötigt, da Home Assistant alle diese Daten lokal in einer SQLite Datenbank speichert. Ich möchte die historischen Daten jedoch in die vorher angelegte MariaDB auf meine NAS auslagern und benötige daher die Datei, die ich nach meinen Bedürfnissen wie folgt konfiguriere:
db_url: mysql://<Passwort>:homeassistant@<NAS-IP>:3306/homeassistant?charset=utf8 db_max_retries: 5 db_retry_wait: 3 auto_purge: true purge_keep_days: 30 commit_interval: 10 include: entities: - sensor.<Sensor to include in Recorder> - switch.<Switch to include in Recorder> - weatcher.<Weather-Zone to include in Recorder> - ... etc. ...
Was genau die einzelnen Parameter bedeuten, könnt ihr hier nachlesen. Lediglich kurz zum Include/Exclude der Entities: ich verwende ausschließlich den include:
Parameter. Das bewirkt, dass keine Daten der Entities in die Datenbank geschrieben werden mit Ausnahme der Entities, die ich explizit definiere.
Noch ein kurzer Exkurs: wie finde ich heraus, welche Entities und Domains verwendet werden?
Dazu gehe ich in die Web GUI ins Menü Developer Tools -> Templates und führe dort folgende Befehle aus:
Domains
{%- set unique_domains = states | map(attribute='domain') |list | unique | list -%} {%- for domain in unique_domains -%} - {{domain + "\n"}} {%- endfor -%}
Entities
{%- for state in states -%} - {{state.entity_id + "\n"}} {%- endfor -%}
secrets.yaml
Die Datei secrets.yaml
dient in erster Linie dazu, Passwörter aus der configuration.yaml
fern zu halten und in eine eigene Datei auszugliedern. Sie kann aber auch dazu verwendet werden, Hostnamen, Pfade, etc. zu definieren.
Einträge sind im folgenden Format vorzunehmen:
<Secret-Name>: <Wert>
also z.B.:
http_password: 0815pass4711
Verwendet wird das jeweilige Secret dann z.B. in der configuration.yaml
wie folgt:
<Parameter>: !secret <Secret-Name>
also dem obigen Beispiel folgend:
http_password: !secret http_password
Quellen:
https://home-assistant.io/
https://github.com/whiskerz007/proxmox_hassos_install
https://github.com/home-assistant/operating-system/blob/dev/Documentation/network.md
NTP lässt sich mittlerweile über DHCP konfigurieren (Option 42). Was auch nicht die ideale Lösung ist, aber immerhin etwas, denn wenn die Zeit nicht korrekt gesetzt ist, hat man schon mal ein paar Probleme, z.B. dass das die History nicht richtig funktioniert.
Die Konfiguration per DHCP ist natürlich eine Möglichkeit, setzt aber leider voraus, dass das System auch seine IP per DHCP bekommt. Aus IT-Admin Sicht ist Home Assistant ein Server System und sollte daher eine feste IP haben.