eventMap vs. stateFormat

Begonnen von OppiM, 27 März 2020, 13:40:00

Vorheriges Thema - Nächstes Thema

OppiM

Hi,

ich versuche, mir bei meinen Zigbee2MQTT-Geräten zusätzlich den aktuellen Online-Status anzeigen zu lassen, analog zu den Tasmota-MQTT2-Templates.

Dazu habe ich in Zigbee2MQTT den availability_timeout gesetzt und bekomme bei den einzelnen Devices jetzt den Status (online/offline) als Reading availability.

So sieht ein Device dann aus:
Internals:
   CHANGED   
   CID        Osram_SmartPlug_1
   DEF        Osram_SmartPlug_1
   DEVICETOPIC Osram_SmartPlug_1
   FUUID      5c77cdd9-f33f-1aa9-f7de-7506ca5809b49bc0
   IODev      m2s
   LASTInputDev m2s
   MSGCNT     1746
   NAME       Osram_SmartPlug_1
   NR         486
   STATE      on
   TYPE       MQTT2_DEVICE
   m2s_MSGCNT 1746
   m2s_TIME   2020-03-27 13:25:10
   OLDREADINGS:
     2020-03-27 13:25:09   LastMessage     Fri Mar 27 13:25:09 2020
   READINGS:
     2020-03-27 13:25:10   LastMessage     Fri Mar 27 13:25:10 2020
     2020-03-27 13:25:10   LastOldMessage  Fri Mar 27 13:25:09 2020
     2019-03-29 10:44:43   associatedWith  Zigbee2MQTT
     2020-03-27 12:22:34   availability    online
     2020-03-27 13:25:10   device_dateCode 20140331DEOS****
     2020-03-27 13:25:10   device_friendlyName Osram_SmartPlug_1
     2020-03-27 13:25:10   device_hardwareVersion 1
     2020-03-27 13:25:10   device_ieeeAddr 0x84182600000d36cb
     2020-03-27 13:25:10   device_manufacturerID 48042
     2020-03-27 13:25:10   device_manufacturerName OSRAM
     2020-03-27 13:25:10   device_model    AB3257001NJ
     2020-03-27 13:25:10   device_networkAddress 9178
     2020-03-27 13:25:10   device_powerSource Mains (single phase)
     2020-03-27 13:25:10   device_softwareBuildID V1.05.09
     2020-03-27 13:25:10   device_type     Router
     2020-03-27 13:25:10   device_zclVersion 1
     2020-03-27 13:25:10   last_seen       2020-03-27T13:25:10+01:00
     2020-03-27 13:25:10   linkquality     46
     2020-03-27 13:25:10   state           ON
     2020-03-27 13:25:10   update_available false
Attributes:
   DbLogExclude .*
   IODev      m2s
   autocreate 0
   devStateIcon online:10px-kreis-gruen offline:10px-kreis-rot off:message_socket_off@black on:message_socket_on2@green set_.*:message_socket_unknown@red
   event-on-change-reading state,availability
   eventMap   { dev=>{ON=>'on',OFF=>'off'} }
   group      Schalter,Zigbee2MQTT
   icon       hue_filled_outlet
   imageLink  /fhem/deviceimages/mqtt2/AB3257001NJ.jpg
   model      OSRAM Smart+ plug (AB3257001NJ)
   oldreadings LastMessage
   readingList zigbee2mqtt/Osram_SmartPlug_1:.* { json2nameValue($EVENT) }
zigbee2mqtt/Osram_SmartPlug_1/availability:.* availability
   room       MQTT2_DEVICE,Zigbee2MQTT
   setList    on:noArg zigbee2mqtt/Osram_SmartPlug_1/set {"state":"ON"}
off:noArg zigbee2mqtt/Osram_SmartPlug_1/set {"state":"OFF"}
statusRequest:noArg zigbee2mqtt/Osram_SmartPlug_1/get
checkOTA:noArg zigbee2mqtt/bridge/ota_update/check Osram_SmartPlug_1
doOTA:noArg zigbee2mqtt/bridge/ota_update/update Osram_SmartPlug_1
   stateFormat availability
state
   userReadings LastMessage {localtime},
LastOldMessage {OldReadingsVal($name,"LastMessage","")}
   webCmd     on:off


Analog zu den MQTT2-Templates habe ich dann devStateIcon und stateFormat gesetzt:
devStateIcon online:10px-kreis-gruen offline:10px-kreis-rot off:message_socket_off@black on:message_socket_on2@green set_.*:message_socket_unknown@red
stateFormat availability
state


Wenn ich jetzt das Device schalte, sehe ich kurz die Anzeige, die ich haben will, danach verschwindet der Kreis für den Status sofort wieder. STATE ist danach auch wieder "on" oder "off", nicht das "online on" oder "online off" wie erwartet.

Nach einigen Suchen hab ich dann festgestellt, dass die eventMap der Verursacher zu sein scheint. Lösche ich diese, bleibt STATE wie erwartet und die Anzeige funktioniert. Dummerweise kann ich dann die Steckdose nicht mehr schalten....

Gibt es eine Möglichkeit, beides zu benutzen?

Gruß,
Michael

Beta-User

Mach es zweizeilig im stateFormat:attr Osram_SmartPlug_1 stateFormat state\
availability
Dann kannst du vermutlich auch auf webCmd verzichten.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

OppiM

Hi,

das ist es schon, kam im list wohl nicht richtig über.

Hier mal die RAW definition:

defmod Osram_SmartPlug_1 MQTT2_DEVICE Osram_SmartPlug_1
attr Osram_SmartPlug_1 DbLogExclude .*
attr Osram_SmartPlug_1 IODev m2s
attr Osram_SmartPlug_1 autocreate 0
attr Osram_SmartPlug_1 devStateIcon online:10px-kreis-gruen offline:10px-kreis-rot off:message_socket_off@black on:message_socket_on2@green set_.*:message_socket_unknown@red
attr Osram_SmartPlug_1 event-on-change-reading state,availability
attr Osram_SmartPlug_1 eventMap { dev=>{ON=>'on',OFF=>'off'} }
attr Osram_SmartPlug_1 group Schalter,Zigbee2MQTT
attr Osram_SmartPlug_1 icon hue_filled_outlet
attr Osram_SmartPlug_1 imageLink /fhem/deviceimages/mqtt2/AB3257001NJ.jpg
attr Osram_SmartPlug_1 model OSRAM Smart+ plug (AB3257001NJ)
attr Osram_SmartPlug_1 oldreadings LastMessage
attr Osram_SmartPlug_1 readingList zigbee2mqtt/Osram_SmartPlug_1:.* { json2nameValue($EVENT) }\
zigbee2mqtt/Osram_SmartPlug_1/availability:.* availability
attr Osram_SmartPlug_1 room MQTT2_DEVICE,Zigbee2MQTT
attr Osram_SmartPlug_1 setList on:noArg zigbee2mqtt/Osram_SmartPlug_1/set {"state":"ON"}\
off:noArg zigbee2mqtt/Osram_SmartPlug_1/set {"state":"OFF"}\
statusRequest:noArg zigbee2mqtt/Osram_SmartPlug_1/get\
checkOTA:noArg zigbee2mqtt/bridge/ota_update/check Osram_SmartPlug_1\
doOTA:noArg zigbee2mqtt/bridge/ota_update/update Osram_SmartPlug_1
attr Osram_SmartPlug_1 stateFormat availability\
state
attr Osram_SmartPlug_1 userReadings LastMessage {localtime},\
LastOldMessage {OldReadingsVal($name,"LastMessage","")}
attr Osram_SmartPlug_1 webCmd on:off


Gruß,
Michael

Beta-User

Ah, sorry, hatte ich übersehen.

Dann 3. Argument für devStateIcon testen:
ZitatdevStateIcon online:10px-kreis-gruen offline:10px-kreis-rot off:message_socket_off@black:on on:message_socket_on2@green:off set_.*:message_socket_unknown@red:toggle
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

OppiM

Kein Unterschied.

Beim Schalten ist kurz der Kreis zu sehen, dann wieder nur das Icon. STATE ist auch wieder nur "on" oder "off".

Ich hab mal versucht, die eventMap zu vergrößern ({ dev=>{ON=>'on',OFF=>'off','online ON'=>'online on'}), auch kein Erfolg.

Beta-User

Hmm, eigentlich sollte die eventMap seit einiger Zeit gar nicht erforderlich sein, das kratzt eh' nur ziemlich an der Oberfläche.

Aber wenn im Internal STATE keine zwei Zeilen stehen, sondern nur "on" (bzw. "ON" usw.)  kann das nicht klappen. Erst da für saubere Verhältnisse sorgen, der Rest kommt dann erst.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files