[Node Red] Shelly zyklisch nach frei vorgegebener Zeit autom. rebooten

    • Offizieller Beitrag
    • Autor

    Hallo zusammen,

    es gibt Situationen, die dem Motto "Jeder Boot tut gut" recht geben.

    In meinem Fall war es einer meiner ShellyMotion, der (höchst) sporadisch eingefroren war. Dann half nur noch ein Hardreset mit anschließendem Neueinbinden und einstellen.In einem Thread wurde intensiv darüber diskutiert.

    Zunächst habe ich versucht das Problem mit einem Homematic-Programm zu lösen. Leider funktionierte das zwar oft, aber eben nicht zuverlässig. ;(

    Der entscheidende Impuls für die jetzige, zuverlässige Lösung kam im Austausch mit neo-v , wofür ich mich an dieser Stelle recht herzlich bedanke! :)

    Und das Beste daran: Diese Lösung lässt sich meiner Einschätzung nach auf alle Shellytypen übertragen! :thumbup:


    Und so sieht der Flow aus, der den Shelly nach Uptime x rebooten lässt:

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    von links nach rechts nun die Einstellungen der Nodes:

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    (als Topic wählt Ihr den Datenpunkt "Uptime" des zu rebootenden Shelly)


    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    (Der Switch-Node prüft, ob die gewünschte Uptime erreicht ist. Die Zahl hinter >= entspricht der gewünschten Uptime in Sekunden, nach der der Reboot erfolgen soll!)

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.


    Hier setzt Ihr im Topic den Datenpunkt "Reboot" des Shelly.


    Das war es auch schon.

    Viel Spass damit. :) :thumbup:

  • Zur hilfreichsten Antwort springen
  • (Außer Shellies, die einen Sleepmode haben, z.B. Motion)

    Wenn ich einen Vorschlag machen darf, ohne ioBroker zu belasten, da Node Red ja eh verwendet wird.

    Funktioniert ohne MQTT, also Cloud kann verwendet werden, ioBroker muss nicht laufen, es sollte mit jedem Shelly funktionieren und damit die Shellies nicht tagsüber einfach rebooten kann man einen Zeitpunkt angeben.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    1. Inject: Ein Intervall für die Abfrage einstellen

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    2. http request: "GET" wählen, "[Shelly-IP]/status eintragen" und JSON bei Rückgabe einstellen

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    3. function: als JSON-Parser

    Code
    msg.payload = msg.payload["uptime"];
    return msg;


    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.


    4. switch: Zeit auf unter 10 Tage, da wir nur 1x täglich abfragen, der Shelly einen kleinen Moment für den Reboot benötigt und er sonst erst bei nächster Abfrage an Tag 11 rebooten würde

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.


    5. http request: "POST" wählen und "[Shelly-IP]/reboot" eintragen

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Damit sollte man von weniger abhängig sein und durch die seltene Abfrage Ressourcen schonen.

    Der Flow zum Importieren. IPs müssen angepasst werden.

    Code
    [{"id":"523daefe.f57dd","type":"function","z":"16380ce8.f9555b","name":"","func":"msg.payload = msg.payload[\"uptime\"];\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":500,"wires":[["80382f9d.ac28f8"]]},{"id":"b36248a4.1babb8","type":"http request","z":"16380ce8.f9555b","name":"Essz. Wandl. Status","method":"GET","ret":"obj","paytoqs":"ignore","url":"192.168.12.100/status","tls":"","persist":false,"proxy":"","authType":"","x":380,"y":500,"wires":[["523daefe.f57dd"]]},{"id":"8e32f527.b6ab3","type":"inject","z":"16380ce8.f9555b","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 03 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":190,"y":500,"wires":[["b36248a4.1babb8"]]},{"id":"80382f9d.ac28f8","type":"switch","z":"16380ce8.f9555b","name":"","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"860000","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":690,"y":500,"wires":[["4cee522.04377ac"]]},{"id":"4cee522.04377ac","type":"http request","z":"16380ce8.f9555b","name":"","method":"POST","ret":"obj","paytoqs":"ignore","url":"192.168.12.100/reboot","tls":"","persist":false,"proxy":"","authType":"","x":830,"y":500,"wires":[[]]}]

    Ich hoffe, dass die Variante über ioBroker nicht etwas anderes macht und ich am Thema vorbei bin.

    Darf meinetwegen auch in dem Node Red Bereich verlinkt werden.

    Mit freundlichem Gruß

    Andreas

    Einmal editiert, zuletzt von Schubbie (21. Juli 2021 um 08:30) aus folgendem Grund: Hinweis zum Sleepmode hinzugefügt.

  • damit die Shellies nicht tagsüber einfach rebooten kann man einen Zeitpunkt angeben.

    Hi, beim Motion kann das zu einem Problem führen, wenn er schläft, dann könnte der Reboot-Befehl ggf. nicht ankommen, daher Reboot wenn er Online ist am besten durchführen lassen, Das sollte dann wenn Zeitvorgabe gewünscht ist mit eingebaut werden!

    VG

    Maik

    • Hilfreichste Antwort
    • Offizieller Beitrag
    • Autor

    Gleiches gilt für alle batteriebetriebenen Shelly!

    Meine Lösung greift hier, weil auf das Senden reagiert wird, ;)

    (Ich habe auch zuerst mit http-request gearbeitet und das funktioniert eben zumindest am Beispiel Motion nicht zuverlässig, da er zu schnell wieder schläft.)

    Und nebenbei:

    ...

    Funktioniert ohne MQTT, also Cloud kann verwendet werden, ....

    Meine Lösung auch. ;) Ich nutze kein MQTT sondern COIOT, 8)

    Für alle Shelly ohne Sleep-Mode funktioniert natürlich auch die http-Variante von Dir, Schubbie :thumbup:

  • Da habe ich wohl ein kleines wichtiges Detail übersehen, welches ich hier nicht nachstellen kann (keine batteriebetriebenen Shellies vorhanden).

    Theoretisch würde es gehen, wenn das Abfrageintervall erhöht wird, ggf. mit einem Zeitfenster begrenzt, da wenn offline keine Statusmeldung zurück kommt. Allerdings belastet dieses das System, da das Intervall hoch sein muss, wenn auch nicht sehr stark.

    Hierfür gibt es auch die Shelly Nodes für z.B. Motion and Door, welche in kurzen Abständen lediglich einen Ping senden können (habe ich noch nicht getestet).

    Gibt es denn ein Intervall, in dem der Motion, bzw. DW immer online geht oder nur bei Bewegung?

    Für die, die MQTT nutzen, die müssen den Inject Mode entfernen und anstelle des HTTP-Get den MQTT-IN Node verwenden, dann wird es auch funktionieren.

    Vielleicht klappt es ja doch mit einem System weniger zuverlässig - nochmals drauf rumdenken.

  • Dieses Thema enthält 2 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.