Eine Lampe, mehrere Schalter

Begonnen von kapiusers, 18 Mai 2021, 17:19:03

Vorheriges Thema - Nächstes Thema

kapiusers

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

Jamo

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!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

kapiusers

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.

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

kapiusers

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. 

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Beta-User

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...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

kapiusers

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.




Damian

Du brauchst das Attribut do always
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kapiusers

Danke sehr lieber Damian.

Auch wenn meine Antwort sehr spät kommt, möchte ich trotzdem meine Dankbarkeit ausdrücken, denn es klappt!