DOIF resetwait aber licht geht immer aus

Begonnen von Frood42, 01 Januar 2023, 12:32:44

Vorheriges Thema - Nächstes Thema

Frood42

Guten Tag,
in einem Flur habe ich ein Bewegungsmelder (HUE) und Lichter in einer Struct.
Das DOIF sieht so aus:

defmod di_motion_light_floor DOIF ([Floor_Motion_Hue_2:"motion"] and [Floor_Light_Sensor_Hue_2:lightlevel] < 12000) (set floor_lights_all on) (set floor_lights_all off)
attr di_motion_light_floor do resetwait
attr di_motion_light_floor room 01a_FLOOR,HUEDevice
attr di_motion_light_floor wait 0,600


Wieso kommt es jetzt immer wieder vor, dass ich im Flur hin und her gehe, und das Licht geht aus?
Liegt das irgendwie am Hue Bewegungsmelder, dass der nicht mehrmals in 600 eine Bewegung registiert?
Der wird eh zeitnah durch einen anderen von Homematic ersetzt... falls es an ihm liegt wäre es ja toll.

OOODER: Liegt das daran, dass es zu hell ist, wenn das Licht an ist und [Floor_Light_Sensor_Hue_2:lightlevel] < 12000 nicht mehr zutrifft?
Wenn das das Problem ist, wir verpacke ich da noch mehr IFs, If die Lampe an ist....?


Internals:
   .FhemMetaInternals 1
   .triggerUsed 1
   DEF        sensor 5 1 IODev=HUEBridgeM1
   FUUID      615db02a-aaaa-aaaa-aaaa-aaaaaaaaaaaaa
   FVERSION   31_HUEDevice.pm:0.256480/2022-02-07
   ID         S5
   IODev      HUEBridgeM1
   NAME       Floor_Motion_Hue_2
   NR         312
   STATE      nomotion
   TYPE       HUEDevice
   has_events 1
   manufacturername Signify Netherlands B.V.
   modelid    SML001
   name       Hue motion sensor 2
   on         1
   productname Hue motion sensor
   reachable  1
   sensitivity 2
   sensitivitymax 2
   swversion  6.1.1.27575
   type       ZLLPresence
   uniqueid   00:17:88:AA:AA:AA:AA:AA-02-0406
   v2_id      cb75c63e-aaaa-aaaa-aaaa-e37b8048d128
   .attraggr:
   .attreocr:
     motion
   .attrminint:
   .userReadings:
     HASH(0x55fb7aaaa2b0)
   Helper:
     DBLOG:
       motion:
         myDbLog:
           TIME       1672571941.67923
           VALUE      0
   READINGS:
     2022-12-25 22:55:51   IODev           HUEBridgeM1
     2023-01-01 12:19:01   battery         57
     2023-01-01 12:19:01   batteryPercent  57
     2023-01-01 06:44:16   batteryState    normal
     2023-01-01 12:27:37   motion          0
     2023-01-01 12:19:01   reachable       1
     2023-01-01 12:19:01   state           nomotion
   helper:
     devtype    S
     reachable  0
     state      nomotion
     update_timeout 1
     capabilities:
     configList:
     json:
       manufacturername Signify Netherlands B.V.
       modelid    SML001
       name       Hue motion sensor 2
       productname Hue motion sensor
       swversion  6.1.1.27575
       type       ZLLPresence
       uniqueid   00:17:88:01:aa:aa:Aa:84-02-0406
       capabilities:
       config:
         alert      none
         battery    57
         sensitivity 2
         sensitivitymax 2
         pending:
       state:
         lastupdated 2023-01-01T11:19:01
       swupdate:
         lastinstall 2021-10-07T12:25:24
         state      noupdates
     setList:
Attributes:
   IODev      HUEBridgeM1
   event-on-change-reading motion
   model      SML001
   room       01a_FLOOR,HUEDevice
   userReadings motion {ReadingsVal ($name, 'state', 'nomotion') eq 'motion' ? 1 : 0}


Grüße,
Frood

MadMax-FHEM

#1
Ich bin ja in DOIF nicht so firm aber wie soll denn der Sensor mehrfach ein motion senden (korrekter: ein Event mit "motion"), wenn du das hier beim Sensor angegeben hast:

Zitat
   event-on-change-reading motion

Das bedeutet ein erneutes "motion-Event" kommt ja erst, wenn zuvor ein "nomotion-Event" (oder was anderes) kam.

Wenn du das bei deinem Homematic ebenso machst, dann sendet der zwar u.U. öfter (wobei ja unklar ist, ob nicht auch schon der HUE-Sensor mehrfach sendet) aber es gibt trotzdem nicht mehr Events...

EDIT:
ein userReadings ohne Trigger solltest du auch nicht machen. Aber: mit event-on-change-reading nur auf motion? Funktioniert da überhaupt was? Weil dann gibt es doch nur Events bei Änderung des Readings motion und das ist ja ein userReadings und das wird doch nur "berechnet", wenn Events kommen? Also ich würde das event-on-change-reading mal wegmachen oder besser machen (und dann das userReadings mit Trigger)...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Gesundes neues Jahr,

was der Melder für Events liefert, oder wie das Licht den Helligkeitssensor beeinflusst kannst nur Du ermitteln (Eventmonitor)

Aber ich habe auch Zigbee motion Sensoren mit sehr eigenwilligem Verhalten. Wenn man ihn in einer bestimmten Zeit neu triggert reagiert er danach unter Umständen Minutenlang gar nicht mehr (auch kein nomotion) man muss ihn dann eine Pause gönnen. Irgendwo habe ich mal gelesen, man kann das Verhalten uU auch programmieren.

Tipp:
ermittle was wirklich für Events kommen.
Verwende ev. noch zusätzlich Tag/Nacht und triggere das DOIF nicht zusätzlich mit der Helligkeit. Beispiel
(!isday("REAL")?1:0 or [?PIRWg:brightness] < 130)
Nimm einen anderen Helligkeitssensor der nicht vom geschalteten Licht selbst beeinfluss wird.

Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frood42

#3
Danke für die Tipps.
Ja, das sieht echt nicht gut aus.

also so einen seperaten Lichtsenensor von Homematic habe ich auch hier. Der sollte schon lange mal zusammengebaut werden. Das neue Jahr fängt auch nur mit ToDos an  :-\

Was das Log angeht, da kommt öfters mal ein motion:0
Aber die Lampen gehen selbst nach 3-4 Minuten aus, was doch gar nicht sein dürfte bei
wait 0,600

Log:

2023-01-02 15:21:54 DOIF di_motion_light_floor cmd_event: Floor_Motion_Hue_2
2023-01-02 15:21:54 DOIF di_motion_light_floor wait_timer: 02.01.2023 15:31:54 cmd_1_2 Floor_Motion_Hue_2
2023-01-02 15:21:54 HUEDevice Floor_Motion_Hue_2 motion: 1
2023-01-02 15:22:08 DOIF di_motion_light_floor cmd_event: Floor_Motion_Hue_2
2023-01-02 15:22:08 DOIF di_motion_light_floor cmd_event: Floor_Motion_Hue_2
2023-01-02 15:22:08 HUEDevice Floor_Motion_Hue_2 motion: 0
2023-01-02 15:23:55 HUEDevice Floor_Motion_Hue_2 motion: 1
2023-01-02 15:24:09 DOIF di_motion_light_floor cmd_event: Floor_Motion_Hue_2
2023-01-02 15:24:09 DOIF di_motion_light_floor wait_timer: 02.01.2023 15:34:09 cmd_1_2 Floor_Motion_Hue_2
2023-01-02 15:24:09 HUEDevice Floor_Motion_Hue_2 motion: 0
2023-01-02 15:26:07 Global global DELETEATTR Floor_Motion_Hue_2 event-on-change-reading
2023-01-02 15:26:10 Global global ATTR Floor_Motion_Hue_2 room 01a_FLOOR,HUEDevice
2023-01-02 15:26:39 DOIF di_motion_light_floor wait_timer: 02.01.2023 15:36:39 cmd_1_2 Floor_Motion_Hue_2
2023-01-02 15:26:39 HUEDevice Floor_Motion_Hue_2 motion: 0
2023-01-02 15:27:39 DOIF di_motion_light_floor wait_timer: 02.01.2023 15:37:39 cmd_1_2 Floor_Motion_Hue_2
2023-01-02 15:27:39 HUEDevice Floor_Motion_Hue_2 motion: 0


Das Attribute
event-on-change-reading motion
habe ich jetzt mal entfernt: denn bei den anderen Motion Sensoren, die im Einsatz sind, ist das auch nicht gesetzt.
Man sah es sogar im Log  ;D
2023-01-02 15:26:07 Global global DELETEATTR Floor_Motion_Hue_2 event-on-change-reading

Ausserdem ist das DOIF mal auf das hier erweitert: Mal sehen ob das geht:

defmod di_motion_light_floor DOIF (([Floor_Motion_Hue_2:"motion"] and [Floor_Light_Sensor_Hue_2:lightlevel] < 12000)) (set floor_lights_all on) (set floor_lights_all off) DOELSEIF (([Floor_Motion_Hue_2:"motion"] and [floor_lights_all] eq"on")) (set floor_lights_all on) (set floor_lights_all off)



Viele Grüße, Frood

PS: Mal ganz im Ernst, im Log sieht man doch - dass beerits VORM Löschen des event-on-change-reading der wait_timer immer wieder verlängert / neu gesetzt wurde:

2023-01-02 15:21:54 DOIF di_motion_light_floor cmd_event: Floor_Motion_Hue_2
2023-01-02 15:21:54 DOIF di_motion_light_floor wait_timer: 02.01.2023 15:31:54 cmd_1_2 Floor_Motion_Hue_2
2023-01-02 15:21:54 HUEDevice Floor_Motion_Hue_2 motion: 1
2023-01-02 15:22:08 DOIF di_motion_light_floor cmd_event: Floor_Motion_Hue_2
2023-01-02 15:22:08 DOIF di_motion_light_floor cmd_event: Floor_Motion_Hue_2
2023-01-02 15:22:08 HUEDevice Floor_Motion_Hue_2 motion: 0
2023-01-02 15:23:55 HUEDevice Floor_Motion_Hue_2 motion: 1
2023-01-02 15:24:09 DOIF di_motion_light_floor cmd_event: Floor_Motion_Hue_2
2023-01-02 15:24:09 DOIF di_motion_light_floor wait_timer: 02.01.2023 15:34:09 cmd_1_2 Floor_Motion_Hue_2
2023-01-02 15:24:09 HUEDevice Floor_Motion_Hue_2 motion: 0

Das wurde doch von 15:31:54 cmd_1_2 auf 15:34:09 cmd_1_2 hochgesetzt. Oder?

ALLERDINGS: Waren um ca 15:29 schon alle Lampen wieder aus. Waren die dann ausgeschaltet von einem alten wait_timer? Oder kann es da immer nur einen geben?

Otto123

#4
Ein Problem: Du triggerst auf motion im Event [Floor_Motion_Hue_2:"motion"]

Das trifft auf quasi immer zu:
Zitat2023-01-02 15:22:08 HUEDevice Floor_Motion_Hue_2 motion: 0
2023-01-02 15:23:55 HUEDevice Floor_Motion_Hue_2 motion: 1
Du willst aber auf Bewegung triggern (nicht auf rücksetzen) geht eventuell so:
[Floor_Motion_Hue_2:"motion:.1"]
Genau könntest Du das im Eventmonitor selbst ermitteln: Zeile markieren und dein DOIF modifizieren lassen.

Aber warum Deine Lampen vor dem Wait Timer ausgehen, kann ich nicht sagen. Eventuell eine andere Logik? Direkte HUE / Zigbee Verknüpfung?

Wie schon gesagt nimm diesen Trigger raus : [Floor_Light_Sensor_Hue_2:lightlevel] -> [?Floor_Light_Sensor_Hue_2:lightlevel]
Deine Erweiterung ist eigenartig, die wird nur mehr Verwirrung bringen.

Macht er denn überhaupt die ersten 10 minuten Licht an?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frood42

Ja, die 10 Minuten Licht sind immer an, das hat immer gut geklappt.
Und vermutlich hat das mit dem
Zitat
2023-01-02 15:22:08 HUEDevice Floor_Motion_Hue_2 motion: 0

Nie gestört, weil es meistens direkt auf das 1 folgt - also wenige Sekunden danach.
Wie es scheint kommt das aber auch öfters vor, manchmal ist das Licht länger an als geplant.

Wenn ich aus dem Log heruas das DOIF ändern lassen will, dann bekomme ich das di_motion_light_floor nicht zur Auswahl.

Ein create hat allerdings diese Expression herausgespuckt - mit "^motion:.1$"

defmod di_motion_light_floor DOIF (([Floor_Motion_Hue_2:"^motion:.1$"] and [Floor_Light_Sensor_Hue_2:lightlevel] < 12000)) (set floor_lights_all on) (set floor_lights_all off) DOELSEIF (([Floor_Motion_Hue_2:"^motion:.1$"] and [floor_lights_all] eq"on")) (set floor_lights_all on) (set floor_lights_all off)


solange ich meinen anderen Lichtsensor nicht endlich fertig gebaut habe, muss ich aber wohl mit dem DOELSEIF leben... Das Licht soll ja immer ab einer bestimmten Dunkelheitsschwelle angehen, auch tagsüber.

Otto123

#6
Du verstehst die Bedeutung [Floor_Light_Sensor_Hue_2:lightlevel] versus [?Floor_Light_Sensor_Hue_2:lightlevel] nicht - oder?

Die Funktion: (Bedingung) (mach an)(mach aus)
wenn Bedingung wahr, mach an, dann setze wait timer
wenn Bedingung wieder wahr, setze wait timer neu
Wenn wait timer zu Ende, mach aus

Du kannst ja mal ein Log schreiben lassen, mit DOIF und den Lampen. Da müsste man sehen ob der waittimer funktioniert.

BTW: jetzt sind noch unnütze doppelte Klammern dazu gekommen. Und wie gesagt, wenn dein Konstrukt jetzt immer noch den waittimer 0,600 hat, wird das nicht mehr funktionieren!
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frood42

Ich habe das jetzt mal so gemacht:

defmod di_motion_light_floor DOIF ([Floor_Motion_Hue_2:"^motion:.1$"] and [?Floor_Light_Sensor_Hue_2:lightlevel] < 12000) (set floor_lights_all on) (set floor_lights_all off)
attr di_motion_light_floor do resetwait
attr di_motion_light_floor wait 0,600

aber was das

[?Floor_Light_Sensor_Hue_2:lightlevel] < 12000

bedeutet, kann ich wirklich nicht sagen.

Otto123

#8
Der Unterschied liegt im Trigger. Ich nur vom motion Sensor und nicht von der Helligkeit triggern lassen.
https://fhem.de/commandref_modular_DE.html#DOIF_Zeitintervalle_Readings_und_Status_ohne_Trigger
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frood42

Ok, also ich habe das so alles gemacht und beobachte leider immer noch in mehreren Räumen, dass das Licht ausgeht, während ich dort herumlaufe.

Hat jemand einen brillanten Tip, wie ich da der Sache auf den Grund gehen könnte?

Ich habe letztens das DOIF jemandem erklärt, und das resetwait erklärt.
Aber aus meiner Sicht, funktioniert das resetwait bei mir gar nicht.
Es gab auch ein Forums-Beitrag in dem steht:
ZitatResetwait ist für Sequenzen nicht beschrieben.
(https://forum.fhem.de/index.php?topic=57657.0)

Ich habe das DOIF auch hier nochmal kopiert:

defmod di_motion_light_floor DOIF ([Floor_Motion_Hue_2:"^motion$"] and [?Floor_Light_Sensor_Hue_2:lightlevel] < 12000) (set floor_lights_all on) (set floor_lights_all off)
attr di_motion_light_floor do resetwait
attr di_motion_light_floor room 01a_FLOOR,HUEDevice
attr di_motion_light_floor wait 0,600

Damian

Zitat von: Frood42 am 19 Februar 2023, 15:26:58
Ok, also ich habe das so alles gemacht und beobachte leider immer noch in mehreren Räumen, dass das Licht ausgeht, während ich dort herumlaufe.

Hat jemand einen brillanten Tip, wie ich da der Sache auf den Grund gehen könnte?

Ich habe letztens das DOIF jemandem erklärt, und das resetwait erklärt.
Aber aus meiner Sicht, funktioniert das resetwait bei mir gar nicht.
Es gab auch ein Forums-Beitrag in dem steht:(https://forum.fhem.de/index.php?topic=57657.0)

Ich habe das DOIF auch hier nochmal kopiert:

defmod di_motion_light_floor DOIF ([Floor_Motion_Hue_2:"^motion$"] and [?Floor_Light_Sensor_Hue_2:lightlevel] < 12000) (set floor_lights_all on) (set floor_lights_all off)
attr di_motion_light_floor do resetwait
attr di_motion_light_floor room 01a_FLOOR,HUEDevice
attr di_motion_light_floor wait 0,600


Einfach bei Bewegung schauen, ob der Timer zurückgesetzt wird. Ich vermute, dass bei dir der Motion-Trigger nicht durchkommt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

funktioniert bei mir genau so wunderbar.
Du kannst doch im Device beobachten ob resetwait funktioniert oder nicht?!

Ich habe allerdings hue Bewegungsmelder mit einem Verhalten, was ich nicht ganz verstehe: Wenn die während dem Zustand motion erneut getriggert werden ignorieren die unter Umständen jede weitere Bewegung für einige Minuten.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frood42

Sagt mal, ich bin etwas irritiert.
Wenn das Licht an ist, dann ist doch mein IF gar nicht TRUE, weil doch das Licht an ist.

Ist das der Grund warum das nicht neu getriggert wird?

Grüüße, Frood

Damian

Zitat von: Frood42 am 19 Februar 2023, 23:01:50
Sagt mal, ich bin etwas irritiert.
Wenn das Licht an ist, dann ist doch mein IF gar nicht TRUE, weil doch das Licht an ist.

Ist das der Grund warum das nicht neu getriggert wird?

Grüüße, Frood

Wird wohl so sein ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

Zitat von: Frood42 am 19 Februar 2023, 23:01:50
Wenn das Licht an ist, dann ist doch mein IF gar nicht TRUE, weil doch das Licht an ist.
Wenn Floor_Light_Sensor_Hue_2 von dem Flurlicht erleuchtet wird ...  ::)
Das macht dann keinen Sinn, Du musst den Lichtpegel woanders her nehmen.  ;D
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz