Hallo liebe Community,
ich habe ein Verständnisproblem und hoffe jemand kann mich auf den richtigen Weg lenken ;)
Ich habe 2 Ikea Tradfri Button, welche eine Ikea Tradfri Lampe schalten sollen. Die Buttons können "ON" und "OFF". Ich nutze zigbee2mqtt und somit nicht das Gateway von Ikea. An sich funktioniert das auch alles, aber ein "Phänomen" tritt auf, wenn ich Button1 on drücke und mit Button 2 off. Danach kann ich mit Button1 das Licht nicht wieder einschalten. Erst wenn ich Button1 off drücke (wobei die Lampe ja bereits aus ist) kann ich die Lampe mittels Button1 wieder on schalten.
Im Endeffekt werte ich nur Readings aus.
([0x588e81fffe0c8136:action] eq "on") (set Esstisch ON)
Drücke ich Button1 on, erscheint im Eventmonitor auch die action: on, daher bin ich davon ausgegangen, dass Button1 das Licht zu jeder Zeit einschalten kann. Tut er aber nicht. Zuerst muss ich Button1 off drücken.
Es fühlt sich so an, als würde der Button1 denken, dass er ja on ist und nicht nochmal on sein kann. Da das Licht über Button2 ausgeschaltet wurde, ist das Licht aber aus.
Wahrscheinlich könnte ich mit Dummy und Notify das umgehen, aber vielleicht weiß ja jemand eine elegantere schreibärmere Lösung.
LG
Christian
Hallo CHristian,
Hast Du evtl event-on-change-reading gesetzt? Dann würde genau das passieren was Du beschreibst, ein on kammz dann nur wenn vorher off war. Du brauchst also ein event-on-update-reading . . .
Ein list vom device würde uns helfen.
Gruesse!
Hi Jamo,
nein, ich habe überhaupt kein Attribut gesetzt.
Ich schaue mir nun aber mal das Attribut event-on-update-reading an.
Danke für den Hinweis.
1. Du solltest dir mal auf dem Event-Monitor anzeigen lassen, welche Events in welchen Fällen kommen.
Kommt kein 2. "on" (oder ist unterdrückt mit event-on-change-reading), kann es kaum klappen.
2. Das sieht nach einem DOIF aus (list ...?). Das "denkt" (je nach Konfiguration...) "zustandsbezogen" und nicht unbedingt "eventbezogen". Da gibt es Attribute, um das umzustellen (die ich aber nicht kapiere und daher das Modul meide).
3. vermutlich gibt es Möglichkeiten, die Geräte schlicht auf der ZigBee-Ebene in eine "Gruppe" zu packen, damit die direkt kommunizieren. Das ist die vermutlich ausfallsicherste Variante, sowas umzusetzen.
4. Vermutlich würde ich das mit _einem_ einfachen notify lösen, und dann bei allen Events _von beiden Geräten_ (egal ob on oder off) einfach toggeln, wenn man nicht direkt on oder off (in Form von $EVENT) weitergeben kann.
zu 1: Im Event Monitor wird bei jedem Druck auf den Button ein action: on Event empfangen. Es sind keine Attribute gesetzt.
zu 2: Ja, ist ein DOIF und ich werde da nochmal detailliert schauen, welche Attribute möglich sind.
zu 3: Wahrscheinlich, aber das wollte ich eigentlich nicht, da ich ja in FHEM mit den Infos arbeiten möchte und nicht an "FHEM vorbei" arbeiten möchte.
zu 4: Leider funktioniert der Toggle Befehl überhaupt nicht mit den Zigbee Geräten. Lediglich on und off funktionieren.
Du musst immer die ganze Definition posten list <dein Device>, sonst weiß man nicht, was gesetzt ist und was nicht.
Wahrscheinlich reicht ein do always oder im DOIF-Perl-Modus arbeiten, da brauchst du kein Attribut zu setzen, musst dich aber dafür wie beim notify selbst drum kümmern unnötige Wiederholungen zu unterbinden.
Zitat von: kapiusers am 19 Mai 2021, 09:24:50
zu 3: Wahrscheinlich, aber das wollte ich eigentlich nicht, da ich ja in FHEM mit den Infos arbeiten möchte und nicht an "FHEM vorbei" arbeiten möchte.
Ich habe aktuell zigbee2mqtt nicht im Einsatz und kann das daher nicht prüfen, sondern nur vermuten, dass auch bei einer Direktverknüpfung in ZigBee (Gruppe),
a) jeder Tastendruck als Event in FHEM ankommt (ungewiss)
b) der Schaltzustand der Lampe " (mit ziemlicher Sicherheit).
Ich sehe daher nicht unbedingt die Gefahr, dass du an FHEM "vorbei" arbeiten musst, sondern eher den Vorteil, dass das auch funktioniert, wenn FHEM mal nicht läuft (ich beschaffe in der Regel Hardware extra so, dass die Komponenten (v.a., was Licht oder andere Basisfunktionen angeht!) direkt miteinander kommunizieren. Ist leider nicht so einfach, wenn man zusätzliche Infos verarbeiten muss (z.B. die Helligkeit), aber das Prinzip hat sich mAn. bewährt).
Zitatzu 4: Leider funktioniert der Toggle Befehl überhaupt nicht mit den Zigbee Geräten. Lediglich on und off funktionieren.
Habe das grade nochmal (für MQTT2_DEVICE, du läßt uns ja weiter raten, mit was wir es eigentlich zu tun haben) "trocken" durchgespielt - bei mir sorgen setExtensions dafür, dass "toggle" auch zur Auswahl via FHEMWEB vorhanden ist und daher auch als set-Befehl in einem Event-Handler genutzt werden könnte.
(OT: Vermutlich könnte man auch einen toggle-Befehl via MQTT versenden, es müßte nur "jemand" austesten, wie das im Detail aussehen müßte, dann könnte ich es für alle auch in die attrTemplate einpflegen...)
Guten Abend, ich hab mal je ein "list" erstellt.
Esstisch ist eine Structure bestehend aus 4 Zigbee Bulbs. Esstisch2 ist die gleiche Structure, als Versuch ;)
Ich hatte vorher alles in einem DOIF stehen und lediglich eine Structure, aber beides führt zum selben Verhalten.
Ich habe auch die Bewegungsmelder im Flur (gleiche Situation: 2 Melder, eine Lampe) geprüft und selbiges Verhalten festgestellt.
Zum einen werde ich wohl mal das direkte Verknüpfen ausprobieren und hoffen, dass FHEM trotzdem etwas mitbekommt, zum anderen würde ich das Verhalten gerne verstehen.
Button1:
Internals:
CFGFN
DEF ([0x588e81fffe0c8136:action] eq "on") (set Esstisch ON)
FUUID 60a10604-f33f-1be4-d2ab-c67d4a807e98fd2d
MODEL FHEM
NAME di_EsstischButton
NOTIFYDEV global,0x588e81fffe0c8136
NR 151043
NTFY_ORDER 50-di_EsstischButton
STATE cmd_1
TYPE DOIF
VERSION 24100 2021-03-27 20:15:23
READINGS:
2021-05-23 21:45:08 Device 0x588e81fffe0c8136
2021-05-23 21:45:08 cmd 1
2021-05-23 21:45:08 cmd_event 0x588e81fffe0c8136
2021-05-23 21:45:08 cmd_nr 1
2021-05-23 21:45:08 e_0x588e81fffe0c8136_action on
2021-05-18 16:52:20 mode enabled
2021-05-23 21:45:08 state cmd_1
Regex:
accu:
cond:
0x588e81fffe0c8136:
0:
action ^0x588e81fffe0c8136$:^action:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'0x588e81fffe0c8136','action') eq "on"
do:
0:
0 set Esstisch ON
1:
helper:
DEVFILTER ^global$|^0x588e81fffe0c8136$
NOTIFYDEV global|0x588e81fffe0c8136
event update_available: false,action: on,battery: ok,battery_level: 87,linkquality: 78,update-state: idle
globalinit 1
last_timer 0
sleeptimer -1
timerdev 0x588e81fffe0c8136
timerevent update_available: false,action: on,battery: ok,battery_level: 87,linkquality: 78,update-state: idle
triggerDev 0x588e81fffe0c8136
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: 0x588e81fffe0c8136
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: 0x588e81fffe0c8136
state: cmd_1
timerevents:
update_available: false
action: on
battery: ok
battery_level: 87
linkquality: 78
update-state: idle
timereventsState:
update_available: false
action: on
battery: ok
battery_level: 87
linkquality: 78
update-state: idle
triggerEvents:
update_available: false
action: on
battery: ok
battery_level: 87
linkquality: 78
update-state: idle
triggerEventsState:
update_available: false
action: on
battery: ok
battery_level: 87
linkquality: 78
update-state: idle
internals:
readings:
all 0x588e81fffe0c8136:action
trigger:
uiState:
uiTable:
Attributes:
Button2:
Internals:
CFGFN
DEF ([0x588e81fffe2b82d9:action] eq "on") (set Esstisch2 ON)
FUUID 60a3d4c9-f33f-1be4-0336-962bcc46833f1c57
MODEL FHEM
NAME di_EsstischButton2
NOTIFYDEV 0x588e81fffe2b82d9,global
NR 165139
NTFY_ORDER 50-di_EsstischButton2
STATE cmd_1
TYPE DOIF
VERSION 24100 2021-03-27 20:15:23
READINGS:
2021-05-22 14:03:41 Device 0x588e81fffe2b82d9
2021-05-22 14:03:42 cmd 1
2021-05-22 14:03:42 cmd_event 0x588e81fffe2b82d9
2021-05-22 14:03:42 cmd_nr 1
2021-05-22 14:03:41 e_0x588e81fffe2b82d9_action on
2021-05-18 16:57:39 mode enabled
2021-05-22 14:03:42 state cmd_1
Regex:
accu:
cond:
0x588e81fffe2b82d9:
0:
action ^0x588e81fffe2b82d9$:^action:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'0x588e81fffe2b82d9','action') eq "on"
do:
0:
0 set Esstisch2 ON
1:
helper:
DEVFILTER ^global$|^0x588e81fffe2b82d9$
NOTIFYDEV global|0x588e81fffe2b82d9
event update-state: idle,linkquality: 94,battery: low,battery_level: 5,action: on,update_available: false
globalinit 1
last_timer 0
sleeptimer -1
timerdev 0x588e81fffe2b82d9
timerevent update-state: idle,linkquality: 94,battery: low,battery_level: 5,action: on,update_available: false
triggerDev 0x588e81fffe2b82d9
timerevents:
update-state: idle
linkquality: 94
battery: low
battery_level: 5
action: on
update_available: false
timereventsState:
update-state: idle
linkquality: 94
battery: low
battery_level: 5
action: on
update_available: false
triggerEvents:
update-state: idle
linkquality: 94
battery: low
battery_level: 5
action: on
update_available: false
triggerEventsState:
update-state: idle
linkquality: 94
battery: low
battery_level: 5
action: on
update_available: false
internals:
readings:
all 0x588e81fffe2b82d9:action
trigger:
uiState:
uiTable:
Attributes:
Wie bereits vorher erwähnt sind keine Attribute gesetzt und im Event Monitor erscheint bei jeder Buttonbetätigung das Event action:on, nur das DOIF greift dann nicht mehr. Erst wenn ich über den zuerst betätigten Button ein Ausschalt-Event auslöse und dann wieder einschalte, greift das DOIF auf das action:on Event.
Du brauchst das Attribut do always
Danke sehr lieber Damian.
Auch wenn meine Antwort sehr spät kommt, möchte ich trotzdem meine Dankbarkeit ausdrücken, denn es klappt!