[gelöst] lightScene schaltet bei Zigbee2Mqtt Neustart Szene um

Begonnen von drhirn, 25 Januar 2023, 11:22:02

Vorheriges Thema - Nächstes Thema

drhirn

Hallo,

ich hab ein ganz merkwürdiges Phänomen mit einer lightScene. Die schaltet jedes Mal die Szene um, wenn ich den Zigbee2Mqtt Docker Container neu starte. Und weil der automatisch in der Nacht aktualisiert wird, leuchtet dann plötzlich mitten in der Nacht mein Wohnzimmer wie ein Weihnachtsbaum.

An der lightScene ist nichts besonderes eingestellt. Ich hab sie sogar mal ganz gelöscht (inkl. state-File) und neu erstellt. Das ging kurz gut, zwei Tage später hat schon wieder mein Wohnzimmer geleuchtet. Tagsüber, weil ich die Docker-Wartung verschoben habe. Bin ja nicht blöd ;).

Es wundert mich allerdings schon. In der lightScene sind diverse ZigBee-Lampen und Shelly bzw. EnOcean Steckdosen definiert. Aktiviert wird immer die Szene "Fernsehen". Vor dem Neu-Anlegen und auch jetzt. In der Szene ist ein Mischmasch an unterschiedlichen Geräten (ZigBee und Shelly).

Ich würde es ja verstehen, wenn die ein- oder andere Lampe nach dem Neustart des Z2M Containers angeht. Sollten da retained-Nachrichten sein. Aber dass die lightScene schaltet, ist mir unerklärlich.

Kann sich das irgendjemand von euch erklären? Oder hätte eine Tipp, wie ich das debuggen könnte?


defmod lsWohnzimmer LightScene enoAcLightWzTable enoAcLichtSchreibtisch MQTT2_shellyswitch25_000289 MQTT2_shellyplug02 z2mWzSchrank z2mWzBulb03 z2mWzSofa
attr lsWohnzimmer userattr rhasspyChannels:textField-long
attr lsWohnzimmer genericDeviceType scene
attr lsWohnzimmer rhasspyChannels Esslicht=set lsWohnzimmer scene Esslicht\
Fernsehlicht=set lsWohnzimmer scene Fernsehlicht\
Computerlicht=set lsWohnzimmer scene Computerlicht
attr lsWohnzimmer rhasspyMapping SetOnOff:cmdOn=set lsWohnzimmer scene AllesAn,cmdOff=set lsWohnzimmer scene AllesAus
attr lsWohnzimmer rhasspyName Licht,beleuchtung
attr lsWohnzimmer rhasspyRoom Wohnzimmer
attr lsWohnzimmer rhasspySpecials scenes:AllesAn="Alles an" AllesAus="Alles aus" Computerlicht="Computerlicht" Esslicht="Esslicht" Fernsehlicht="Fernsehlicht" Nachtlicht="Nachtlicht" cmdFwd=none cmdBack=none
attr lsWohnzimmer room System->Devices
attr lsWohnzimmer verbose 5


Danke!
Stefan

Beta-User

Hmm, das "riecht" irgendwie aber schon nach einem retain-Thema, falls (!) beim z2m-Neustart auch der MQTT-Server neu gestartet wird. Falls nicht, ist das eher sowas wie eine Statusabfrage beim z2m-Neustart an alle angebundenen Geräte.

Vielleicht irgendein Taster, der per notify oä. dazu dient, die LS zu schalten?
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

drhirn

Der MQTT Broker ist unabhängig von Z2M.

Aaaber: Ich habe in der Tat vor kurzem einen Schalter, mit dem ich die Szenen schalte, von EnOcean auf ZigBee umgerüstet. Das könnte zeitlich zusammen fallen. Der steht nämlich sicher immer auf Szene "Fernsehen". Beim ins Bett gehen verwende ich einen EnOcean Schalter um auszuschalten. Muss ich überprüfen.
Die Frage ist nur: Wie löse ich das, wenn's wirklich der Schalter ist?

Beta-User

Zitat von: drhirn am 25 Januar 2023, 12:02:44
Die Frage ist nur: Wie löse ich das, wenn's wirklich der Schalter ist?
Da habe ich leider keine schnelle Idee.

Falls es wirklich eine Statusabfrage ist, kann uU. bei z2m was konfiguriert werden. Ansonsten müßte man die Events kennen, die da insgesamt kommen; vielleicht kann man per ReadingsAge() am z2m-Sortierdevice den Verbindungsstatus auswerten?
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

drhirn

Beim Neustart von Z2M kommt nur folgendes daher:

{"last_seen":"2023-01-24T19:26:21+01:00","linkquality":127}

