Reload Home Assistant Integration in 3 Schritten

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.

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.

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? 😉

Reload Home Assistant Integration
Manueller Reload Home Assistant Integration

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:

Reload Home Assistant Integration
Reload Home Assistant Integration API-Call

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:

Reload Home Assistant Integration in 3 Schritten
Langlebigen Zugangs-Token für Home Assistant erstellen

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:
  - service: 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.

Dieser Beitrag ist Teil einer kleinen Beitrags-Serie rund um den hass.io Home Assistant.

20 Gedanken zu „Reload Home Assistant Integration in 3 Schritten“

  1. 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?

    Antworten
  2. 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

    Antworten
    • 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

      Antworten
  3. 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

    Antworten
    • 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

      Antworten
  4. 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

    Antworten
    • 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

      Antworten
  5. 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 …

    Antworten
    • 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 😉

      Antworten
      • 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?

        Antworten
        • 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.

          Antworten
          • 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… 🙂

  6. 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?

    Antworten
    • 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?

      Antworten

Schreibe einen Kommentar