[gelöst] DOIF mit resetwait geht nicht

Begonnen von bmwfan, 15 Oktober 2022, 12:34:15

Vorheriges Thema - Nächstes Thema

bmwfan

Hallo,

ich habe ein Problem mit einer Lichtsteuerung in Verbindung mit einem Bewegunsgmelder. Trotz erneuter Bewegung im Bad geht das Licht aus und ich kann den Fehler im DOIF trotz vieler Versuche nicht finden.

Installation:
Aquara Bewegungsmelder der zu den Ereignissendungen noch zyklisch alle 60 Sec. einen Datensatz (occupancy, illuminancy) sendet, wenn kein Erigniss aufgetreten ist. Wurde in der Web-Oberfläche des Aquara eingestellt.
Lichtschalter ist ein Dimmer von Homematic (HmIP-BDT)

Das DOIF:
([Aquara_Motion_Bad_OG:occupancy] eq "true" and [?23:50-05:00])
  (set Licht_BadOG_Spiegel_HmIP pct 40 0 15)
  (set Licht_BadOG_Spiegel_HmIP off)
DOELSEIF ([Aquara_Motion_Bad_OG:occupancy] eq "true" and [?Aquara_Motion_Bad_OG:illuminance] < 80 and [?05:01-23:49])
  (set Licht_BadOG_Spiegel_HmIP pct 100 0 8)
  (set Licht_BadOG_Spiegel_HmIP off)

Attributes:
   comment    03.10.22: HM-Sensor durch Aquara ausgetauscht
   do         resetwait
   group      Licht
   room       2.1_OG_Bad,9.8.1_DOIF
   wait       0,80:0,80


cmd1 soll in der Nacht das Licht nicht ganz so hell schalten
cmd2 ist für tagsüber
Das DOIF ist mit wait für die Tests auf 80 Sec. eingestellt. Normalerweise auf 20 Minuten.

Das List:
2022-10-15_11:42:30 Aquara_Motion_Bad_OG occupancy: true
2022-10-15_11:42:30 Aquara_Motion_Bad_OG illuminance: 55
2022-10-15_11:42:30 Licht_BadOG_Spiegel_HmIP pct 100 0 8
2022-10-15_11:42:30 di_Bad_OG_Licht_Spiegel cmd_nr: 2
2022-10-15_11:42:30 di_Bad_OG_Licht_Spiegel cmd_seqnr: 1
2022-10-15_11:42:30 di_Bad_OG_Licht_Spiegel cmd: 2.1
2022-10-15_11:42:30 di_Bad_OG_Licht_Spiegel cmd_event: Aquara_Motion_Bad_OG
2022-10-15_11:42:30 di_Bad_OG_Licht_Spiegel state: cmd_2_1
2022-10-15_11:42:30 di_Bad_OG_Licht_Spiegel wait_timer: 15.10.2022 11:43:50 cmd_2_2 Aquara_Motion_Bad_OG
2022-10-15_11:43:30 Aquara_Motion_Bad_OG occupancy: false
2022-10-15_11:43:30 Aquara_Motion_Bad_OG illuminance: 55
2022-10-15_11:43:44 Aquara_Motion_Bad_OG occupancy: true
2022-10-15_11:43:44 Aquara_Motion_Bad_OG illuminance: 93
2022-10-15_11:43:50 di_Bad_OG_Licht_Spiegel wait_timer: no timer
2022-10-15_11:43:50 Licht_BadOG_Spiegel_HmIP off
2022-10-15_11:43:50 di_Bad_OG_Licht_Spiegel cmd_nr: 2
2022-10-15_11:43:50 di_Bad_OG_Licht_Spiegel cmd_seqnr: 2
2022-10-15_11:43:50 di_Bad_OG_Licht_Spiegel cmd: 2.2
2022-10-15_11:43:50 di_Bad_OG_Licht_Spiegel cmd_event: Aquara_Motion_Bad_OG
2022-10-15_11:43:50 di_Bad_OG_Licht_Spiegel state: cmd_2


Um 11:42:30 wurde die Bewegung erkannt und das Licht eingeschalten. Sollte nach wait um 11.43:50 wieder ausgehen. Obwohl um 11:43:44 eine neue Bewegung erkannt wurde, ging das Licht um 11:43:50 trotzdem aus.

Hat jemand eine Idee, woran das liegt?

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

Damian

Das Problem wird vermutlich dieses Event sein:

ZitatAquara_Motion_Bad_OG occupancy: false

Du solltest die Abfrage auf reine Event-Abfrage umstellen:
...
DOELSEIF (["^Aquara_Motion_Bad_OG$:^occupancy: true"] and [?Aquara_Motion_Bad_OG:illuminance] < 80 and [?05:01-23:49])
...

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

Hallo Damian,

habe nur cmd2 umgestellt, da nur dieses zu der Uhrzeit ansprechen kann aber das Resultat ist dasselbe. Obwohl occupancy true gesendet wird bevor das Licht ausgeht, wird nicht neu getriggert.

Das DOIF zur Kontrolle:
([Aquara_Motion_Bad_OG:occupancy] eq "true" and [?23:50-05:00])
(set Licht_BadOG_Spiegel_HmIP pct 40 0 15)
(set Licht_BadOG_Spiegel_HmIP off)
DOELSEIF (["^Aquara_Motion_Bad_OG$:^occupancy: true"] and [?Aquara_Motion_Bad_OG:illuminance] < 20 and [?05:01-23:49])
(set Licht_BadOG_Spiegel_HmIP pct 100 0 8)
(set Licht_BadOG_Spiegel_HmIP off)
DOELSEIF ([Licht_BadOG_Spiegel_HmIP:state] eq "off" and ([?$SELF:cmd_nr] ne "1" or [?$SELF:cmd_nr] ne "2"))
(set Licht_BadOG_Spiegel_HmIP pct 0 0 10)


und das List dazu:
2022-10-15_19:58:28 Aquara_Motion_Bad_OG occupancy: true
2022-10-15_19:58:28 Aquara_Motion_Bad_OG illuminance: 0
2022-10-15_19:58:28 Licht_BadOG_Spiegel_HmIP pct 100 0 8
2022-10-15_19:58:28 di_Bad_OG_Licht_Spiegel cmd_nr: 2
2022-10-15_19:58:28 di_Bad_OG_Licht_Spiegel cmd_seqnr: 1
2022-10-15_19:58:28 di_Bad_OG_Licht_Spiegel cmd: 2.1
2022-10-15_19:58:28 di_Bad_OG_Licht_Spiegel cmd_event: Aquara_Motion_Bad_OG
2022-10-15_19:58:28 di_Bad_OG_Licht_Spiegel state: cmd_2_1
2022-10-15_19:58:28 di_Bad_OG_Licht_Spiegel wait_timer: 15.10.2022 19:59:48 cmd_2_2 Aquara_Motion_Bad_OG
2022-10-15_19:59:28 Aquara_Motion_Bad_OG illuminance: 0
2022-10-15_19:59:28 Aquara_Motion_Bad_OG occupancy: false
2022-10-15_19:59:39 Aquara_Motion_Bad_OG occupancy: true
2022-10-15_19:59:39 Aquara_Motion_Bad_OG illuminance: 38
2022-10-15_19:59:48 di_Bad_OG_Licht_Spiegel wait_timer: no timer
2022-10-15_19:59:48 Licht_BadOG_Spiegel_HmIP off
2022-10-15_19:59:48 di_Bad_OG_Licht_Spiegel cmd_nr: 2
2022-10-15_19:59:48 di_Bad_OG_Licht_Spiegel cmd_seqnr: 2
2022-10-15_19:59:48 di_Bad_OG_Licht_Spiegel cmd: 2.2
2022-10-15_19:59:48 di_Bad_OG_Licht_Spiegel cmd_event: Aquara_Motion_Bad_OG
2022-10-15_19:59:48 di_Bad_OG_Licht_Spiegel state: cmd_2


Aus irgendeinem Grund triggert das occupancy true nicht während der Timer noch läuft. Noch eine Idee?

Gruß Jürgen
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

Dann probiere es erstmal nur mit einem Zweig

DOIF (["^Aquara_Motion_Bad_OG$:^occupancy: true"] and [?Aquara_Motion_Bad_OG:illuminance] < 20 and [?05:01-23:49])
(set Licht_BadOG_Spiegel_HmIP pct 100 0 8)
(set Licht_BadOG_Spiegel_HmIP off)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

Habe die Abfrage nur auf die Abfrage des Bewegungssensors reduziert und siehe da: Es ging.

Die Lösung lag in der nicht vollständig durchdachten Logik.

Wenn der Bewegungsmelder eine Bewegung erkennt und es im Bad dunkel ist, geht das Licht an. Wenn es dann aber im Bad durch das eingeschaltete Licht hell ist und eine weitere Bewegung erkannt wird kann das DOIF nicht mehr triggern. Diese Abfrage and [?Aquara_Motion_Bad_OG:illuminance] < 20 verhindert das dann.

Habe es jetzt auf folgenden Code geändert und es scheint zu gehen. Zudem ist das DOIF noch übersichtlicher geworden.

(["^Aquara_Motion_Bad_OG$:^occupancy: true"] and ([?Aquara_Motion_Bad_OG:illuminance] < 20 or [?Licht_BadOG_Spiegel_HmIP:state] eq "on"))
(IF ($hms gt "05:01" and $hms lt "23:49") (set Licht_BadOG_Spiegel_HmIP pct 100 0 8) ELSE (set Licht_BadOG_Spiegel_HmIP pct 40 0 15)) (set Licht_BadOG_Spiegel_HmIP off)


Noch eine Info für Benutzer desselben Aquara-Bewegungsmelders RTCGQ11LM:
Der occupancy_timeout unter Einstellungen (spezifische) legt nur fest, wann nach einem Senden von "true" ein "false" gesendet wird. Es beeinflusst nicht das Senden eines weiteren "true" bei einer erkannten Bewegung, wie ich angenommen hatte. Bei meinen Versuchen wurde ein weiteres "true" frühestens 60 Sekunden nach dem letzten "true" gesendet, auch wenn ständig Bewegung vor dem Sensor war

Besten dank für die Hilfe

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