State soll echten Zustand des Schalters repräsentieren.

Begonnen von tomleitner, 11 Dezember 2018, 23:47:12

Vorheriges Thema - Nächstes Thema

tomleitner

Hallo,

Ich binde aktuell ein paar Sonoff Basic switches über tasmota und Mosquitto ein. Aufgabenstellungen:

a.) Wenn der Taster betätigt wird, soll der echte Schaltzustand auch im FHEM sichtbar sein. -> Das klappt.
b.) Das "state" Reading soll den echten Schaltzustand reflektieren und NICHT automatisch gesetzt werden wenn man on/off schaltet. In anderen Worten: Ich schalte on, bekomme über MQTT die Rückmeldung ON und erst dann sollte das den "state" und damit das devStateIcon aktualisieren.
c.) Wenn, der Schalter offline ist soll das erkennbar sein.

Hier mein Device:


define TPSW5 MQTT_DEVICE
attr TPSW5 IODev MQTT_Broker
attr TPSW5 devStateIcon on:light_light_dim_100@green:off off:light_light_dim_00@red:on
attr TPSW5 icon li_wht_on
attr TPSW5 publishSet OutCMD:ON,OFF cmnd/TPSW5/POWER1
attr TPSW5 room MQTT
attr TPSW5 stateFormat state
attr TPSW5 userReadings info
attr TPSW5 subscribeReading_info tele/TPSW5/STATE
attr TPSW5 subscribeReading_info1 tele/TPSW5/INFO1
attr TPSW5 subscribeReading_info2 tele/TPSW5/INFO2
attr TPSW5 subscribeReading_info3 tele/TPSW5/INFO3
attr TPSW5 subscribeReading_state stat/TPSW5/POWER
attr TPSW5 subscribeReading_presence tele/TPSW5/LWT
attr TPSW5 webCmd ON:OFF


a.) Klappt problemlos. c.) wird durch das "presence" Reading reflektiert. Nur b.) klappt nicht: Wenn ich in der Weboberfläche auf "On" klicke wird das "state" reading sofort auf "ON" gesetzt -- obwohl der Schalter gar nicht online ist.
Wenn ich jedoch "set OutCMD ON" mache dann klappt das, das "state" reading bleibt auf OFF. So sollte es sein.

Wie erreiche ich was ich will?

Dank und schöne Grüße // Tom

tomleitner

Hallo,

Ist das so schwierig was ich will, oder hab ich es nicht gut genug beschrieben?

Ich versuche es nochmal: bei Klick auf ON im Web Interface soll NICHT der State automatisch auf ON gehen sondern erst dann wenn die Rückmeldung vom Gerāt kommt. 

Geht das ? Wenn ja, wie?

Thx.
Tom

tomleitner

Ok. Habe die in FHEM eingebaute Artificial Intelligence benutzt und:

a.) Auf MQTT2 umgestellt und
b.) Die devices per autocreate erzeugen lassen.

Danach erkannt dass der echte Zustand des Switches im Reading "POWER" sichtbar ist. Danach war nur noch ein:

attr DEVICE stateFormat POWER

notwendig um zu erreichen was ich wollte.

Hier die komplette Definition für eine SONOFF Basic mit tasmota:

define TPSW4 MQTT2_DEVICE DVES_677061
attr TPSW4 IODev MQTT2_Server
attr TPSW4 eventMap { dev=>{'^(.*)POWER(.?): OFF$'=>'$1POWER$2: off', '^(.*)POWER(.?): ON$'=>'$1POWER$2: on'} }
attr TPSW4 readingList DVES_677061:tele/TPSW4/LWT:.* LWT\
DVES_677061:cmnd/TPSW4/POWER:.* POWER\
DVES_677061:tele/TPSW4/INFO1:.* { json2nameValue($EVENT, 'INFO1_') }\
DVES_677061:tele/TPSW4/INFO2:.* { json2nameValue($EVENT, 'INFO2_') }\
DVES_677061:tele/TPSW4/INFO3:.* { json2nameValue($EVENT, 'INFO3_') }\
DVES_677061:stat/TPSW4/RESULT:.* { json2nameValue($EVENT, 'RESULT_') }\
DVES_677061:stat/TPSW4/POWER:.* POWER\
DVES_677061:tele/TPSW4/STATE:.* { json2nameValue($EVENT, 'STATE_') }\
DVES_677061:tele/TPSW4/UPTIME:.* { json2nameValue($EVENT, 'UPTIME_') }
attr TPSW4 room MQTT
attr TPSW4 setList off:noArg    cmnd/TPSW4/POWER1 0\
  on:noArg     cmnd/TPSW4/POWER1 1\
  toggle:noArg cmnd/TPSW4/POWER1 2
attr TPSW4 stateFormat {lc ReadingsVal("$name","POWER1","")}
attr TPSW4 devStateIcon on:light_light_dim_100@green:off off:light_light_dim_00@red:on
attr TPSW4 icon li_wht_on
attr TPSW4 stateFormat POWER


FHEM ist genial. Danke an alle Mit-Entwickler.

Cheers // Tom