Sonoff Tasmota auto restart

Geflasht oder ungeflasht ...

Moderatoren: Cyrelian, udo1toni

mcdandrew
Beiträge: 163
Registriert: 13. Dez 2018 17:42

Sonoff Tasmota auto restart

Beitrag von mcdandrew »

Gibt es eine Möglichkeit bei meinen Sonoff Geräten (geflasht mit Tasmota) einen automatischen reboot auszuführen???
Ich sehe zwei Möglichkeiten...

1. Ausführung per MQTT vom Openhab...
2. Direktes Konfigurieren auf den Sonoffs im Webinterface bzw. der Konsole.

Leider fehlt mir der entsprechende Ansatz.

Hintergrund ist, dass einzelne Sonoffs nach ein paar Wochen per MQTT keine Daten mehr senden.

mcdandrew
Beiträge: 163
Registriert: 13. Dez 2018 17:42

Re: Sonoff Tasmota auto restart

Beitrag von mcdandrew »

Für alle die es interessiert...hier eine Lösung für Möglichkeit 2

Im Webinterface
- Zeitplan konfigurieren
- Zeitplan aktivieren
- Time 1 auswählen
- Aktion Regel
- Aktiv und wiederholen auswählen
- Uhrzeit auswählen

In der Konsole
rule1 on clock#timer=1 do restart 1 endon
rule1 1

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Sonoff Tasmota auto restart

Beitrag von peter-pan »

..für die erste Möglichkeit, kann ich dir folgendes anbieten:

1. .items

Code: Alles auswählen

String    Sonoff_Action "Sonoff Action [MAP(de.map):%s]" <arendst> (gSonoffs,gSonoff,gVer)
2. .sitemap

Code: Alles auswählen

Switch item=Sonoff_Action mappings=[restart="Restart", queryFW="Query FW", upgrade="Upgrade FW"]
3. .rules

Code: Alles auswählen

// Work with a list of selected Sonoff modules
//
val sonoff_device_ids = newArrayList(
         "pow_02",
         "basic_03"
)

// OR
// Work with the grouptopic, addressing ALL modules at once
// val sonoff_device_ids = newArrayList("sonoffs")

// https://community.openhab.org/t/using-sonoff-power-switches-with-tasmota-firmware-and-openhab2-mqtt2-binding/59969/7  // thx to @opus
rule "Sonoff Maintenance"
  when
   Item Sonoff_Action received command
  then
//   logInfo("sonoff_maintenance", "Sonoff Maintenance on all devices: " + receivedCommand)
   val actionsBroker = getActions("mqtt","mqtt:broker:hans") // change to your broker name!
   for (String device_id : sonoff_device_ids) {
      switch (receivedCommand) {
         case "restart" : {
             actionsBroker.publishMQTT( "cmnd/" + device_id + "/restart", "1")
             logInfo("sonoff_maintenance", "Sonoff Maintenance: " + device_id + " / " + receivedCommand + " / " + sonoff_device_ids)
            }
         case "queryFW" : {
             actionsBroker.publishMQTT( "cmnd/" + device_id + "/status", "2")
             logInfo("sonoff_maintenance", "Sonoff Maintenance: " + device_id + " / " + receivedCommand + " / " + sonoff_device_ids)
            }
         case "upgrade" : {
             actionsBroker.publishMQTT( "cmnd/" + device_id +"/otaurl", "http://thehackbox.org/tasmota/release/tasmota-DE.bin")  // my modification, as for me this URL seems the better one -> tasmota 
             actionsBroker.publishMQTT( "cmnd/" + device_id + "/upgrade", "1")
             logInfo("sonoff_maintenance", "Sonoff Maintenance: " + device_id + " / " + receivedCommand + " / " + sonoff_device_ids)
            }
        }
    }
//   Sonoff_Action.postUpdate(NULL)
   createTimer(now.plusSeconds(5), [ |
    Sonoff_Action.postUpdate("OFF")
   ])
   
 end
Mit dieser Regel (oder einem Extrakt daraus - "restart"), kannst du (auch) einen Restart durchführen.

Das geht über einzelne Devices (topic) oder Device-Gruppen (Group-Topic), die du in die Array-List eintragen musst. Als Group-Topics kommen hier normalerweise "sonoffs" oder neuerdings "tasmotas" in Frage

Mit "queryFW" wird einfach ein Refresh des items "Firmware-Release" gemacht, falls du so eins definiert hast.

Mit "upgrade" wird ein Firmware-Upgrade gemacht (ohne Gewähr). Bei mir klappt es zwar, aber nur bei den Sonoffs(1MB), die ich selbst einmal per Atom geflasht habe. Bei einem ESP8266, den ich per "Gitpod" geflasht habe funktioniert das leider nicht. Ich könnte mir vorstellen, dass das an der Speichergrösse des RAMs(4 MB) liegt. Das muss ich noch genauer untersuchen.

Ich flashe auch nicht Gruppen, da ich da mal vor ca. einem Jahr ein Problem hatte, sondern immer nur 2 oder 3 gleichzeitig.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

mcdandrew
Beiträge: 163
Registriert: 13. Dez 2018 17:42

Re: Sonoff Tasmota auto restart

Beitrag von mcdandrew »

Ich habe deine Regel ein wenig gekürzt, aber es funktioniert!

Da ich für jedes Sonoff Device eine Info Seite in Openhab habe gibt es dort nun auch den entsprechenden Restart Switch.

Bei meinen T1 mit MQTT2 funktioniert es problemlos....bei den derzeit noch auf MQTT1 bassierenden Sonoff Dual nicht.
Es erschein im LOG die Meldung "Instance is not an MQTTActions class."

Hier mal ein Beispiel meiner ITEMS

ITEM-File

Code: Alles auswählen

String dual_kueche_laufzeit "Laufzeit [%s]"	{ mqtt="<[mosquitto:tele/dual_kueche/STATE:state:JSONPATH($.Uptime)]" }
String dual_kueche_u_restart "Restart" 
RULE-File

Code: Alles auswählen

rule "dual_kueche_u_restart"
when
	Item dual_kueche_u_restart received command
then
	val actionsBroker = getActions("mqtt","mqtt:broker:mosquitto")
	actionsBroker.publishMQTT( "cmnd/dual_kueche_u_restart/restart", "1")

	createTimer(now.plusSeconds(5), [ |
    dual_kueche_u_restart.postUpdate("OFF")
	])
end
Hast du eine Idee woran es liegen kann?

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Sonoff Tasmota auto restart

Beitrag von peter-pan »

Ja, das liegt daran, dass die Regel bei einem MQTT1-Device (ich nenn es mal so, also ohne Thing), etwas anders aussieht.

Code: Alles auswählen

rule "dual_kueche_u_restart"
when
	Item dual_kueche_u_restart received command
then
        publish("mosquitto", "cmnd/dual_kueche_u_restart/restart", "1")
	createTimer(now.plusSeconds(5), [ |
        dual_kueche_u_restart.postUpdate("OFF")
	])
end
So könnte es evtl. für deine MQTT1-Devices gehen, aber wie mmer ohne Gewähr ;) .
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

mcdandrew
Beiträge: 163
Registriert: 13. Dez 2018 17:42

Re: Sonoff Tasmota auto restart

Beitrag von mcdandrew »

Vielen Dank...ein kleiner Fehler war noch in Deiner Rule...falls es jemand weiterverwenden möchte hier die korrekt Rule

Code: Alles auswählen

rule "dual_kueche_restart"
when
	Item dual_kueche_restart received command
then
		publish("mosquitto", "cmnd/dual_kueche/restart", "1")
		createTimer(now.plusSeconds(5), [ |
        dual_kueche_restart.postUpdate("OFF")
		])
end 
Außerdem ist es notwendig in der Paper UI das Paket "MQTT Action" zu installieren!

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Sonoff Tasmota auto restart

Beitrag von peter-pan »

... bei MQTT1 hab ich eigentlich "MQTT1-Action! vorausgesetzt. Sorry !!!

Was war sonst noch. Kann's auf die Schnelle nicht erkennen !!! War aber, wie gesagt, ohne Gewähr :D

Edit: Hab's gerade doch gesehen. Schau mal in deine Regel, da hab ich den Publish-Befehl übernommen ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

mcdandrew
Beiträge: 163
Registriert: 13. Dez 2018 17:42

Re: Sonoff Tasmota auto restart

Beitrag von mcdandrew »

Oh Sorry hast recht....war meine Schuld :roll:

Heavy-Dee
Beiträge: 139
Registriert: 18. Jan 2018 16:38

Re: Sonoff Tasmota auto restart

Beitrag von Heavy-Dee »

Hallo zusammen,

ich möchte das Thema nochmal aufgreifen.

Unter oH2.5 habe ich mit folgender DSL-Regel alle "Tasmota Devices" 1xwöchentlich neu starten lassen.

Code: Alles auswählen

        val actionsBroker = getActions("mqtt","mqtt:broker:mosquitto")
        for (String device_id : tasmota_devices) {
            actionsBroker.publishMQTT( "cmnd/" + device_id + "/restart", "1")
        }
Da ich jetzt dabei bin auf oH4 umzustellen, wollte ich dieses wieder nutzen, es funktioniert aber nicht :|
Bekomme folgende Fehlermeldung!
2023-08-24 10:20:37.934 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID '269994798d' failed: val actionsBroker = getActions("mqtt","mqtt:broker:59dfa5c9cb")
for (String device_id : tasmota_devices) {
actionsBroker.publishMQTT( "cmnd/" + device_id + "/restart", "1")
}
The method or field tasmota_devices is undefined; line 2, column 104, length 15
Bridge ID habe ich angepasst.

z.Zt. betreibe ich beide System 2.5 u. 4.0 parallel mit 2.5 funktionier der Restart, mit 4.0 nicht.
Hat vielleicht jmd. einen Tipp für mich ?
openHab2 (v. 2.5.2) Docker auf Synology DS920+
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

Benutzeravatar
udo1toni
Beiträge: 13859
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Sonoff Tasmota auto restart

Beitrag von udo1toni »

Wie (wo) ist tasmota_devices definiert?

Eigentlich könntest Du das auch ganz bequem über das Group Topic auf mqtt-Ebene lösen. Du musst nur sicherstellen, dass alle Devices das gleiche Group Topic haben.
Wenn Du es nicht selbst gesetzt hast, sollte es mit Tasmota seit v 7 (?) auf tasmotas als Group Topic 1 gesetzt sein, bei Fulltopic %prefix%/%topic%/ sollte also ein cmnd/tasmotas/restart 1 ausreichen, um alle Devices neu zu starten, ganz ohne Iteration über alle Geräte (Einzig die nicht vorhandene Möglichkeit, das zeitlich gestaffelt zu erledigen gibt es so nicht).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten