Hallo zusammen,
ich habe schon seit langer Zeigt ein Problem mit einem oder mehreren meiner DOIF´s und ich bekomme es leider nicht alleine in den Griff. Anhand des untenstehenden stacktraces würde ich vermuten, dass es ein DOIF im zusammenhang mit einem Homematic Device sein muss und es irgendwas mit dem SleepTimer (wait/repeatsame Attribut?) zu tun hat.
Hier die letzten Meldungen mit Stacktrace:
2023.08.23 15:22:38 1: PERL WARNING: Useless use of a constant (2) in void context at (eval 50241) line 1.
2023.08.23 15:22:38 1: stacktrace:
2023.08.23 15:22:38 1: main::__ANON__ called by (eval 50241) (1)
2023.08.23 15:22:38 1: (eval) called by ./FHEM/98_DOIF.pm (853)
2023.08.23 15:22:38 1: main::EvalValueDoIf called by ./FHEM/98_DOIF.pm (3400)
2023.08.23 15:22:38 1: main::DOIF_SetSleepTimer called by ./FHEM/98_DOIF.pm (2477)
2023.08.23 15:22:38 1: main::DOIF_cmd called by ./FHEM/98_DOIF.pm (2722)
2023.08.23 15:22:38 1: main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (2975)
2023.08.23 15:22:38 1: main::DOIF_Notify called by fhem.pl (3976)
2023.08.23 15:22:38 1: main::CallFn called by fhem.pl (3888)
2023.08.23 15:22:38 1: main::DoTrigger called by fhem.pl (4995)
2023.08.23 15:22:38 1: main::readingsEndUpdate called by ./FHEM/88_HMCCU.pm (9105)
2023.08.23 15:22:38 1: main::HMCCU_EndBulkUpdate called by ./FHEM/88_HMCCU.pm (4843)
2023.08.23 15:22:38 1: main::HMCCU_UpdateParamsetReadings called by ./FHEM/88_HMCCU.pm (4959)
2023.08.23 15:22:38 1: main::HMCCU_UpdateMultipleDevices called by ./FHEM/88_HMCCURPCPROC.pm (878)
2023.08.23 15:22:38 1: main::HMCCURPCPROC_Read called by fhem.pl (3976)
2023.08.23 15:22:38 1: main::CallFn called by fhem.pl (784)
2023.08.23 15:42:55 1: PERL WARNING: Useless use of a constant (2) in void context at (eval 55067) line 1.
2023.08.23 15:42:55 1: stacktrace:
2023.08.23 15:42:55 1: main::__ANON__ called by (eval 55067) (1)
2023.08.23 15:42:55 1: (eval) called by ./FHEM/98_DOIF.pm (853)
2023.08.23 15:42:55 1: main::EvalValueDoIf called by ./FHEM/98_DOIF.pm (3400)
2023.08.23 15:42:55 1: main::DOIF_SetSleepTimer called by ./FHEM/98_DOIF.pm (2477)
2023.08.23 15:42:55 1: main::DOIF_cmd called by ./FHEM/98_DOIF.pm (2722)
2023.08.23 15:42:55 1: main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (2975)
2023.08.23 15:42:55 1: main::DOIF_Notify called by fhem.pl (3976)
2023.08.23 15:42:55 1: main::CallFn called by fhem.pl (3888)
2023.08.23 15:42:55 1: main::DoTrigger called by fhem.pl (4995)
2023.08.23 15:42:55 1: main::readingsEndUpdate called by ./FHEM/88_HMCCU.pm (9105)
2023.08.23 15:42:55 1: main::HMCCU_EndBulkUpdate called by ./FHEM/88_HMCCU.pm (4843)
2023.08.23 15:42:55 1: main::HMCCU_UpdateParamsetReadings called by ./FHEM/88_HMCCU.pm (4959)
2023.08.23 15:42:55 1: main::HMCCU_UpdateMultipleDevices called by ./FHEM/88_HMCCURPCPROC.pm (878)
2023.08.23 15:42:55 1: main::HMCCURPCPROC_Read called by fhem.pl (3976)
2023.08.23 15:42:55 1: main::CallFn called by fhem.pl (784)
2023.08.23 15:42:58 1: PERL WARNING: Useless use of a constant (2) in void context at (eval 55117) line 1.
2023.08.23 15:42:58 1: stacktrace:
2023.08.23 15:42:58 1: main::__ANON__ called by (eval 55117) (1)
2023.08.23 15:42:58 1: (eval) called by ./FHEM/98_DOIF.pm (853)
2023.08.23 15:42:58 1: main::EvalValueDoIf called by ./FHEM/98_DOIF.pm (3400)
2023.08.23 15:42:58 1: main::DOIF_SetSleepTimer called by ./FHEM/98_DOIF.pm (2477)
2023.08.23 15:42:58 1: main::DOIF_cmd called by ./FHEM/98_DOIF.pm (3443)
2023.08.23 15:42:58 1: main::DOIF_SleepTrigger called by fhem.pl (3501)
2023.08.23 15:42:58 1: main::HandleTimeout called by fhem.pl (705)
2023.08.23 15:43:03 1: PERL WARNING: Useless use of a constant (2) in void context at (eval 55168) line 1.
2023.08.23 15:43:03 1: stacktrace:
2023.08.23 15:43:03 1: main::__ANON__ called by (eval 55168) (1)
2023.08.23 15:43:03 1: (eval) called by ./FHEM/98_DOIF.pm (853)
2023.08.23 15:43:03 1: main::EvalValueDoIf called by ./FHEM/98_DOIF.pm (3400)
2023.08.23 15:43:03 1: main::DOIF_SetSleepTimer called by ./FHEM/98_DOIF.pm (2477)
2023.08.23 15:43:03 1: main::DOIF_cmd called by ./FHEM/98_DOIF.pm (3443)
2023.08.23 15:43:03 1: main::DOIF_SleepTrigger called by fhem.pl (3501)
2023.08.23 15:43:03 1: main::HandleTimeout called by fhem.pl (705)
Ich habe aktuell 9 DOIF's die etwas mit Homematic Geräten machen, daher wollte ich jetzt nicht von jedem ein list mitschicken (außer es wird gewünscht). Hat jemand eine Idee was der Grund für den Fehler sein könnte, oder weiß wie ich diesen besser auf ein bestimmtes DOIF/Gerät eingrenzen kann?
In diesem Beitrag (https://forum.fhem.de/index.php?topic=50710.0) gab es bereits eine ähnliche Frage, da wurde aber nur gesagt man solle das betroffene Gerät einfach auf verbose=0 stellen. Da ich den Verursacher aber noch nicht ausfindig machen konnte, ist mir das bisher nicht gelungen.
Ich bin für jeden Hinweis dankbar!
Wenn es nicht gerade beim Neustart ist, könntest du die Zeiten mit dem Eventmonitor vergleichen.
Sehr gute Idee! Ich werd's heute Abend mal probieren.
Du hast irgendwo beim Wait-Attribut eine fehlerhafte Angabe zu der Wait-Zeit.
Danke, ich konnte es jetzt auf zwei DOIF's eingrenzen.
WHZ_DI_SCHALTEROBEN => wait 0:1,0.5
WHZ_DI_HOMEBRIDGEDIMOBEN => wait 2:2
define WHZ_DI_SCHALTEROBEN DOIF ([WHZ_HM_LICHTSCHALTEROBEN:"hmstate: off"])\
(set WHZ_TRA_STEHLAMPEGROSS off)\
DOELSEIF ([WHZ_HM_LICHTSCHALTEROBEN:"hmstate: on"])\
(set WHZ_TRA_STEHLAMPEGROSS pct [$DEVICE:control])\
(set WHZ_TRA_STEHLAMPEGROSS ct {(379 + (0.75 * (100 - [$DEVICE:control])))})
attr WHZ_DI_SCHALTEROBEN do resetwait
attr WHZ_DI_SCHALTEROBEN repeatcmd 2,5:2,5
attr WHZ_DI_SCHALTEROBEN repeatsame 2:2
attr WHZ_DI_SCHALTEROBEN room Wohnzimmer
attr WHZ_DI_SCHALTEROBEN wait 0:1,0.5
# DEF ([WHZ_HM_LICHTSCHALTEROBEN:"hmstate: off"])
#(set WHZ_TRA_STEHLAMPEGROSS off)
#DOELSEIF ([WHZ_HM_LICHTSCHALTEROBEN:"hmstate: on"])
#(set WHZ_TRA_STEHLAMPEGROSS pct [$DEVICE:control])
#(set WHZ_TRA_STEHLAMPEGROSS ct {(379 + (0.75 * (100 - [$DEVICE:control])))})
# FUUID 5e45a762-f33f-b3a6-f72b-ba44e72552671fe1
# MODEL FHEM
# NAME WHZ_DI_SCHALTEROBEN
# NOTIFYDEV WHZ_HM_LICHTSCHALTEROBEN,global
# NR 98
# NTFY_ORDER 50-WHZ_DI_SCHALTEROBEN
# STATE cmd_2
# TYPE DOIF
# VERSION 26938 2023-01-01 18:13:32
# eventCount 430
# READINGS:
# 2023-08-23 21:43:14 Device WHZ_HM_LICHTSCHALTEROBEN
# 2023-08-23 21:43:21 cmd 2.2
# 2023-08-23 21:43:21 cmd_event WHZ_HM_LICHTSCHALTEROBEN
# 2023-08-23 21:43:21 cmd_nr 2
# 2023-08-23 21:43:21 cmd_seqnr 2
# 2023-08-23 21:43:14 e_WHZ_HM_LICHTSCHALTEROBEN_events 6.LEVEL_STATUS: NORMAL,6.LEVEL: off,6.ACTIVITY_STATE: stop,devstate: ok,hmstate: on
# 2023-06-06 10:05:45 mode enabled
# 2023-08-23 21:43:21 state cmd_2
# 2023-08-23 21:43:26 wait_timer no timer
# Regex:
# accu:
# collect:
# cond:
# WHZ_HM_LICHTSCHALTEROBEN:
# 0:
# &STATE ^WHZ_HM_LICHTSCHALTEROBEN$
# 1:
# &STATE ^WHZ_HM_LICHTSCHALTEROBEN$
# attr:
# cmdState:
# repeatcmd:
# 2,5
# 2,5
# repeatsame:
# 2
# 2
# wait:
# 0:
# 0
# 1:
# 1
# 0.5
# waitdel:
# condition:
# 0 ::EventDoIf('WHZ_HM_LICHTSCHALTEROBEN',$hash,'hmstate: off',1)
# 1 ::EventDoIf('WHZ_HM_LICHTSCHALTEROBEN',$hash,'hmstate: on',1)
# do:
# 0:
# 0 set WHZ_TRA_STEHLAMPEGROSS off
# 1:
# 0 set WHZ_TRA_STEHLAMPEGROSS pct [$DEVICE:control]
# 1 set WHZ_TRA_STEHLAMPEGROSS ct {(379 + (0.75 * (100 - [$DEVICE:control])))}
# 2:
# helper:
# NOTIFYDEV WHZ_HM_LICHTSCHALTEROBEN,global
# event hmstate: on
# globalinit 1
# last_timer 0
# sleepdevice WHZ_HM_LICHTSCHALTEROBEN
# sleepsubtimer -1
# sleeptimer -1
# timerdev WHZ_HM_LICHTSCHALTEROBEN
# timerevent hmstate: on
# triggerDev WHZ_HM_LICHTSCHALTEROBEN
# DOIF_eventa:
# cmd_nr: 2
# cmd_seqnr: 2
# cmd_event: WHZ_HM_LICHTSCHALTEROBEN
# cmd_2
# DOIF_eventas:
# cmd_nr: 2
# cmd_seqnr: 2
# cmd_event: WHZ_HM_LICHTSCHALTEROBEN
# state: cmd_2
# timerevents:
# 6.LEVEL_STATUS: NORMAL
# 6.LEVEL: off
# 6.ACTIVITY_STATE: stop
# devstate: ok
# hmstate: on
# timereventsState:
# 6.LEVEL_STATUS: NORMAL
# 6.LEVEL: off
# 6.ACTIVITY_STATE: stop
# devstate: ok
# hmstate: on
# triggerEvents:
# 6.LEVEL_STATUS: NORMAL
# 6.LEVEL: off
# 6.ACTIVITY_STATE: stop
# devstate: ok
# hmstate: on
# triggerEventsState:
# 6.LEVEL_STATUS: NORMAL
# 6.LEVEL: off
# 6.ACTIVITY_STATE: stop
# devstate: ok
# hmstate: on
# hmccu:
# internals:
# perlblock:
# readings:
# trigger:
# all WHZ_HM_LICHTSCHALTEROBEN
# uiState:
# uiTable:
#
setstate WHZ_DI_SCHALTEROBEN cmd_2
setstate WHZ_DI_SCHALTEROBEN 2023-08-23 21:43:14 Device WHZ_HM_LICHTSCHALTEROBEN
setstate WHZ_DI_SCHALTEROBEN 2023-08-23 21:43:21 cmd 2.2
setstate WHZ_DI_SCHALTEROBEN 2023-08-23 21:43:21 cmd_event WHZ_HM_LICHTSCHALTEROBEN
setstate WHZ_DI_SCHALTEROBEN 2023-08-23 21:43:21 cmd_nr 2
setstate WHZ_DI_SCHALTEROBEN 2023-08-23 21:43:21 cmd_seqnr 2
setstate WHZ_DI_SCHALTEROBEN 2023-08-23 21:43:14 e_WHZ_HM_LICHTSCHALTEROBEN_events 6.LEVEL_STATUS: NORMAL,6.LEVEL: off,6.ACTIVITY_STATE: stop,devstate: ok,hmstate: on
setstate WHZ_DI_SCHALTEROBEN 2023-06-06 10:05:45 mode enabled
setstate WHZ_DI_SCHALTEROBEN 2023-08-23 21:43:21 state cmd_2
setstate WHZ_DI_SCHALTEROBEN 2023-08-23 21:43:26 wait_timer no timer
define WHZ_DI_HOMEBRIDGEDIMOBEN DOIF (["WHZ_DUM_LICHTSCHALTEROBEN:pct"])\
(\
set WHZ_HM_LICHTSCHALTEROBEN control [$DEVICE:pct],\
IF ([$DEVICE:pct:d] > 0) (set $DEVICE on) ELSE (set $DEVICE off)\
)\
DOELSEIF (["WHZ_HM_LICHTSCHALTEROBEN:control"])\
(\
set WHZ_DUM_LICHTSCHALTEROBEN pct [$DEVICE:control],\
IF ([$DEVICE:control:d] > 0) (set WHZ_DUM_LICHTSCHALTEROBEN on) ELSE (set WHZ_DUM_LICHTSCHALTEROBEN off)\
)
attr WHZ_DI_HOMEBRIDGEDIMOBEN do resetwait
attr WHZ_DI_HOMEBRIDGEDIMOBEN room Wohnzimmer
attr WHZ_DI_HOMEBRIDGEDIMOBEN wait 2:2
# DEF (["WHZ_DUM_LICHTSCHALTEROBEN:pct"])
#(
# set WHZ_HM_LICHTSCHALTEROBEN control [$DEVICE:pct],
# IF ([$DEVICE:pct:d] > 0) (set $DEVICE on) ELSE (set $DEVICE off)
#)
#DOELSEIF (["WHZ_HM_LICHTSCHALTEROBEN:control"])
#(
# set WHZ_DUM_LICHTSCHALTEROBEN pct [$DEVICE:control],
# IF ([$DEVICE:control:d] > 0) (set WHZ_DUM_LICHTSCHALTEROBEN on) ELSE (set WHZ_DUM_LICHTSCHALTEROBEN off)
#)
# FUUID 5f418ff3-f33f-b3a6-4162-4896ba15bd395df7
# MODEL FHEM
# NAME WHZ_DI_HOMEBRIDGEDIMOBEN
# NOTIFYDEV .*(WHZ_DUM_LICHTSCHALTEROBEN).*,.*(WHZ_HM_LICHTSCHALTEROBEN).*,global
# NR 102
# NTFY_ORDER 50-WHZ_DI_HOMEBRIDGEDIMOBEN
# STATE cmd_2
# TYPE DOIF
# VERSION 26938 2023-01-01 18:13:32
# eventCount 90
# READINGS:
# 2023-08-23 21:43:14 Device WHZ_HM_LICHTSCHALTEROBEN
# 2023-08-23 21:43:16 cmd 2
# 2023-08-23 21:43:16 cmd_event WHZ_HM_LICHTSCHALTEROBEN
# 2023-08-23 21:43:16 cmd_nr 2
# 2022-01-25 19:29:08 mode enabled
# 2023-08-23 21:43:16 state cmd_2
# 2023-08-23 21:43:16 wait_timer no timer
# Regex:
# accu:
# collect:
# cond:
# :
# 0:
# "WHZ_DUM_LICHTSCHALTEROBEN:pct" WHZ_DUM_LICHTSCHALTEROBEN:pct
# 1:
# "WHZ_HM_LICHTSCHALTEROBEN:control" WHZ_HM_LICHTSCHALTEROBEN:control
# attr:
# cmdState:
# wait:
# 0:
# 2
# 1:
# 2
# waitdel:
# condition:
# 0 ::EventDoIf('WHZ_DUM_LICHTSCHALTEROBEN',$hash,'pct',0)
# 1 ::EventDoIf('WHZ_HM_LICHTSCHALTEROBEN',$hash,'control',0)
# do:
# 0:
# 0 set WHZ_HM_LICHTSCHALTEROBEN control [$DEVICE:pct], IF ([$DEVICE:pct:d] > 0) (set $DEVICE on) ELSE (set $DEVICE off)
# 1:
# 0 set WHZ_DUM_LICHTSCHALTEROBEN pct [$DEVICE:control], IF ([$DEVICE:control:d] > 0) (set WHZ_DUM_LICHTSCHALTEROBEN on) ELSE (set WHZ_DUM_LICHTSCHALTEROBEN off)
# 2:
# helper:
# NOTIFYDEV .*(WHZ_DUM_LICHTSCHALTEROBEN).*,.*(WHZ_HM_LICHTSCHALTEROBEN).*,global
# event control: 100
# globalinit 1
# last_timer 0
# sleepdevice WHZ_HM_LICHTSCHALTEROBEN
# sleepsubtimer -1
# sleeptimer -1
# timerdev WHZ_HM_LICHTSCHALTEROBEN
# timerevent control: 100
# triggerDev WHZ_HM_LICHTSCHALTEROBEN
# DOIF_eventa:
# cmd_nr: 2
# cmd: 2
# cmd_event: WHZ_HM_LICHTSCHALTEROBEN
# cmd_2
# DOIF_eventas:
# cmd_nr: 2
# cmd: 2
# cmd_event: WHZ_HM_LICHTSCHALTEROBEN
# state: cmd_2
# timerevents:
# 5.ACTIVITY_STATE: stop
# 5.LEVEL: off
# 5.LEVEL_STATUS: NORMAL
# 4.ACTIVITY_STATE: stop
# 4.LEVEL_STATUS: NORMAL
# control: 100
# 4.LEVEL: on
# pct: on
# level: on
# devstate: ok
# hmstate: on
# timereventsState:
# 5.ACTIVITY_STATE: stop
# 5.LEVEL: off
# 5.LEVEL_STATUS: NORMAL
# 4.ACTIVITY_STATE: stop
# 4.LEVEL_STATUS: NORMAL
# control: 100
# 4.LEVEL: on
# pct: on
# level: on
# devstate: ok
# hmstate: on
# triggerEvents:
# 5.ACTIVITY_STATE: stop
# 5.LEVEL: off
# 5.LEVEL_STATUS: NORMAL
# 4.ACTIVITY_STATE: stop
# 4.LEVEL_STATUS: NORMAL
# control: 100
# 4.LEVEL: on
# pct: on
# level: on
# devstate: ok
# hmstate: on
# triggerEventsState:
# 5.ACTIVITY_STATE: stop
# 5.LEVEL: off
# 5.LEVEL_STATUS: NORMAL
# 4.ACTIVITY_STATE: stop
# 4.LEVEL_STATUS: NORMAL
# control: 100
# 4.LEVEL: on
# pct: on
# level: on
# devstate: ok
# hmstate: on
# hmccu:
# internals:
# perlblock:
# readings:
# trigger:
# uiState:
# uiTable:
#
setstate WHZ_DI_HOMEBRIDGEDIMOBEN cmd_2
setstate WHZ_DI_HOMEBRIDGEDIMOBEN 2023-08-23 21:43:14 Device WHZ_HM_LICHTSCHALTEROBEN
setstate WHZ_DI_HOMEBRIDGEDIMOBEN 2023-08-23 21:43:16 cmd 2
setstate WHZ_DI_HOMEBRIDGEDIMOBEN 2023-08-23 21:43:16 cmd_event WHZ_HM_LICHTSCHALTEROBEN
setstate WHZ_DI_HOMEBRIDGEDIMOBEN 2023-08-23 21:43:16 cmd_nr 2
setstate WHZ_DI_HOMEBRIDGEDIMOBEN 2022-01-25 19:29:08 mode enabled
setstate WHZ_DI_HOMEBRIDGEDIMOBEN 2023-08-23 21:43:16 state cmd_2
setstate WHZ_DI_HOMEBRIDGEDIMOBEN 2023-08-23 21:43:16 wait_timer no timer
Das Problem ist wohl hier nicht die Wait-Timer-Definition, sondern die Definition des Attributes repeatcmd. Bei dem kann man nur die Wiederholungszeit jeweils eines gesamten Zweiges angeben und nicht dessen kommagetrennten Sequenzen, wie bei wait. D. h. Komma darf hier gar nicht vorkommen, sondern nur der Doppelpunkt als Trennzeichen zwischen den DOIF-Zweigen.
siehe: https://fhem.de/commandref_DE.html#DOIF_repeatcmd
Das habe ich tatsächlich übersehen ::)
Ich habe nun das
repeatcmd 2,5:2,5
in
repeatcmd 2:2
geändert, es ist ja eh nur zur Sicherheit falls der erste Befehl nicht angekommen ist.
Nun warte ich ab und schaue ob es damit nicht mehr auftritt. Ich melde mich dann später nochmal.
Edit: Es kommen keine Meldungen mehr, danke für die schnelle Hilfe! So eine Kleinigkeit die mich so lange gernervt hat, hätte ich mich man früher gemeldet ;).
Zitat von: Dared am 24 August 2023, 09:17:32Das habe ich tatsächlich übersehen ::)
Ich habe nun das
repeatcmd 2,5:2,5
in
repeatcmd 2:2
geändert, es ist ja eh nur zur Sicherheit falls der erste Befehl nicht angekommen ist.
Nun warte ich ab und schaue ob es damit nicht mehr auftritt. Ich melde mich dann später nochmal.
Edit: Es kommen keine Meldungen mehr, danke für die schnelle Hilfe! So eine Kleinigkeit die mich so lange gernervt hat, hätte ich mich man früher gemeldet ;).
Ja, leider hat man als Programmierer nicht immer Einfluss auf die Fehlermeldungen, die vom System kommen. Insb. ist das bei Warnungen oft der Fall. Ich musste sogar selbst in den Programmcode schauen, um zu erkennen was hier das Problem ist. Offenbar sollte Perl mit 2,5 rechnen, was aber nicht geht.