doif auf einmal kaputt / änderung timer / wait?

Begonnen von ChrisW, 19 November 2018, 20:06:47

Vorheriges Thema - Nächstes Thema

ChrisW

Hallo,
folgedes doif hat sehr lange funktioniert .. komischerweise auch gestern abend wieder und heute den halben Tag ..
Das gerät setzt die Werte auch auf True für sekunden bereich also nur so lange wie motion oder microfon was erkennt.
Sehe auch im doif das das reading true ist aber screenOn wird nicht ausgefürt. Habe es auch schon manuell eingegeben das geht sofort
Es liegt also am Doif vielleicht am wait ??

Hier ein list:
Internals:
   DEF        ([Winconnect.TABLET:motion_detect] eq "True" or [Winconnect.TABLET:microphone_detect] eq "True") (set Winconnect.TABLET screenOn) DOELSEIF ([Winconnect.TABLET:motion_detect] eq "False" and [Winconnect.TABLET:microphone_detect] eq "False") (set Winconnect.TABLET screenOff)

   MODEL      FHEM
   NAME       di_tabletscreen
   NR         450
   NTFY_ORDER 50-di_tabletscreen
   STATE      cmd_1
   TYPE       DOIF
   .attraggr:
   .attrminint:
   READINGS:
     2018-11-19 20:05:37   Device          Winconnect.TABLET
     2018-11-19 17:24:01   cmd             1
     2018-11-19 17:24:01   cmd_event       Winconnect.TABLET
     2018-11-19 17:24:01   cmd_nr          1
     2018-11-19 20:05:37   e_Winconnect.TABLET_microphone_detect False
     2018-11-19 20:05:37   e_Winconnect.TABLET_motion_detect False
     2018-11-18 20:17:05   mode            enabled
     2018-11-19 17:24:01   state           cmd_1
     2018-11-19 20:01:08   wait_timer      19.11.2018 20:14:28 cmd_2 Winconnect.TABLET
   Regex:
   attr:
     cmdState:
     wait:
       0:
         0
       1:
         800
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Winconnect.TABLET','motion_detect') eq "True" or ::ReadingValDoIf($hash,'Winconnect.TABLET','microphone_detect') eq "True"
     1          ::ReadingValDoIf($hash,'Winconnect.TABLET','motion_detect') eq "False" and ::ReadingValDoIf($hash,'Winconnect.TABLET','microphone_detect') eq "False"
   devices:
     0           Winconnect.TABLET
     1           Winconnect.TABLET
     all         Winconnect.TABLET
   do:
     0:
       0          set Winconnect.TABLET screenOn
     1:
       0          set Winconnect.TABLET screenOff
     2:
   helper:
     event      os_RunTime_minutes: 1454
     globalinit 1
     last_timer 0
     sleepdevice Winconnect.TABLET
     sleepsubtimer 0
     sleeptimer 1
     timerdev   Winconnect.TABLET
     timerevent os_RunTime_minutes: 1454
     triggerDev Winconnect.TABLET
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: Winconnect.TABLET
       state: cmd_1
     timerevents:
       os_RunTime_minutes: 1454
     timereventsState:
       os_RunTime_minutes: 1454
     triggerEvents:
       os_RunTime_minutes: 1454
     triggerEventsState:
       os_RunTime_minutes: 1454
   internals:
   itimer:
   perlblock:
   readings:
     0           Winconnect.TABLET:motion_detect Winconnect.TABLET:microphone_detect
     1           Winconnect.TABLET:motion_detect Winconnect.TABLET:microphone_detect
     all         Winconnect.TABLET:motion_detect Winconnect.TABLET:microphone_detect
   trigger:
   uiState:
   uiTable:
Attributes:
   checkReadingEvent 0
   wait       0:800



Und hier das Filelog vom doif

2018-11-19_19:28:05 di_tabletscreen wait_timer: no timer
2018-11-19_19:28:15 di_tabletscreen wait_timer: 19.11.2018 19:41:35 cmd_2 Winconnect.TABLET
2018-11-19_19:41:17 di_tabletscreen wait_timer: no timer
2018-11-19_19:41:28 di_tabletscreen wait_timer: 19.11.2018 19:54:48 cmd_2 Winconnect.TABLET
2018-11-19_19:41:59 di_tabletscreen wait_timer: no timer
2018-11-19_19:42:22 di_tabletscreen wait_timer: 19.11.2018 19:55:42 cmd_2 Winconnect.TABLET
2018-11-19_19:43:44 di_tabletscreen wait_timer: no timer
2018-11-19_19:43:53 di_tabletscreen wait_timer: 19.11.2018 19:57:13 cmd_2 Winconnect.TABLET
2018-11-19_19:44:05 di_tabletscreen wait_timer: no timer
2018-11-19_19:44:26 di_tabletscreen wait_timer: 19.11.2018 19:57:46 cmd_2 Winconnect.TABLET
2018-11-19_19:46:32 di_tabletscreen wait_timer: no timer
2018-11-19_19:46:52 di_tabletscreen wait_timer: 19.11.2018 20:00:12 cmd_2 Winconnect.TABLET
2018-11-19_19:52:21 di_tabletscreen wait_timer: no timer
2018-11-19_19:52:29 di_tabletscreen wait_timer: 19.11.2018 20:05:49 cmd_2 Winconnect.TABLET
2018-11-19_19:53:37 di_tabletscreen wait_timer: no timer
2018-11-19_19:53:59 di_tabletscreen wait_timer: 19.11.2018 20:07:19 cmd_2 Winconnect.TABLET
2018-11-19_19:54:01 di_tabletscreen wait_timer: no timer
Raspberry PI3 mit allem möglichen.

