[Gelöst] DOIF erzeugt regelmäßig PERL WARNING Useless use of a constant (2) im Log

Begonnen von Dared, 23 August 2023, 15:50:19

Vorheriges Thema - Nächstes Thema

Dared

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 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!

Per

Wenn es nicht gerade beim Neustart ist, könntest du die Zeiten mit dem Eventmonitor vergleichen.

Dared


Damian

Du hast irgendwo beim Wait-Attribut eine fehlerhafte Angabe zu der Wait-Zeit.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Dared

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


Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Dared

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 ;).

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF