DNSHome Automation Home Assistant
Hallo zusammen,
da ich mit meiner Fritz!Box leider immer wieder Probleme habe die DynDNS Adressen bei DNSHome zu aktualisieren (der Fehler liegt irgendwo in den Untiefen meiner Fritz!Box) folgt hier ein kleines Tutorial, wie ihr als HomeAssistant Nutzer relativ einfach eine Automatisierung bauen könnt, welche für euch das Update der IP-Adressen eurer DNSHome Records übernimmt.
Als erstes starten wir mit der Installation der “DNS IP” Integration. Diese könnt ihr über “Settings -> Devices & Services -> Add Integration” suchen und installieren (oder alternativ über diesen Home-Assistant Link: https://my.home-assistant.io/redirect/config_flow_start?domain=dnsip).

Wählt ihr “DNS IP” aus, so könnt ihr das sich anschließende Fenster für die Konfiguration der Integration einfach mit “Submit” bestätigen und absenden. Es müssen keine Änderungen an der Standardkonfiguration vorgenommen werden. Der standardmäßig vorgegeben Hostname “myip.opendns.com” sorgt dafür, dass die Integration die IP-Adresse eurer Home-Assistant Installation auflöst.

Wenn ihr anschließend bei “Devices” nach "myip” sucht (insofern ihr den Namen der Integration nicht geändert habt), solltet ihr dort das entsprechende Device finden.

Klickt ihr dieses Device an, so findet ihr im Anschluss die beiden Sensoren, welche die IP-Adresse beinhalten. Diese Integration versucht alle zwei Minuten eure IP-Adresse aufzulösen und aktualisiert die Sensoren wenn nötig automatisch.

Klickt ihr auf die Sensoren, so seht ihr die aktuellen Werte, welche sie beinhalten. Es gibt je einen Sensor für IPv4 und ggf. IPv6.
Auf der Übersichtsseite der jeweiligen Sensoren gelangt ihr über das Zahnrad zu den Einstellungen des jeweiligen Sensors.


In diesen Einstellungen findet ihr die sog. “Entity IDs”. Diese benötigt ihr in einem späteren Schritt, also notiert sie euch.


Der nächste Schritt ist die Einrichtung eines sog. “rest_commands”. REST Commands kann man sich vorstellen wie ein konfigurierter HTTP(S) / cURL Request, welcher als “Action” bzw. “Service” in Home-Assistant aufgerufen werden kann. Dieser REST Command ist parametrisierbar, beispielsweise mit Sensorwerten (deshalb müsst ihr euch auch die Entity IDs notieren).
REST Commands können nur über die YAML-Konfiguration von Home-Assistant angelegt werden, das ist aber einfacher als gedacht. Bitte öffnet eure “configuration.yaml” (beispielsweise via dem “Studio Code Server”-Addon, dem File-Browser oder SSH). Ich ziehe es vor, die jeweiligen Konfiguration in eigene YAML-Dateien auszulagern, damit die configuration.yaml selbst möglich schlank bleibt.
Fügt in die configuration.yaml die folgende Zeile ein, um die Datei “rest_command.yaml” - welche wir im folgenden Schritt anlegen werden - in eurer Konfiguration zu inkludieren:
rest_command: !include rest_command.yaml
Legt nun die Datei “rest_command.yaml” an, und fügt dort den folgenden Inhalt ein:
ddns_dnshome:
url: "https://www.dnshome.de/dyndns.php?ip={{ states('sensor.myip') }}&ip6={{ states('sensor.myip_ipv6') }}"
method: post
username: !secret dnshome_username
password: !secret dnshome_password
Ersetzt ggf. “sensor.myip” und “sensor.myip_ipv6” mit den Entity IDs, welche ihr euch oben notiert habt. Solltet ihr keine ipv6-Adresse haben, so könnt ihr den Teil “&ip6={{ states('sensor.myip_ipv6') }}” einfach aus der url entfernen
Die Secrets “dnshome_username” und “dnshome_password” sind standardmäßig noch nicht definiert. Falls noch nicht vorhanden, legt bitte zusätzlich eine “secrets.yaml”-Datei an oder öffnet sie, falls sie existiert, und füllt diese wie folgt:
dnshome_username: deinedomain.dnshome.de
dnshome_password: deinpasswortfuerdeinedomain
Ersetzt “deinedomain.dnshome.de” mit eurer dynamischen DNSHome-Adresse und “deinpasswortfuerdeinedomain” mit dem von euch für diese Domain konfigurierten Passwort.
Speichert die Dateien und öffnet die “Developer Tools”. Mit einem Klick auf “Check Configuration” könnt ihr eure YAML-Dateien auf mögliche Syntax-Fehler überprüfen.

Sollte alles in Ordnung sein jetzt bitte Home-Assistant mit einem Klick auf “Restart” neu starten, damit die Konfigurationsänderungen angezogen werden können.
Nachdem Home-Assistant neu gestartet ist können wir nun testen, ob die URL, welche wir für den rest_command mit dem Namen “ddns_dnshome” eingetragen haben, korrekt aufgelöst wird. Öffnet dafür den Tab “Template” und gebt dort die oben konfigurierte “url” ein. Prüft dann rechts, ob die URL korrekt ausgegeben wird.

Wenn hier alles passt, dann seid ihr schon einen Schritt weiter. Ihr könnt diese von euch konfigurierte Action nun auch direkt einmal testen. Klickt dafür in den Developer Tools auf den Reiter “Actions” und wählt als Action “ddns_dnshome” aus. Wenn ihr auf “Perform Action” klickt wird der Request abgeschickt, ihr seht dann die entsprechende Antwort. Wenn in der Response der “status” 200 zurückgegeben wurde ist alles korrekt konfiguriert.

Nun fehlt nur noch eine Automation, damit diese Action auch ausgeführt wird wenn eure IP-Adresse sich ändert und die Sensoren neue Werte erhalten. Klickt dafür auf “Settings -> Automations & scenes -> Create Automation -> Create new automation”.
Wählt dort als “When”-Trigger “Entity -> State” aus. Bei “Select an entity” wählt ihr eure Sensoren aus, welche die IP-Adressen beinhalten.

Wenn ihr auf Änderungen der IPv4 und der IPv6 Adressen reagieren wollt, so wählt beide Entities aus. Wählt anschließend das “Attribute” “IP addresses” aus, damit nur auf Änderungen der IP-Adressen und nicht Änderungen der Resolver oder Query Types reagiert wird.

Wählt nun im “Then do”-Block als Action “Perform action” aus.

Als action wählt ihr dann nur noch die “ddns_dnshome” Action aus und seid fertig.

Speichert anschließend eure neue Automation. Ihr könnt prüfen ob sie funktioniert, indem ihr oben rechts auf die drei Punkte klickt, und dort “Run actions” auswählt. Wenn ihr oben rechts auf "Traces" klickt könnt ihr prüfen, ob die Action korrekt aufgerufen wurde.
Wenn ihr Fragen habt meldet euch gerne. Dieses Setup ist etwas aufwändiger als die Konfiguration in der Fritz!Box, der große Vorteil ist jedoch, dass die Funktionalität nicht hinter einem User-Interface versteckt ist das kaum Konfigurations- oder Debuggingmöglichkeiten bietet und euch im Fehlerfall rätselratend vor dem Monitor zurücklässt. Vor allem über die Developer Tools und die Traces eurer Automation sowie die historischen Daten der IP-Adresssensoren könnt ihr jederzeit nachvollziehen wann sich was warum geändert hat. Zudem seid ihr unabhängig von Router-Hersteller oder eurem Provider.
Dieses Tutorial funktioniert nicht mit ipv4-Adressen von DS-Lite Anschlüssen.
Weitere Quellen / lesenswerte Hintergrundinformationen (vor allem für Anfänger):