Hauptmenü

Doif Doelse klappt nicht

Begonnen von Sedonion, 24 September 2021, 11:37:17

Vorheriges Thema - Nächstes Thema

Sedonion

Hallo zusammen,

ich habe einen Osram Lichtschalter, der als 8 verschiedene actions sendet.
Nun möchte ich bei 2 davon das Licht auf 80% bzw. 50% haben, sofern es nicht schon auf dem Wert ist.
Sonst Licht aus.
Bei allen anderen actions auch Licht aus.
Ich habe mich an diesem Beispiel versucht zu orientieren: https://wiki.fhem.de/wiki/DOIF/Mehrfachnutzung_eines_Tasters
Trotzdem klappt das vorne und hinten nicht.

Kann ich bitte einen Schubser in die richtige Richtung haben?

Danke.

Internals:
   CFGFN     
   DEF        ##1
([MQTT2_zigbee_Osramschalter:action] eq "left_top_click" and $cmd=~"0|2|3")
  (set MQTT2_zigbee_alle_bulbs brightness 80)
##2
DOELSEIF
([MQTT2_zigbee_Osramschalter:action] eq "left_bottom_click" and $cmd=~"0|1|3")
  (set MQTT2_zigbee_alle_bulbs brightness 50)
##3
DOELSE
(set MQTT2_zigbee_alle_bulbs off)
   FUUID      614c7512-f33f-5a77-dff7-f2a45b7c211efb8f
   MODEL      FHEM
   NAME       di_links_licht_osram
   NOTIFYDEV  MQTT2_zigbee_Osramschalter,global
   NR         105023
   NTFY_ORDER 50-di_links_licht_osram
   STATE      initialized
   TYPE       DOIF
   VERSION    24595 2021-06-06 17:52:38
   READINGS:
     2021-09-23 17:03:31   cmd             0
     2021-09-23 17:03:31   mode            enabled
     2021-09-23 17:03:31   state           initialized
   Regex:
     accu:
     collect:
     cond:
       MQTT2_zigbee_Osramschalter:
         0:
           action     ^MQTT2_zigbee_Osramschalter$:^action:
         1:
           action     ^MQTT2_zigbee_Osramschalter$:^action:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_top_click" and $cmd=~"0|2|3"
     1          ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_bottom_click" and $cmd=~"0|1|3"
   do:
     0:
       0          set MQTT2_zigbee_alle_bulbs brightness 80
     1:
       0          set MQTT2_zigbee_alle_bulbs brightness 50
     2:
       0          set MQTT2_zigbee_alle_bulbs off
   helper:
     DEVFILTER  ^global$|^MQTT2_zigbee_Osramschalter$
     NOTIFYDEV  global|MQTT2_zigbee_Osramschalter
     globalinit 1
     last_timer 0
     sleeptimer -1
   readings:
     all         MQTT2_zigbee_Osramschalter:action
   uiState:
   uiTable:
Attributes:
   room       Wohnzimmer
fhem auf HP Microserver Gen8 mit Openmedivault
- 4 Milight RGB Bulbs an Milight Wifi Controller
- MAX Cube mit 2 Heizkörperthermostaten und 2 Fenstersensoren
- VU+ Solo4k Enigma2
- Fritzbox mit Callmonitor

Frank_Huber

Zitat von: Sedonion am 24 September 2021, 11:37:17
Trotzdem klappt das vorne und hinten nicht.
Geht das ein bischen genauer? ;-)
Auch würde ein List im Fehlerzustand helfen.

Sedonion

Natürlich, sorry.

Beim left_top_click geht Licht auf 80%, cmd wird 1, also ok.
Beim left_bottom_click geht Licht auf 50%, cmd wird 2, also auch ok.
Beim klick einer der anderen Tasten geht Licht aus, cmd wird 3 also auch ok.

Was mir fehlt, ist das Abschalten des Lichts wenn left_top_click kommt und cmd auf 1 ist, das dann DOELSE ausgeführt wird.
Also vermutlich ein Fehler in dem and $cmd=~"0|2|3" Teil.
fhem auf HP Microserver Gen8 mit Openmedivault
- 4 Milight RGB Bulbs an Milight Wifi Controller
- MAX Cube mit 2 Heizkörperthermostaten und 2 Fenstersensoren
- VU+ Solo4k Enigma2
- Fritzbox mit Callmonitor

Damian

In deinem geposteten List kann man in den Readings noch nicht mal einen Trigger sehen, dh. das Modul wird durch MQTT2_zigbee_Osramschalter:action gar nicht getriggert, sonst würde man es in den Readings sehen können.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sedonion

Zitat von: Damian am 24 September 2021, 13:25:48
In deinem geposteten List kann man in den Readings noch nicht mal einen Trigger sehen, dh. das Modul wird durch MQTT2_zigbee_Osramschalter:action gar nicht getriggert, sonst würde man es in den Readings sehen können.

Aber das Licht reagiert doch auf die Buttons?
fhem auf HP Microserver Gen8 mit Openmedivault
- 4 Milight RGB Bulbs an Milight Wifi Controller
- MAX Cube mit 2 Heizkörperthermostaten und 2 Fenstersensoren
- VU+ Solo4k Enigma2
- Fritzbox mit Callmonitor

Damian

Zitat von: Sedonion am 24 September 2021, 13:38:53
Aber das Licht reagiert doch auf die Buttons?

Es kann nur funktionieren, wenn man von MQTT2_zigbee_Osramschalter:action entsprechende Events im Eventmonitor sieht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sedonion

#6
Das ist der Fall. Wie gesagt, Licht an geht bei beiden Schaltern.

Habs dennoch neu angelegt und nun ist auch das Reading da.
Dennoch gleiches Verhalten.
Internals:
   DEF        ##1
([MQTT2_zigbee_Osramschalter:action] eq "left_top_click" and $cmd=~"0|2|3")
  (set MQTT2_zigbee_alle_bulbs brightness 80)
##2
DOELSEIF
([MQTT2_zigbee_Osramschalter:action] eq "left_bottom_click" and $cmd=~"0|1|3")
  (set MQTT2_zigbee_alle_bulbs brightness 50)
##3
DOELSE
(set MQTT2_zigbee_alle_bulbs off)
   FUUID      614dbdfd-f33f-5a77-fbab-aae842bef23f9ba6
   MODEL      FHEM
   NAME       di_links_licht_osram
   NOTIFYDEV  MQTT2_zigbee_Osramschalter,global
   NR         210
   NTFY_ORDER 50-di_links_licht_osram
   STATE      cmd_3
   TYPE       DOIF
   VERSION    24595 2021-06-06 17:52:38
   READINGS:
     2021-09-24 14:06:16   Device          MQTT2_zigbee_Osramschalter
     2021-09-24 14:06:16   cmd             3
     2021-09-24 14:06:16   cmd_event       MQTT2_zigbee_Osramschalter
     2021-09-24 14:06:16   cmd_nr          3
     2021-09-24 14:06:16   e_MQTT2_zigbee_Osramschalter_action right_bottom_click
     2021-09-24 14:01:54   mode            enabled
     2021-09-24 14:06:16   state           cmd_3
   Regex:
     accu:
     collect:
     cond:
       MQTT2_zigbee_Osramschalter:
         0:
           action     ^MQTT2_zigbee_Osramschalter$:^action:
         1:
           action     ^MQTT2_zigbee_Osramschalter$:^action:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_top_click" and $cmd=~"0|2|3"
     1          ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_bottom_click" and $cmd=~"0|1|3"
   do:
     0:
       0          set MQTT2_zigbee_alle_bulbs brightness 80
     1:
       0          set MQTT2_zigbee_alle_bulbs brightness 50
     2:
       0          set MQTT2_zigbee_alle_bulbs off
   helper:
     DEVFILTER  ^global$|^MQTT2_zigbee_Osramschalter$
     NOTIFYDEV  global|MQTT2_zigbee_Osramschalter
     event      action: right_bottom_click
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   MQTT2_zigbee_Osramschalter
     timerevent action: right_bottom_click
     triggerDev MQTT2_zigbee_Osramschalter
     timerevents:
       action: right_bottom_click
     timereventsState:
       action: right_bottom_click
     triggerEvents:
       action: right_bottom_click
     triggerEventsState:
       action: right_bottom_click
   internals:
   perlblock:
   readings:
     all         MQTT2_zigbee_Osramschalter:action
   trigger:
   uiState:
   uiTable:
Attributes:
   room       Wohnzimmer
fhem auf HP Microserver Gen8 mit Openmedivault
- 4 Milight RGB Bulbs an Milight Wifi Controller
- MAX Cube mit 2 Heizkörperthermostaten und 2 Fenstersensoren
- VU+ Solo4k Enigma2
- Fritzbox mit Callmonitor

Damian

Funktioniert, wie definiert:

2021-09-24 14:06:16   e_MQTT2_zigbee_Osramschalter_action right_bottom_click

führt zum DOELSE-Fall, also cmd_3
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sedonion

#8
Zitat von: Sedonion am 24 September 2021, 13:18:05
Natürlich, sorry.

Beim left_top_click geht Licht auf 80%, cmd wird 1, also ok.
Beim left_bottom_click geht Licht auf 50%, cmd wird 2, also auch ok.
Beim klick einer der anderen Tasten geht Licht aus, cmd wird 3 also auch ok.

Was mir fehlt, ist das Abschalten des Lichts wenn left_top_click kommt und cmd auf 1 ist, das dann DOELSE ausgeführt wird.
Also vermutlich ein Fehler in dem and $cmd=~"0|2|3" Teil.

Ich versuche es nochmal anders:
Ich möchte erreichen, wenn left_top_click gedrückt wird, geschaut wird, ob cmd ungleich 1 ist. Dann licht 80%.
Sollte aber cmd schon 1 sein, licht aus über doelse. Und das klappt nicht.
fhem auf HP Microserver Gen8 mit Openmedivault
- 4 Milight RGB Bulbs an Milight Wifi Controller
- MAX Cube mit 2 Heizkörperthermostaten und 2 Fenstersensoren
- VU+ Solo4k Enigma2
- Fritzbox mit Callmonitor

Damian

Zitat von: Sedonion am 24 September 2021, 14:28:43
Ich versuche es nochmal anders:
Ich möchte erreichen, wenn left_top_click gedrückt wird, geschaut wird, ob cmd ungleich 1 ist. Dann licht 80%.
Sollte aber cmd schon 1 sein, licht aus über doelse. Und das klappt nicht.

Dann musst du den fehlenden Fall als weiteren DOELSEIF auch definieren.

Und immer ein List vom vermeintlichen Fehler posten und nicht von Sachen, die funktionieren - die interessieren hier nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sedonion

Ok, ich habe es versucht zu vereinfachen:
Internals:
   DEF        ##1
([MQTT2_zigbee_Osramschalter:action] eq "left_top_click" and $cmd=~"2")
  (set MQTT2_Shelly1_Arbeitszimmer on)
##2
DOELSEIF
([MQTT2_zigbee_Osramschalter:action] eq "left_top_click" and $cmd=~"1")
(set MQTT2_Shelly1_Arbeitszimmer off)
   FUUID      614db223-f33f-5a77-2693-1e577e8983b3a7b0
   MODEL      FHEM
   NAME       di_links_licht_osram_neu
   NOTIFYDEV  MQTT2_zigbee_Osramschalter,global
   NR         209
   NTFY_ORDER 50-di_links_licht_osram_neu
   STATE      cmd_2
   TYPE       DOIF
   VERSION    24595 2021-06-06 17:52:38
   READINGS:
     2021-09-24 15:21:45   Device          MQTT2_zigbee_Osramschalter
     2021-09-24 15:21:45   cmd             2
     2021-09-24 15:21:45   cmd_event       MQTT2_zigbee_Osramschalter
     2021-09-24 15:21:45   cmd_nr          2
     2021-09-24 15:21:45   e_MQTT2_zigbee_Osramschalter_action left_top_click
     2021-09-24 15:21:14   mode            enabled
     2021-09-24 15:21:45   state           cmd_2
   Regex:
     accu:
     collect:
     cond:
       MQTT2_zigbee_Osramschalter:
         0:
           action     ^MQTT2_zigbee_Osramschalter$:^action:
         1:
           action     ^MQTT2_zigbee_Osramschalter$:^action:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_top_click" and $cmd=~"2"
     1          ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_top_click" and $cmd=~"1"
   do:
     0:
       0          set MQTT2_Shelly1_Arbeitszimmer on
     1:
       0          set MQTT2_Shelly1_Arbeitszimmer off
     2:
   helper:
     DEVFILTER  ^global$|^MQTT2_zigbee_Osramschalter$
     NOTIFYDEV  global|MQTT2_zigbee_Osramschalter
     event      action: left_top_click
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   MQTT2_zigbee_Osramschalter
     timerevent action: left_top_click
     triggerDev MQTT2_zigbee_Osramschalter
     DOIF_eventa:
       cmd_nr: 2
       cmd: 2
       cmd_event: MQTT2_zigbee_Osramschalter
       cmd_2
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: MQTT2_zigbee_Osramschalter
       state: cmd_2
     timerevents:
       action: left_top_click
     timereventsState:
       action: left_top_click
     triggerEvents:
       action: left_top_click
     triggerEventsState:
       action: left_top_click
   internals:
   readings:
     all         MQTT2_zigbee_Osramschalter:action
   trigger:
   uiState:
   uiTable:
Attributes:
   room       Wohnzimmer


cmd ist 2. Da sollte doch bei einem left_top_klick die erste Bedingung erfüllt sein?
Irgendwie hänge ich an dem cmd reading.
fhem auf HP Microserver Gen8 mit Openmedivault
- 4 Milight RGB Bulbs an Milight Wifi Controller
- MAX Cube mit 2 Heizkörperthermostaten und 2 Fenstersensoren
- VU+ Solo4k Enigma2
- Fritzbox mit Callmonitor

Damian

Beim nächsten left_top_click sollte er set MQTT2_Shelly1_Arbeitszimmer on ausführen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sedonion

Das tut es aber nicht.
Das ist das list nach 2x drücken.
fhem auf HP Microserver Gen8 mit Openmedivault
- 4 Milight RGB Bulbs an Milight Wifi Controller
- MAX Cube mit 2 Heizkörperthermostaten und 2 Fenstersensoren
- VU+ Solo4k Enigma2
- Fritzbox mit Callmonitor

Damian

Zitat von: Sedonion am 24 September 2021, 17:53:41
Das tut es aber nicht.
Das ist das list nach 2x drücken.

Dann zeigst du wieder den funktionierenden Fall, denn
     2021-09-24 15:21:45   e_MQTT2_zigbee_Osramschalter_action left_top_click

führte zu
    2021-09-24 15:21:45   cmd_nr          2

Wenn etwas nicht funktioniert hätte, dann hätten die Zeiten unterschiedlich sein müssen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF