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

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


    Bildschirmfoto vom 2021-07-20 22-17-21.png


    von links nach rechts nun die Einstellungen der Nodes:


    Bildschirmfoto vom 2021-07-20 22-20-15.png


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




    Bildschirmfoto vom 2021-07-20 22-21-01.png


    (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!)


    Bildschirmfoto vom 2021-07-20 22-21-20.png



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



    Das war es auch schon.


    Viel Spass damit. :) :thumbup:

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


    Flow.JPG


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


    Inject.JPG


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


    http request.JPG


    3. function: als JSON-Parser


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



    function.JPG



    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


    switch.JPG



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


    http request POST.JPG


    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

    Edited once, last by Schubbie: 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


    Meine Shellyfamilie (mal nachzählen ü80 Mann stark)

    Steuerung: IoBroker, zum testen/ vergleichen Home Assistant

    in Betrieb: 15x 2.5, 15x 1 , 2x PM, 6x HT, 1x Plug S, 6x Plug, 5x Flood, 2x Dimmer1, 1x Dimmer2, 4x Add-On, 3xDuo, 4x Button1, 1x EM, 5x i3, 2 xDW2, 2x1 L, 3x Uni, 5x Motion, 1x RGBW2

    fast alles ohne Cloud mit gutem Grund.

    Ich übernehme keine Haftung für Fehler. Nur eine Elektrofachkraft darf z.B. elektrische Anlagen und Betriebsmittel errichten, ändern und in Stand halten!

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

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

    Kleines nice to know, Andreas:


    NodRed läuft im ioBroker als Adapter und somit als Teil des ioBroker.


    Somit trifft der (von mir) rot markierte Part der Aussage nicht zu. ;)

  • Das es geht ist bekannt.

    Ich hatte Redmatic (Node Red) auf der Homematic (CCU3) laufen, mich jedoch dazu entschlossen dieses in einer separaten VM laufen zu lassen. Hat Vorteile bei der Sicherung und ich kann jedes System einzeln neu aufsetzen.

    Ich meine damit auch mehr, dass Node Red ioBroker ansprechen muss, welches wiederrum auf den Shelly geht.


    Meine Hoffnung war es, es einfacher gestalten zu können, allerdings hatte ich die Standby-Geräte nicht auf dem Schirm, für alle anderen empfinde ich meine Lösung als simpel und für spätere Änderungen leicht nachvollziehbar, da sich alles in einer Oberfläche ohne lange Zeilen abspielt und keine Adapter benötigt werden. Aber es scheint mit Shellies die schlafen gehen derzeit nicht komfortabeler als mit deiner Lösung möglich, wenn man nicht MQTT nutzt oder ständig Pings senden möchte.

    War auch bloß eine fixe Idee, die ich in 5 Minuten zusammengestellt habe und dafür fand ich es nicht schlecht ;-)