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
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
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?
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
Können die beiden Status nur "true" und "false" sein? Falls ja, kannst du statt DOELSEIF einfach DOELSE ohne Bedingungen verwenden.