[Modul] Tasmota

Dafür habe ich heute eine Antwort gesucht und leider nicht wirklich gefunden.

Letztendlich ist es für mich zumindest unlogisch, warum auch cmnd als RetainedMessages gespeichert werden sollte.

Es geht ja eher darum, den letzten Wert je Topic zu haben, aber Kommandos…

Hi Ralf,

im Prinzip entscheidet aber der Sender ob es Retained ist, oder nicht. Wir als MQTT Broker setzen dies nur um. Ich habe bzgl. Tasmota @KaiS mal gefragt wie er das sieht.

Meine Recherche zu dem Thema ergab, dass wir das Retained Flag korrekt auswerten und eine Retained Nachricht nur gelöscht wird, wenn diese mit leerem Topic an uns gesendet wurde. Siehe hier: Retained Messages - MQTT Essentials: Part 8

There is also a very simple way to delete the retained message of a topic: send a retained message with a zero-byte payload on the topic where you want to delete the previous retained message. The broker deletes the retained message and new subscribers no longer get a retained message for that topic. Often, it is not even necessary to delete, because each new retained message overwrites the previous one.

paresy

PS: Grad im Code nachgesehen - IP-Symcon löscht dies auch korrekt, wenn ein leerer Payload gesendet wurde :face_with_monocle:

Ihr habt das Problem richtig erkannt.
Ich glaube hier wird der Restart Befehl nicht gelöscht. Ich frage mich ob das nicht eigentlich der ESP tun müsste.

Wenn ich @paresy richtig verstanden habe, wird nach erfolgreicher Ausführung eigentlich die Message überschrieben. Müsste das nicht dann eigentlich Tasmota erledigen?

Wenn Retain in der Instanz abgehakt ist, dann wird die Nachricht her als Retain versendet.

So sollte zumindest sein. Ich prüfe das morgen mal.

Grüße,
Kai

Nicht wirklich. Es passiert folgendes:

  • Dein Tasmota Modul sendet ein Reboot (Retained)
  • IPS merkt sich Reboot als Retained
  • IPS leitet Reboot weiter an ESP, da auf den Topic abboniert.
  • ESP bootet neu
  • ESP abboniert wieder alle Topics
  • Dabei ist auch das Reboot Topic, welches sofort einen Reboot an den ESP sendet, da die Nachricht ja als Retained markiert ist
  • ESP bootet neu und startet die Schleife :slight_smile:

Im Prinzip kommt der ESP da nicht raus, es sei denn er würde
a) das Reboot Topic nicht abonnieren
b) vor dem Abonnieren das Reboot Topic explizit zurücksetzen (Leere Payload an Reboot Topic mit Retain Flag!)

paresy

Aber wie kann ich das beeinflussen?
Wenn ich neu starten will und der ESP nicht erreichbar ist, dann muss ich es ja mit dem Retain Flag senden.
Also müsste eigentlich der ESP dafür sorgen, oder?

Grüße,
Kai

Entweder dieser Use-Case ist nicht abbildbar

Oder genau das ist notwendig. Aber dann müsste der ESP, sobald er das Reboot empfängt, ein Publish Reboot (Retained) mit leerem Payload senden BEVOR er den eigentlich Reboot durchführt, damit der Broker die Meldung beim nächsten Subscribe nicht mehr sendet.

Vielleicht sollte jemand beim Tasmota Entwickler mal nachfragen, wie er dazu steht.

paresy

1 „Gefällt mir“

Ich kann als Workaround einbauen, dass der Restart immer ohne Retain Flag gesendet wird.

Grüße,
Kai

Das löst definitiv das Problem - erlaubt aber nicht mehr, wie von dir beschrieben, dass ein Gerät neu bootet, sobald es „wieder“ verfügbar ist. (Da es aktuell aber immer zu einer Reboot Loop in diesem Fall führt, würde ich den Workaround definitiv erst einmal einbauen, bis jemand Interesse hat mit dem Tasmota Entwickler zu schreiben, ob er diesen Use-Case überhaupt für Interessant findet)

paresy

Ich habe es mal im Tasmota Discord gefragt.

Die Antwort ist noch nicht so aussagekräftig, mal abwarten, ob noch mehr kommt.

This is true for any command.
There might be use case where one wants a command to be retained (while I don’t see any good reasons for now), so arbitrarily deciding to clear the command topic after each command could be heavy.
I would mostly qualify this as a problem between the chair and the broker mis-using the retain flag.

Aus meiner Sicht wäre es zumindest bei restart sehr sinnvoll das retain wegzulassen.

Eine etwas bessere Antwort und eine Idee zum Testen ;-).

The confirm is indeed necessary. That can be preempted by giving Restart the argument (payload) „1“. Without that, nothing gets executed, but the prompt {"Restart":"1 to restart, 2 to halt"} appears Basically, you can’d send a meaningful restart without it already being confirmed. Sending commands retained is normally a really bad plan.

Hallo Kai,

ich habe immer noch Probleme:

Blockquote25.03.2021 11:59:38 | 13269 | MESSAGE | VariableManager | [Program\IPSLibrary\data\core\IPSLogger\IPSLogger\HtmlOut_MsgId] = 816859
25.03.2021 11:59:38 | 00000 | CUSTOM | PHP | Error: Warning: First parameter must either be an object or the name of an existing class
Error in Script /var/lib/symcon/modules/.store/info.schnittcher.ips.tasmota/Tasmota/module.php on Line 233
134 in IPSLibrary/app/core/IPSLogger/IPSLogger.inc.php (call IPSLogger_Out)
37 in IPSLibrary/app/core/IPSLogger/IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
in IPSLogger_PhpErrorHandler
233 in modules/.store/info.schnittcher.ips.tasmota/Tasmota/module.php (call property_exists)
3 in /- (call ReceiveData)
25.03.2021 11:59:38 | 16787 | MESSAGE | VariableManager | [Program\IPSLibrary\data\core\IPSLogger\IPSLogger\SingleOut_Msg] =

Error: Notice: Undefined property: stdClass::$Button5
Error in Script /var/lib/symcon/modules/.store/info.schnittcher.ips.tasmota/Tasmota/module.php on Line 233

Mittlerweile ist Deine Beta Version installiert. Das Log wird geflutet.

Gruß
Christian

Hallo Kai,

ich komme dem Fehler leider nicht auf die Schliche. Es ist immer die eine Instanz. Ich habe die nun schon mehrfach neu angelegt. Leider ohne Erfolg. Ich habe auch schon das Tasmota Modul getauscht (S20 gegen Gosund) auch das hat nichts gebracht.

dump-5.txt (105,5 KB)

Ich füge mal einen Screenshot aus dem IPSLogger bei, und einen Dump aus der betroffenen Instanz.

Gruß
Christian

Kannst du mal die aktuelle Beta Version testen?
Dort sollte der Fehler nun gefixt sein.

@ralf, ab dieser Beta Version ist der Workaround für das Retain Problem auch vorhanden.

Grüße,
Kai

Also bei mir ist die Loop trotzdem noch vorhanden.
Tasmota über IPS neu gestartet und Retain Message ist noch vorhanden.

richimaint

Update installiert?
Kannst du mal ein Debug posten?

Grüße,
Kai

Update installiert…Ja
Debug von der Tasmota Device Instanz oder von der MQTT Server Tasmota Instanz?

Reboot loop ist bei mir auch und der Eintrag steht im RetainedMaessages.

Aber dort darf er überhaupt nicht mehr landen.

Das größte Problem mit diesem reset ist, dass damit die Konfiguration vom TAS zurückgesetzt wird und ich ihn neu einrichten muss.

Von der Tasmota Instanz.

Grüße,
Kai

dump (2).txt (24,1 KB)