In diesem Beitrag beschreibe ich ausführlich: Reload Home Assistant Integration – und das auch noch automatisch, so dass „Integration unavailable“ der Vergangenheit angehört! Ziemlich jeder dürfte Bedarf an einer Automation zum Neuladen von Home Assistant Integrationen haben!
Aber der Reihe nach: Mein Smarthome mit Home Assistant ist über die letzten Jahre ziemlich gewachsen. Ich habe zwar immer wieder auch versucht mich auf das wesentliche zu konzentrieren und unnötige Integration (wie zum Beispiel die von Hue) zu entfernen. Aber dennoch nutze ich mittlerweile zahlreiche Integrationen und Funktionen.
Du magst das dir Ganze lieber als Video anschauen? Kein Problem:
Inhaltsverzeichnis
Und je mehr Integrationen man in Home Assistant nutzt, desto größer wird die Wahrscheinlichkeit, dass von Zeit zu Zeit bei einer Integration „unavailable“ angezeigt wird. Dies bedeutet, dass Home Assistant keine Verbindung mehr zu dem Dienst der externen Integration hat und du somit diese Integration über Home Assistant nicht nutzen kannst.
Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:
Follow Home Assistant
Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!
Ich selbst habe das Problem immer wieder mit dem Meross Garagentorschalter gehabt. Ich sage jedoch nicht, dass dies zwangsläufig an dem Garagentorschalter oder der Integration (Github: Meross Integration) liegt. Vielmehr scheint es bei mir eine Frage des WLAN-Signals zu sein. Wer hat in der Garage schon ein ausgezeichnetes WLAN? 😉
Wenn immer mir also die Integration als „unavailabe“ angezeigt wurde, habe ich über Einstellungen -> Integrationen -> Mausklick auf die 3 Punkte bei der jeweiligen Integration -> „Neu laden“ einen Reload Home Assistant Integration manuell angestoßen. Tatsächlich habe ich das solange gemacht, bis ein anderer Home Assistant Nutzer mich in einem Kommentar hier auf meinem Blog auf das gleiche Problem bei ihm aufmerksam machte und nach einer Lösung fragte.
Automatischer Reload Home Assistant Integration
Um nun hierfür eine Automation zu erstellen, welche automatisch die Integration neu lädt (also ein „Reload Home Assistant Integration“ ausführt), benötigen wir zuerst die „URL“, welche beim zuvor beschrieben Klick auf „Neu laden“ aufgerufen wird.
Reload Home Assistant Integration API-Call
Hierfür öffnen wir in Chrome die Entwicklertools und beobachten den Traffic des Browsers wenn du auf „Neu laden“ geklickt hast:
Auf den Aufruf mit dem Namen „Reload“ machst du nun einen Rechtsklick und wählst Copy -> Copy link address. In deiner Zwischenablage befindet sich nun der manuell von die ausgeführte API-Call über welchen der Reload der Home Assistant Integration erfolgt ist.
Dies sollte in etwa wie folgt aussehen (nein die IP von meinem Home Assistant ist nicht wirklich 08 15 47 11 1 und nein die hier gezeigte ID der Integration stimmt auch nicht ;)):
http://08.15.47.11.1:8123/api/config/config_entries/entry/09asgse69e86948a281bea7f693b4sdfsdf5/reload
Als nächstes benötigen wir einen „langlebigen Zugangs Token“, damit wir den soeben kopierten API-Call ausführen können. Hierfür klickst du in Home Assistant unten links auf ein Profil und scrollst auf der sich öffnenden Seite ganz nach unten, bis du zum Bereich „Langlebige Zugangs-Token“ kommst:
Hier folgst du den Anweisungen und erstellt einen solche Token!
Shell-Command für Reload Home Assistant Integration erstellen
Mit dem API-Call und dem langlebigen Zugangs-Token erstellen wir nun einen Shell-Command. Diesen werden wir dann von einer Automation bei Bedarf abfeuern. Aber zu der Automation späte mehr!
shell_command:
meross_restart: "/usr/bin/curl -X 'POST' -H 'authorization: Bearer DEIN-LANGLEBIGER-ZUGANGS-TOKEN' http://47.11.08.15.1:8123/api/config/config_entries/entry/09asgse69e86948a281bea7f693b4sdfsdf5/reload"
Da ich hier das automatische Neuladen einer Home Assistant Integration am Beispiel meiner Meross-Integration beschreibe, heißt mein Shell-Command „meross_restart“. Dies kannst du natürlich beliebig anpassen/ändern!
Nun haben wir alle Vorbereitungen getroffen, um eine Automation zu erstellen, welche die Integration neu lädt, sobald diese den Zustand „unavailable“ hat:
Automation zum automatischen Reload Home Assistant Integration erstellen
Die Integration kannst du eigentlich 1:1 übernehmen und musst lediglich die Bezeichnung anpassen, sofern deine Automation nicht für eine Meross-Integration ist:
- alias: Meross-Restart
trigger:
- platform: state
entity_id: cover.smart_garage_door_opener_msg100_main_channel
to: unavailable
for: '00:05:00'
condition: []
action:
- action: shell_command.meross_restart
data: {}
Auch hier passiert wieder keine wirkliche Raketenwissenschaft (aber dennoch ein klein wenig Magie ;)):
Als Trigger nehmen wir die Plattform „state“ der Entity des Garagentores („cover.smart…“) und zwar genau dann, wenn der Zustand auf „unavailable“ wechselt und diesen für 5 Minuten hatte. Ist dies der Fall, feuern wir unseren Shell-Command und fertig!
Die 5 Minuten Wartezeit sind nicht zwingend notwendig. Ich möchte aber auch nicht, dass der Shell-Command unnötig oft gefeuert wird. Starte ich zum Beispiel den Router neu und deswegen ist die Intgeration unavailable, wird nicht sofort ein Reload der Integation ausgelöst. Und nach 5 Minuten dürfte das WLAN auch wieder voll funktional laufen und somit die Integration wieder verfügbar sein.
Update 01.07.2024:
Das liebe ich so an Home Assistant und der Community drum herum: Marco hat in seinem Kommentar auf eine deutlich einfachere Möglichkeit hingewiesen, wie man eine Integration neuladen kann! Es existiert eine Action homeassistant.reload_config_entry (HA-Doku hierzu) speziell hierfür.
Der Code kann dann wie folgt aussehen:
- action: homeassistant.reload_config_entry data: entry_id: "{{ config_entry_id('sensor.whatever') }}"
Bzw. wenn du den Umweg über die Ermittlung der entry_id nicht gehen möchtest, einfach direkt eine betroffene Entität (also beispielsweise jene, die unavailable wird) ansprechen:
- action: homeassistant.reload_config_entry data: entity_id: sensor.whatever
Danke Marco, für den super Hinweis – man lernt halt nie aus! 😉
Produktempfehlungen
Hallo Olli
Bin beim Thema HomeAssistant ein relativer Neuling.
Bei mir ist immer wieder von Zeit zu Zeit das Addon „Samba BackUp“ nicht erreichbar und ich muss es manuell „neu Starten“
Da es sich aber um keine Entität handelt sondern um ein AddOn wie löst man dieses Problem.
Wäre über einen Rat/Hinweis dankbar.
LG M
Hallo Olli
Problem gelöst. In der Doku zum AddOn Samba Backup habe ich die Lösung gefunden.
IMPORT BLUE PRINT TO MyHomeAssistant
Or use this automation directly:
automation:
– alias: Restore Samba Backup sensor on startup
trigger:
– event: start
platform: homeassistant
action:
– service: hassio.addon_stdin
data:
addon: 15d21743_samba_backup
input: restore-sensor
mode: single
LG Manfred
Hi Manfred,
Danke fürs Teilen deiner Lösung und super, dass es nun funktioniert!
VG
Olli
Hallo Olli,
ich habe mich als neuling mit dem Shell Command versucht mit deinem Beispiel.
Leider sagt mir Home Assistant beim prüfen der Config:
Konfigurationswarnungen
Invalid config for ’shell_command‘ at shell_command.yaml, line 1: value should be a string for dictionary value ’shell_command->shell_command‘, got {‚tapo controller_restart‘: „/usr/bin/curl -X ‚POST‘ -H ‚authorization: Bearer Mein Token‘ http://meine-homeassistant/api/config/config_entries/entry/aec0d2723510f18213f0c51ffac6418e/reload“}
Nach einem Neustart habe ich auch 2 Fehlermeldungen im Log die sagen invalid config
Wie bekomme ich das hin?
Habs hinbekommen, lag am shell_command: !include shell_command.yaml in der config
Hi Ronny!
Top, dass du es hinbekommen hast, und sorry, dass ich nicht rechtzeitig reagieren konnte!
Hi,
auch ich hab eine Dumme Frage (auch wenn es keine gibt, wie bereits gelesen :D). Ich bin ganz neu in HASS und ich weiß ehrlich gesagt nicht wo ich die Automation genau anlege? Habe es bereits über Einstellungen und Automatisierungen probiert und dann in yaml Ansicht geswitched aber dort bekomme ich unterschiedlichste Fehler. Daher gehe ich davon aus, dass ich dort komplett falsch bin?!
Danke schonmal und Grüße
Malte
Korrekt, es gibt keine dummen Fragen hier 😉
Ich habe den Beispielcode gerade im aktuellen Editor für Automatisierungen nachgebaut und somit folgenden YAML-Code für dich generiert:
description: "Meross-Restart"
mode: single
trigger:
- platform: state
entity_id:
- cover.smart_garage_door_opener_msg100_main_channel
to: "unavailable "
for:
hours: 0
minutes: 5
seconds: 0
condition: []
action:
- service: shell_command.meross_restart
Wenn du auf Automatisierung erstellen -> Neue Automatisierung erstellen klickst und dann oben rechts bei den 3 Punkten Als YAML bearbeiten auswählst, solltest du eine leere, neue Automatisierung haben, in der du den zuvor angegebenen YAML-Code reinkopieren kannst. Dann noch Speichern, die Automatisierungs-YAML neu laden und schon sollte es klappen!
Viel Erfolg und
VG
Olli
🙁 scheinbar keiner mehr da 🙁
Sorry die Seite hat nicht neugeladen. Bitte alles löschen 🙂 Ich melde mich sofern ich Probleme bekommen sollte. Danke für deine Hilfe soweit!
Neu laden von Integrationen funktioniert auch ohne HTTP call via homeassistant.reload_config_entry service call:
Beispiel:
service: homeassistant.reload_config_entry
target:
entity_id: sensor.zoe_batteriestand
alias: Reload Renault Integration
data: {}
Als entity_id ein entity aus der Integration wählen, die neu gestartet werden soll.
Danke für den Hinweis! Wobei ich es dann wohl eher wie folgt umsetzen würde:
Nochmals danke für den Hinweis, das kannte ich noch nicht!
Hallo,
ich brauche bitte mal Hilfe. Ich bekomme das shell_Command nicht fehlerfrei in meine yaml.
Folgendes wird angezeigt:
unexpected end of the stream within a double quoted scalar (114:1)
111 | shell_command:
112 | fritz_smart_restart: „/usr/ …
113 | http://192.168.178.50:8123/ …
Ich verstehe es nicht. Und das Wort Bearer, bleibt das so oder muss das noch ersetzt werden?
Lieben Dank
Hallo Stefan,
hast du alle ‚ bzw. “ wie in dem Beispiel angegeben in deinem Code? Die Fehlermeldung „riecht danach“, das hier etwas fehlt.
Das Wort Bearer bleibt erhalten!
VG
Olli
Hallo Olli
Super! Genau danach habe ich lange gesucht 🙂 Funzt super. Danke
Hallo Olli,
ich kenn mich da nicht gut aus, deswegen eine vielleicht doofe Frage:dieses Shell Command kommt in die Config Yaml von Home Assistant und die andere Datei in die automations Yaml oder?
Gruß Alex
Hi Alex,
hier gibt es keine doofen Fragen! Zum einen wächst Home Assistant täglich und kleinere Dinge ändern sich über die Zeit und zum anderen bin ich jetzt beim Schreiben auch nicht immer die hellste Birne am Tannenbaum… 😉
Aber kommen wir zu deiner eigentlichen Frage: Ja, den shell_command kannst du so in deine configuration.yaml einfügen (halt mit deinen angepassten Daten). Und über die Automation kannst du diesen Shell-Command dann beliebig feuern.
Es kann sein, dass du einen Neustart von Home Assistant durchführen muss, damit der Shell-Command ausführbar wird!
Beste Grüße
Olli
Danke für diese ausführliche Anleitung! Ich nehme an das „Bearer“ in deinem Shell Command ist der Name deines Tokens?
Ach ja, es liegt an Meross. Mein WLAN ist in der Garage voll da (per Unifi AP) und ich habe exakt dieselben Probleme …
Sehr gerne dafür! 🙂
Ja, hier ist die Darstellung des Codes vermutlich etwas verwirrend. Im Original ist alles in einer Zeile, also „Bearer DEIN-LANGLEBIGER-ZUGANGS-TOKEN“ 😉
Und danke für den Hinweis mit der Ursache. Ich habe zwischenzeitlich auch auf Unifi umgestellt mit mehreren APs im Haus, aber konnte das Problem der „verschwundenen“ Garage natürlich nicht mehr feststellen, da ich diese Automation hier aktiv habe 😉
Danke erst mal für die Antwort. Leider kriege ich das nicht zum laufen 🙁
Immer wenn der Dienst ausgeführt wird, erhalte ich folgende Nachricht:
Login attempt or request with invalid authentication from homeassistant.david (192.168.1.164). See the log for details.
Egal was ich mache, es funzt einfach nicht. Derzeit sieht mein shell command so aus:
shell_command:
meross_restart: „/usr/bin/curl -X ‚POST‘ -H ‚authorization: Bearer reload_meross‘ http://192.168.1.999:8123/api/config/config_entries/entry/e8dbf56ec7d41310979901f123456789/reload“
Hast du einen Tipp, was das Problem sein könnte?
Mich irritiert dein Shell-Command und hier der Token. Hast du hier nur für den Kommentar dort „reload_meross“ eingefügt und eigentlich ist dort der Token?
Es sollte in etwa wie folgt aussehen bei dir:
'authorization: Bearer eyJ0eXAiOiJKV1QiL...
(nur halt natürlich mit DEINEM Token).„Login attempt…“ deutet ja bereits an, dass es ein Authentifizierungs-Problem zu geben scheint.
Danke für die Antwort. Mittlerweile habe ich den Fehler gefunden. Mir ging im Token wohl ein Zeichen verloren.
Ist aber auch kleinlich diese IT 😉
Du willst gar nicht wissen wie viel Zeit ich schon „verloren“ habe, nur weil ein Semikolon fehlte oder eine Variable falsch geschrieben war… 🙂
Vielen Dank für den interessanten Beitrag. Ich bin darauf gestoßen weil ich eine Möglichkeit suche Integrationen zu „pausieren“. Bin aber noch nicht fündig geworden. Der Hintergrund ist das ich einige wlan Geräte an einer schaltbaren Steckdose habe und die Integration nur brauche wenn die Steckdose an ist. Im Moment funktioniert es, aber die ganze Liste an Fehlermeldungen stört mich etwas. Hast du hier vielleicht einen Tipp?
Sehr gerne! 🙂
Eine Möglichkeit Integrationen zu pausieren, kenne ich bislang nicht. Sollte mir was dazu einfallen bzw. über den Weg laufen, lasse ich es dich wissen!
Eine Möglichkeit über Umwege könnte es aber sein, mit Sensor-Template zu arbeiten, welche nur „befüllt“ werden, wenn eben die genannte Steckdose Strom saugt bzw. an ist. Hast du in solche eine Richtung bereits überlegt?