ChrisW

hier das 2. doif für das  2. gerät list vom akuten fehlerfall mic ist true aber kein screenon
Internals:
   DEF        ([Winconnect.FHEMTABLET:motion_detect] eq "True" or [Winconnect.FHEMTABLET:microphone_detect] eq "True") (set Winconnect.FHEMTABLET screenOn) DOELSEIF ([Winconnect.FHEMTABLET:motion_detect] eq "False" and [Winconnect.FHEMTABLET:microphone_detect] eq "False") (set Winconnect.FHEMTABLET screenOff)

   MODEL      FHEM
   NAME       di_fhemtabletscreen
   NR         449
   NTFY_ORDER 50-di_fhemtabletscreen
   STATE      cmd_1
   TYPE       DOIF
   .attraggr:
   .attrminint:
   READINGS:
     2018-11-19 20:12:42   Device          Winconnect.FHEMTABLET
     2018-11-19 16:17:22   cmd             1
     2018-11-19 16:17:22   cmd_event       Winconnect.FHEMTABLET
     2018-11-19 16:17:22   cmd_nr          1
     2018-11-19 20:12:42   e_Winconnect.FHEMTABLET_microphone_detect True
     2018-11-19 20:12:42   e_Winconnect.FHEMTABLET_motion_detect False
     2018-11-19 16:17:22   state           cmd_1
     2018-11-19 20:12:42   wait_timer      no timer
   Regex:
   attr:
     cmdState:
     wait:
       0:
         0
       1:
         800
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Winconnect.FHEMTABLET','motion_detect') eq "True" or ::ReadingValDoIf($hash,'Winconnect.FHEMTABLET','microphone_detect') eq "True"
     1          ::ReadingValDoIf($hash,'Winconnect.FHEMTABLET','motion_detect') eq "False" and ::ReadingValDoIf($hash,'Winconnect.FHEMTABLET','microphone_detect') eq "False"
   devices:
     0           Winconnect.FHEMTABLET
     1           Winconnect.FHEMTABLET
     all         Winconnect.FHEMTABLET
   do:
     0:
       0          set Winconnect.FHEMTABLET screenOn
     1:
       0          set Winconnect.FHEMTABLET screenOff
     2:
   helper:
     event      microphone_detect: True
     globalinit 1
     last_timer 0
     sleepdevice Winconnect.FHEMTABLET
     sleepsubtimer 0
     sleeptimer -1
     timerdev   Winconnect.FHEMTABLET
     timerevent microphone_detect: True
     triggerDev Winconnect.FHEMTABLET
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: Winconnect.FHEMTABLET
       state: cmd_1
     timerevents:
       microphone_detect: True
     timereventsState:
       microphone_detect: True
     triggerEvents:
       microphone_detect: True
     triggerEventsState:
       microphone_detect: True
   internals:
   itimer:
   perlblock:
   readings:
     0           Winconnect.FHEMTABLET:motion_detect Winconnect.FHEMTABLET:microphone_detect
     1           Winconnect.FHEMTABLET:motion_detect Winconnect.FHEMTABLET:microphone_detect
     all         Winconnect.FHEMTABLET:motion_detect Winconnect.FHEMTABLET:microphone_detect
   trigger:
   uiState:
   uiTable:
Attributes:
   checkReadingEvent 0
   wait       0:800
Raspberry PI3 mit allem möglichen.

Damian

Nachdem die zweite Bedingung wahr geworden ist und der Timer gesetzt wurde, wurde kurz vor dem Ablauf des Timer die erste Bedingung wieder wahr - der Timer wurde abgebrochen:
Zitat
2018-11-19_19:28:15 di_tabletscreen wait_timer: 19.11.2018 19:41:35 cmd_2 Winconnect.TABLET
2018-11-19_19:41:17 di_tabletscreen wait_timer: no timer

Mit checkReadingEvent 0 wird auf alle Events des abgefragten Devices getriggert. Ist das Absicht?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ChrisW

hmm okay also ich will auf microphone_detect oder motion_detect oder beides zusammen.
Damit will ich einfach erkennen ob jemand da ist wenn er nicht vor der Kamera ist dann macht er vielleicht krach. Kann auch beides passieren.
dann soll screenOn.

Das screenOff soll passieren wenn beides für eine X bestimmte Zeit nicht der fall ist ( abwesenheit )

Das Problem ist vielleicht aktuell vielleicht auch das in Windows Energieoptionen Bildschirmaus auf 30 Minuten steht. Vielleicht denk das doif es wäre nicht nötig da ja noch Geräusche/Motion vor 1 Minute passiert ist. Dann schaltet Windows ScreenOff ..

Könnte das der Fehler sein? Ich Deaktiviere mal das ausschalten in Windows und überlasse es fhem mit dem doif
Raspberry PI3 mit allem möglichen.

Per

Können die beiden Status nur "true" und "false" sein? Falls ja, kannst du statt DOELSEIF einfach DOELSE ohne Bedingungen verwenden.