Das Reading "action", das den Schalter-Zustand wiedergibt, ist also nicht betroffen.

Der Schalter sieht so aus. An den Readings sieht man, dass das Reading "action" seit gestern Abend nicht aktualisiert wurde. Die anderen schon, weil ich Z2M neu gestartet habe.

defmod MQTT2_zigbee_PTM215ZE01 MQTT2_DEVICE zigbee_PTM215ZE01
attr MQTT2_zigbee_PTM215ZE01 userattr lightSwitch_map structexclude
attr MQTT2_zigbee_PTM215ZE01 comment ZigBee PTM215ZE Schalter für die Lichtszenen im Wohnzimmer auf dem Couchtisch
attr MQTT2_zigbee_PTM215ZE01 group Schalter
attr MQTT2_zigbee_PTM215ZE01 lightSwitch_map action:press_1:BI action:press_2:B0 action:press_3:AI action:press_4:A0 action:release_1:BI action:release_2:B0 action:release_3:AI action:release_4:A0
attr MQTT2_zigbee_PTM215ZE01 readingList zigbee2mqtt/PTM215ZE01:.* { json2nameValue($EVENT) }\
zigbee2mqtt/PTM215ZE01/availability:.* availability
attr MQTT2_zigbee_PTM215ZE01 room MQTT2_DEVICE

setstate MQTT2_zigbee_PTM215ZE01 AI
setstate MQTT2_zigbee_PTM215ZE01 2023-01-22 17:08:38 IODev Mosquitto
setstate MQTT2_zigbee_PTM215ZE01 2023-01-24 19:26:21 action release_3
setstate MQTT2_zigbee_PTM215ZE01 2023-01-13 21:17:40 associatedWith zigbee2mqttBridge
setstate MQTT2_zigbee_PTM215ZE01 2023-01-25 12:34:11 availability online
setstate MQTT2_zigbee_PTM215ZE01 2023-01-25 12:34:11 last_seen 2023-01-24T19:26:21+01:00
setstate MQTT2_zigbee_PTM215ZE01 2023-01-25 12:34:11 linkquality 127


Alles Schalter sind in einer structure zusammen gefasst. Diese structure schaltet dann schlussendlich die lightScene. Und wird immer getriggert, wenn Z2M hochfährt. Da dürfte also das Problem liegen. Ich hab nur keine Ahnung, wie ich der verbieten könnte, ein Event auszulösen.

defmod structLichtszenenWz structure lightSwitch enoSwitch05 enoSwitch03 MQTT2_zigbee_PTM215ZE01
attr structLichtszenenWz clientstate_behavior last
attr structLichtszenenWz room System->Structure

setstate structLichtszenenWz AI
setstate structLichtszenenWz 2023-01-25 12:34:11 LastDevice MQTT2_zigbee_PTM215ZE01
setstate structLichtszenenWz 2023-01-25 12:34:11 LastDevice_Abs MQTT2_zigbee_PTM215ZE01
setstate structLichtszenenWz 2023-01-25 12:34:11 state AI

drhirn

attr ... event-on-update-reading action hilft. Dann bekomm ich halt die anderen Readings des Schalters nicht mehr mit. Aber das ist jetzt vorläufig mal verkraftbar.

drhirn

#6
Und die wahrscheinlich endgültige Lösung ist ein readingsProxy


defmod readingProxyPTM215ZE01 readingsProxy MQTT2_zigbee_PTM215ZE01:action
attr readingProxyPTM215ZE01 userattr lightSwitch lightSwitch_map structexclude
attr readingProxyPTM215ZE01 eventMap press_1:BI press_2:B0 press_3:AI press_4:A0 release_1:BI release_2:B0 release_3:AI release_4:A0
attr readingProxyPTM215ZE01 lightSwitch_map press_1:BI press_2:B0 press_3:AI press_4:A0 release_1:BI release_2:B0 release_3:AI release_4:A0


Der kommt statt dem Schalter in die structure und schon kann mir das egal sein, ob im Schalter irgendwelche Events getriggert werden.

Beta-User

...kommt mir wie ein workaround vor...

Vielleicht sollte man Rudi mal anhauen, mir kommt das triggern der structure vor wie ein nicht erwünschtes Verhalten, das noch aus einer Zeit stammt, in der "single-Reading"-Devices noch Stand der Dinge waren...
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

drhirn

Zitat von: Beta-User am 25 Januar 2023, 16:28:03
Vielleicht sollte man Rudi mal anhauen, mir kommt das triggern der structure vor wie ein nicht erwünschtes Verhalten, das noch aus einer Zeit stammt, in der "single-Reading"-Devices noch Stand der Dinge waren...

https://forum.fhem.de/index.php/topic,131841.msg1260074.html#msg1260074