Home Assistant und ausgeschaltete Geräte

Home Assistant verhält sich in Integrationen bei ausgeschalteten Geräten mitunter etwas sehr hartnäckig. Schalte ich zum Beispiel meinen Netzwerkdrucker aus, versucht die IPP-Integration sich zu initialisieren und flutet damit die Logdateien. Gleiches passiert bei meiner zweiten Synology NAS. Diese wird in regelmäßigen Abständen von der ersten synchronisiert, wird aber danach ausgeschaltet und sowohl Netz als auch vom LAN physisch getrennt.

Hierdurch kommt ganz schön Unruhe ins System, viele Einträge und lästige Meldungen in der Home Assistant GUI. Hier kommt die Erweiterung „Spook“ und die Integration „Ping (ICMP)“ ins Spiel.

Die Erweiterung „Spook“

In vielen Anleitungen im Netz wird auf die Nützlichkeit die Erweiterung „Spook“ eingegangen. Hierbei geht meist nur um die Fähigkeit Unregelmäßigkeiten in den Konfigurationen von Home Assistant aufzuspüren. Unbestritten ist das die nützlichste Fähigkeit, aber halt nicht die einzige.

In einem YouTube Video zum Thema „Spook“ fiel ein Nebensatz, dass es Geräte und Integrationen automatisiert ein- und ausschalten kann. Eine detaillierteste Anleitung habe ich im Netz nicht gefunden, daher habe ich mich durch die Doku experimentiert.

Voraussetzungen

Um zu erkennen, ob ein Gerät erreichbar ist oder nicht, kann zwar ein Device Tracker des heimischen Routers verwendet werden, diese reagieren jedoch recht langsam und nicht immer genau. Schaltet man zum Beispiel eine Synology NAS aus wird zwar das Internet Protokoll heruntergefahren, das Ethernet Protokoll bleibt für ein eventuelles Wake On LAN aktiv. Der Device Tracker des Routers erkennt daher die Synology NAS als anwesend, während die DSM-Integration bereits am Meckern ist.

Viel schneller und zuverlässiger reagiert die Integration „Ping (ICMP)“ und ist dabei auch nicht ressourcenhungrig.

Wir benötigen nun:

Bei der Festen IP-Adresse gibt es in der Regel zwei Möglichkeiten. Zum einen kann dem Gerät in seiner Konfiguration eine feste IP-Adresse zugewiesen werden. Viele Geräte bekommen meist über DHCP vom Router eine IP-Adresse zugewiesen. Den meisten Routern kann mitgegeben werden, dass eine einmal einem Gerät zugewiesene IP-Adresse immer diesem Gerät zugewiesen wird.

Beide Möglichkeiten können hier verwendet werden.

Erkennung der Erreichbarkeit

Über die „Ping (ICMP)“ Integration richten wir uns zunächst einen Integrationseintrag ein, welcher uns ermittelt ob das Gerät (in meinem Fall ein Netzwerkdrucker) erreichbar ist.

Integrationen öffnen:

Integration hinzufügen:

Nach Anbieter „Ping (ICMP)“ suchen und auswählen:

IP-Adresse des Gerätes eingeben:

Und noch einen Bereich zuordnen:

Danach taucht in der Integration ein Integrationseintrag mit einem Gerät und mindestens 2 Entitäten (abhängig von der Erreichbarkeit auch mehr) auf.

Im Prinzip war es das schon, leider reagieren die Voreinstellungen etwas langsam. Daher „KONFIGGURIERERN“ auswählen:

Und das Intervall auf 30 Sekunden festlegen:

Nun Noch einen Sinnvollen Namen geben:

Unter den Entitäten ist eine besonders wichtig:

Die Entität mit dem Netzwerksymbol:

Auch ihr sollte man einen lesbaren Namen vergeben:

Diese Entität dient nun als Trigger für eine Automation um mit „Spook“ die „IPP“ Integration des Druckers bei Bedarf zu aktivieren und zu deaktivieren.

Mit Ihr kann man natürlich noch weit mehr anfangen. Auf meinem Dashboard zeige ich mit den Füllstand des Toners an. Die Anzeige funktioniert nur bei eingeschaltetem Drucker ansonsten wird „Nicht verfügbar“ ausgegeben. Daher steuere ich die Sichtbarkeit der Karte ebenfalls anhand der Entität aus „Ping (ICMP)“.

Automation zum de-/aktivieren einer Integration

Kommen wir nun zur Automation und zum Einsatz von „Spook“. Zunächst eine neue Automation erstellen:

Als Auslöser unsere neue Entität zur Erkennung der Erreichbarkeit einfügen:

Nun die neue Entität zur Erkennung der Erreichbarkeit, den Zustand „Von“ „Verbunden“ und „Zu“ „Getrennt“ eintragen. Einen weiteren Auslöser hinzufügen:

Auch hier die neue Entität zur Erkennung der Erreichbarkeit, aber den Zustand umgekehrt eintragen:

Somit ist sichergestellt, dass nur bei Zustandswechsel von „Getrennt“ zu „Verbunden“ bzw. von „Verbunden“ zu „Getrennt“ die Automation ausgelöst wird. Alle anderen, fehlerhaften Zustandsänderungen werden ignoriert.

Da wir unterschiedliche Zustandswechsel als Auslöser verwenden kann nicht eine einzelne „Dann“ Bedingung einsetzen. Wir müssen zunächst einen „Wenn-Dann“ Baustein einfügen:

Wir erhalten den folgenden Eingabebereich:

In der „Wenn“ Bedingung wird wieder unsere neue Entität zur Erkennung der Erreichbarkeit und der Zustand „Verbunden“ eingegeben:

Unter „Dann“ wird nun die Aktion von „Spook“ zum enablen einer Integration eingegeben:

Unter „Dann” wird „Home Assistant Core Integration: Enable an integration” und unter „Sonst“ wird „Home Assistant Core Integration: Disable an integration“ eingegeben:

Nun noch:

Nun sollte die Automation wie folgt aussehen: