[Gelöst] Schalten eines Zweiges trotz Trigger verhindern

Begonnen von bmwfan, 23 November 2022, 09:47:49

Vorheriges Thema - Nächstes Thema

bmwfan

Hallo,
ich kann ein Problem der Badbeleuchtung nicht lösen und benötige einen Lösungsansatz.

Im Bad setze ich einen Aqara BWM ein, den ich mit dem bekannten Mod auf einen Sendezyklus für die Bewegungserkennung von 5 sec. umgestellt habe. Das hat leider zur Konsequenz, dass ich fluchtartig das Bad verlassen muss wenn ich am Taster das Licht ausgeschaltet habe, damit der Bewegungsmelder das Licht nicht sofort wieder einschaltet. Meine Idee war, dass ich den Zweig für das Einschalten des Lichtes über den BWM für x Sekunden ignoriere, wenn das Licht mit dem Taster ausgeschalten wird. Aber wie das erreichen?

Internals:
   DEF        (["^MQTT2_zigbee_0x00158d0007900438$:^occupancy: true"] and ([?MQTT2_zigbee_0x00158d0007900438:illuminance] < 20 and [?HmIP_BDT_0008DA49929255_3:state] eq "off") or [?HmIP_BDT_0008DA49929255_3:state] eq "on")
(IF ($hms gt "05:01" and $hms lt "23:49") (set HmIP_BDT_0008DA49929255_3 pct 100 0 8) ELSE (set HmIP_BDT_0008DA49929255_3 pct 40 0 15))  ## cmd1: Bewegung UND (Zu dunkel UND Licht AUS) ODER Licht bereits AN => Zweig erstmalig ODER wiederholt ausführen
DOELSEIF (["^MQTT2_zigbee_0x00158d0007900438$:^occupancy: false"] and [?HmIP_BDT_0008DA49929255_3:state] eq "on") (set HmIP_BDT_0008DA49929255_3 off) ## cmd2: Keine Bewegung mehr aber Licht vergessen auszuschalten => Ausschalten
DOELSEIF ([HmIP_BDT_0008DA49929255_3:"^off$"] and [?$SELF] eq "cmd_1") ({Log 1, "Schalter Bad Manuell AUS"}) ## cmd3: Licht am Schalter AUS aber Timer vom cmd_4 läuft => Timer rücksetzen
DOELSEIF ([HmIP_BDT_0008DA49929255_3:"^on$"] and [?$SELF] ne "cmd_1") (set HmIP_BDT_0008DA49929255_3 off, {Log 1, "Schalter Bad Manuell AN"}) ## cmd4: Licht geht an aber nicht vom BWM: Wait-Timer für automatisches Ausschalten starten
   FUUID      6197653a-f33f-d125-da22-4399ea763b68ad95
   MODEL      FHEM
   NAME       di_Bad_OG_Licht_Spiegel
   NOTIFYDEV  MQTT2_zigbee_0x00158d0007900438,HmIP_BDT_0008DA49929255_3,global
   NR         188
   NTFY_ORDER 50-di_Bad_OG_Licht_Spiegel
   STATE      initialized
   TYPE       DOIF
   VERSION    26648 2022-11-03 18:25:31
   eventCount 3774
   READINGS:
     2022-11-23 09:28:00   cmd             0
     2022-11-23 09:28:00   mode            enabled
     2022-11-23 09:28:00   state           initialized
   Regex:
     accu:
     collect:
     cond:
       :
         0:
           "^MQTT2_zigbee_0x00158d0007900438$:^occupancy: true" ^MQTT2_zigbee_0x00158d0007900438$:^occupancy: true
         1:
           "^MQTT2_zigbee_0x00158d0007900438$:^occupancy: false" ^MQTT2_zigbee_0x00158d0007900438$:^occupancy: false
         2:
         3:
       HmIP_BDT_0008DA49929255_3:
         2:
           &STATE     ^HmIP_BDT_0008DA49929255_3$
         3:
           &STATE     ^HmIP_BDT_0008DA49929255_3$
   attr:
     cmdState:
     wait:
       0:
         0
       1:
         0
       2:
         0
       3:
         900
     waitdel:
   condition:
     0          ::EventDoIf('^MQTT2_zigbee_0x00158d0007900438$',$hash,'^occupancy: true',0) and (::ReadingValDoIf($hash,'MQTT2_zigbee_0x00158d0007900438','illuminance') < 20 and ::ReadingValDoIf($hash,'HmIP_BDT_0008DA49929255_3','state') eq "off") or ::ReadingValDoIf($hash,'HmIP_BDT_0008DA49929255_3','state') eq "on"
     1          ::EventDoIf('^MQTT2_zigbee_0x00158d0007900438$',$hash,'^occupancy: false',0) and ::ReadingValDoIf($hash,'HmIP_BDT_0008DA49929255_3','state') eq "on"
     2          ::EventDoIf('HmIP_BDT_0008DA49929255_3',$hash,'^off$',1) and ::InternalDoIf($hash,'di_Bad_OG_Licht_Spiegel','STATE') eq "cmd_1"
     3          ::EventDoIf('HmIP_BDT_0008DA49929255_3',$hash,'^on$',1) and ::InternalDoIf($hash,'di_Bad_OG_Licht_Spiegel','STATE') ne "cmd_1"
   do:
     0:
       0          IF ($hms gt "05:01" and $hms lt "23:49") (set HmIP_BDT_0008DA49929255_3 pct 100 0 8) ELSE (set HmIP_BDT_0008DA49929255_3 pct 40 0 15)
     1:
       0          set HmIP_BDT_0008DA49929255_3 off
     2:
       0          {Log 1, "Schalter Bad Manuell AUS"}
     3:
       0          set HmIP_BDT_0008DA49929255_3 off, {Log 1, "Schalter Bad Manuell AN"}
     4:
   helper:
     NOTIFYDEV  MQTT2_zigbee_0x00158d0007900438,HmIP_BDT_0008DA49929255_3,global
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev
   hmccu:
   internals:
     all         di_Bad_OG_Licht_Spiegel:STATE
   trigger:
     all         HmIP_BDT_0008DA49929255_3
   uiState:
   uiTable:
Attributes:
   disable    0
   do         always
   group      Licht
   room       2.1_OG_Bad,9.8.1_DOIF
   wait       0:0:0:900


cmd1: schaltet über ein Event vom BWM das Licht in Abhängigkeit der Helligkeit und der Uhrzeit (Nachts nicht so hell) ein. Der Status "on" des Lichttasters wird abgefargt, damit bei eingeschaltetem Licht (Illuminance > 20) das Licht auch an bleibt.
cmd2: schaltet das Licht aus , wenn vergessen wurde es beim Verlassen des Bads auszuschalten
cmd3: Licht wurde am Taster ausgeschalten, nachdem es am Taster und nicht durch den BWM eingeschalten wurde. Hioermit wollte ich die Ausführung des Zweigs cmd1 verzögern, aber es gelingt mir nciht
cmd4: Licht am Taster angeschalten => Wait für automatisches Ausschalten starten. Müßte auch über cmd2 erfolgen, aber zur Sicherheit damit das Licht nicht unnötig brennt.

Wie kann ich nun erreichen, dass bei manuellem Ausschalten des Lichtes über den Taster die Bewegungserkennung beim Verlassen des Bads für X Sekunden unterdrückt wird? Ich habe leider keinen Ansatz gefunden und hoffe auf die Unterstützung der Spezialisten.

Grüße Jürgen
Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Per

Du könntest abfragen, ob das letzte Drücken des Schalters (":sec") lange genug her ist (>20 z.B.).

bmwfan

@Per:
Das war der entscheidende Tip. Wusste noch gar nicht, dass dies so geht.

Jetzt scheint es zu funktionieren:
(["^MQTT2_zigbee_0x00158d0007900438$:^occupancy: true"] and [?$SELF:Taster_AUS_Timestamp:sec]>10 and ([?MQTT2_zigbee_0x00158d0007900438:illuminance] < 200 and [?HmIP_BDT_0008DA49929255_3:state] eq "off") or [?HmIP_BDT_0008DA49929255_3:state] eq "on")
(IF ($hms gt "05:01" and $hms lt "23:49") (set HmIP_BDT_0008DA49929255_3 pct 100 0 8) ELSE (set HmIP_BDT_0008DA49929255_3 pct 40 0 15))  ## cmd1: Bewegung UND > 10 Sek. seit Taster AUS UND (Zu dunkel UND Licht AUS) ODER Licht bereits AN => Zweig erstmalig ODER wiederholt ausführen
DOELSEIF (["^MQTT2_zigbee_0x00158d0007900438$:^occupancy: false"] and [?HmIP_BDT_0008DA49929255_3:state] eq "on") (set HmIP_BDT_0008DA49929255_3 off) ## cmd2: Keine Bewegung mehr aber Licht vergessen auszuschalten => Ausschalten
DOELSEIF ([HmIP_BDT_0008DA49929255_3:"^off$"] and [?$SELF] eq "cmd_1") (setreading $SELF Taster_AUS_Timestamp {(time())}) ## cmd3: Licht am Schalter AUS aber Timer vom cmd_4 läuft => Timer rücksetzen
DOELSEIF ([HmIP_BDT_0008DA49929255_3:"^on$"] and [?$SELF] ne "cmd_1") (set HmIP_BDT_0008DA49929255_3 off) ## cmd4: Licht geht an aber nicht vom BWM: Wait-Timer für automatisches Ausschalten starten


Danke
Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd