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

2 Antworten

  1. Christian sagt:

    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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.