Zustand bei Sonoff (Tasmota MQTT) wird nicht korrekt dargestellt

Begonnen von andies, 18 Juni 2018, 08:32:18

Vorheriges Thema - Nächstes Thema

andies

Ich habe eine Sonoff S20 mit Tasmota geflasht, aber beim Schalten wird der Zustand nicht korrekt wiedergegeben. Jetzt zum Beispiel ist sie ausgeschaltet, ich sehe aber
Internals:
   IODev      Mosquitto
   NAME       Sonoff_s20_2
   NR         162
   STATE      on
   TYPE       MQTT_DEVICE
   READINGS:
     2018-06-18 08:14:23   LWT             Online
     2018-06-18 08:26:24   POWER           on
     2018-06-18 08:26:24   STATE           {"Time":"2018-06-18T07:26:23", "Uptime":17, "Vcc":3.260, "POWER":"on", "Wifi":{"AP":1, "SSID":"XXXXXXXX", "RSSI":86, "APMac":"XX:XX:XX:XX:XX:XX"}}
     2018-06-18 08:26:24   Time            2018-06-18T07:26:23
     2018-06-18 08:26:24   Uptime          17
     2018-06-18 08:26:24   Vcc             3.26
     2018-06-18 08:26:24   Wifi_AP         1
     2018-06-18 08:26:24   Wifi_APMac      38:10:XX:XX:XX:XX
     2018-06-18 08:26:24   Wifi_RSSI       86
     2018-06-18 08:26:24   Wifi_SSID       XXXXXXXXX
     2018-06-18 08:29:09   state           off
     2018-06-18 08:29:09   transmission-state outgoing publish sent
   message_ids:
   publishSets:
     :
       topic      /cmnd/sonoffs202/POWER
       values:
         on
         off
   sets:
     off       
     on         
   subscribe:
     tele/sonoffs202/LWT
     tele/sonoffs202/STATE
   subscribeExpr:
     ^tele\/sonoffs202\/LWT$
     ^tele\/sonoffs202\/STATE$
   subscribeQos:
     tele/sonoffs202/LWT 0
     tele/sonoffs202/STATE 0
   subscribeReadings:
     tele/sonoffs202/LWT:
       cmd       
       name       LWT
     tele/sonoffs202/STATE:
       cmd       
       name       STATE
Attributes:
   IODev      Mosquitto
   devStateIcon .*:noIcon:noFhemwebLink
   group      Schalter
   publishSet on off /cmnd/sonoffs202/POWER
   room       Schalter
   stateFormat {(ReadingsVal($name,"LWT", "") eq "Online" ) ? ReadingsVal($name,"POWER", "error") : 'offline'}
   subscribeReading_LWT tele/sonoffs202/LWT
   subscribeReading_STATE tele/sonoffs202/STATE
   useSetExtensions 1
   verbose    0
   webCmd     on:off

Weiß jemand, wie man das hinbekommt? Was mache ich falsch?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

RaspiLED

Hi,
Was zeigt Dir die Tasmota Oberfläche an?
Ist es immer in FHEM eine Invertierte Anzeige oder ist es ein Delay?
Gruß Arnd


Gesendet von iPhone mit Tapatalk
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

helmut

Du meinst das in den Readings POWER und STATE das "on"? Das wird bei meinem S20 richtig angezeigt, allerdings grossgeschrieben.
Auch die Uptime wird bei Deinem eigenartig angezeigt. Meine Uptimes sehen eher so aus: "Uptime":"25T15:22:17"

Wie ist denn der Status Deiner Firmware? Tasmota-Kommandozeile:
11:24:30 CMD: state
11:24:30 MQT: stat/sonoff_s20_01/RESULT = {"Time":"2018-06-18T11:24:30","Uptime":"2T00:27:14","Vcc":3.457,"POWER":"OFF","Wifi":{[...]}}
11:24:35 CMD: status 2
11:24:35 MQT: stat/sonoff_s20_01/STATUS2 = {"StatusFWR":{"Version":"5.12.0","BuildDateTime":"2018-03-22T13:35:38","Boot":31,"Core":"2_4_1","SDK":"2.2.1(cfd48f3)"}}


Auf anderen Sonoffs habe ich inzwischen 5.14.0 installiert. Das verhaelt sich in dieser Hinsicht aber genauso wie 5.12.0.

Gruss Helmut
Intelligenz ist die Fähigkeit, Arbeit zu vermeiden, aber dafür zu sorgen, daß die Arbeit gemacht wird.
(Linus Torvalds)

andies

Vielen Dank für die Antworten. Also ich habe Program version 5.6.1g (bei Zugriff über die Weboberfläche -> Information). Als Zustand bekomme ich
STATUS = {"Status":{"Module":8, "FriendlyName":"sonoff-s20-2", "Topic":"sonoffs202", "ButtonTopic":"0", "Power":0, "PowerOnState":3, "LedState":1, "SaveData":1, "SaveState":1, "ButtonRetain":0, "PowerRetain":0}}
STATUS1 = {"StatusPRM":{"Baudrate":115200, "GroupTopic":"sonoffs", "OtaUrl":"http://raspfhem.fritz.box:80/api/arduino/sonoff.ino.bin", "Uptime":20, "Sleep":0, "BootCount":10, "SaveCount":55, "SaveAddress":"F5000"}}
STATUS2 = {"StatusFWR":{"Program":"5.6.1g", "BuildDateTime":"2018-04-29T13:01:53", "Boot":6, "Core":"2_3_0", "SDK":"1.5.3(aec24ac9)"}}
STATUS3 = {"StatusLOG":{"Seriallog":1, "Weblog":2, "Syslog":0, "LogHost":"raspfhem.fritz.box", "SSId1":"XXXXXX", "SSId2":"indebuurt2", "TelePeriod":300, "Option":"55800009"}}
STATUS4 = {"StatusMEM":{"ProgramSize":475, "Free":464, "Heap":24, "ProgramFlashSize":1024, "FlashSize":1024, "FlashMode":3}}
STATUS5 = {"StatusNET":{"Hostname":"sonoffs202-1422", "IPaddress":"192.168.2.31", "Gateway":"192.168.2.1", "Subnetmask":"255.255.255.0", "DNSServer":"192.168.2.1", "Mac":"XX:XX:XX:XX:XX", "Webserver":2, "WifiConfig":3}}
STATUS6 = {"StatusMQT":{"Host":"192.168.2.7", "Port":1883, "ClientMask":"DVES_%06X", "Client":"WHATEVER", "User":"DVES_USER", "MAX_PACKET_SIZE":475, "KEEPALIVE":15}}
STATUS7 = {"StatusTIM":{"UTC":"Mon Jun 18 09:51:58 2018", "Local":"Mon Jun 18 10:51:58 2018", "StartDST":"Sun Mar 25 02:00:00 2018", "EndDST":"Sun Oct 28 03:00:00 2018", "Timezone":1}}
STATUS10 = {"StatusSNS":{"Time":"2018-06-18T10:51:58"}}
STATUS11 = {"StatusSTS":{"Time":"2018-06-18T10:51:58", "Uptime":20, "Vcc":3.260, "POWER":"off", "Wifi":{"AP":1, "SSID":"XXXXXX", "RSSI":82, "APMac":"XX:XX:XX:XX"}}}

Die Weboberfläche reagiert sofort, also wenn geschaltet wird, steht dort sofort ON oder OFF, je nachdem, was nun gerade gilt. Die Kleinschreibung von POWER habe vermutlich ich zu verantworten, weil ich das mal im Sourcecode geändert habe.

Mir erscheint das eher ein Problem von FHEM zu sein. Denn das Gerät selbst merkt, dass es on oder off ist und reagiert. Aber die Oberfläche meines FTUI sowie des FHEMWEB reagiert nicht sofort. Kann das was mit longpoll zu tun haben?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

helmut

Zitat von: andies am 18 Juni 2018, 11:56:06
Aber die Oberfläche meines FTUI sowie des FHEMWEB reagiert nicht sofort. Kann das was mit longpoll zu tun haben?

Ah, dann ist das bei mir falsch 'ruebergekommen. FTUI benutze ich nicht und im FHEMWEB wird das bei mir sofort aktualisiert.
Das longpoll-Attribut habe ich auf "websocket" eingestellt.

Gruss Helmut
Intelligenz ist die Fähigkeit, Arbeit zu vermeiden, aber dafür zu sorgen, daß die Arbeit gemacht wird.
(Linus Torvalds)

andies

Ich glaube inzwischen, dass es ein MQTT Problem ist. Wie meldet denn der Schalter dem broker zurück, dass er geschaltet hat? Gibt es keine Rückmeldung "ich habe fertig"? Auf der Webseite des Gerätes selbst ist sofort zu sehen, dass der Sonoff reagiert hat.

Man könnte mit Teleperiod arbeiten. Die Teleperiod habe ich schon auf 30 eingestellt, aber auch das ist zu langsam. Der geringste Wert  ist 10. Aber selbst dann würde ich zehn Sekunden warten müssen, bis aus dem state on dann endlich off wird (und umgekehrt).
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Bapt. Reverend Magersuppe

#6
Also im Moment des Schaltens setzt der Tasmota-Sonoff einen MQTT ab.
So sieht das auf meiner mqtt-Konsole aus.
Das wird von FHEM gesendet wenn ich einen Schalt absetze:

09:12:43 cmnd/eingang/Power/set ON


Und das antwortet der Sonoff sofort drauf:

09:12:43 stat/eingang/POWER ON


Nachtragung:
Ich habe gerade nochmal ein wenig probiert. In der Version 5.13.1 wird bei mir diese Stat-Meldung nicht abgesetzt, in der 5.14 geht das (wieder?).

--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

helmut

Zitat von: andies am 21 Juni 2018, 07:12:25
Ich glaube inzwischen, dass es ein MQTT Problem ist. Wie meldet denn der Schalter dem broker zurück, dass er geschaltet hat? Gibt es keine Rückmeldung "ich habe fertig"?

Ich bin noch mal in mich gegangen und musste feststellen, dass ich zu Anfang vor demselben Problem stand und an meine
Loesung bei der Antwort nicht mehr gedacht habe. Ich habe RESULT subskribiert und das im stateFormat ausgewertet. Dabei
muss ich gestehen, dass ich inzwischen Deinen Code fuer stateFormat uebernommen habe. Danke fuer die Anregung. Beim
expandJSON habe ich das Attribut "addReadingsPrefix 1" gesetzt.

attr sonoff_pow_01 subscribeReading_RESULT stat/sonoff_pow_01/RESULT
attr sonoff_pow_01 stateFormat {(ReadingsVal($name,"LWT", "") eq "Online") ? ReadingsVal($name,"RESULT_POWER", "error") : 'offline'}


Gruss Helmut
Intelligenz ist die Fähigkeit, Arbeit zu vermeiden, aber dafür zu sorgen, daß die Arbeit gemacht wird.
(Linus Torvalds)

andies

FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

dola1

Entschuldigt, aber ich kenne mich überhaupt nicht gut aus. Wo finde ich denn das expandJSON-Device in das ich "addReadingsPrefix 1" eintragen muss. Oder muss ich es erst erstellen?
Jürgen