[98_structure] - Fehlermeldungen im Log während FHEM-Neustart

Begonnen von Karflyer, 17 September 2019, 16:10:14

Vorheriges Thema - Nächstes Thema

Karflyer

Beim Neustart von FHEM erhalte ich mehrfach die folgende Fehlermeldung (stacktrace):

2019.09.17 15:40:01 1: PERL WARNING: Use of uninitialized value $sret in substitution (s///) at ./FHEM/98_structure.pm line 481.
2019.09.17 15:40:01 1: stacktrace:
2019.09.17 15:40:01 1:     main::__ANON__                      called by ./FHEM/98_structure.pm (481)
2019.09.17 15:40:01 1:     main::structure_Set                 called by fhem.pl (3752)
2019.09.17 15:40:01 1:     main::CallFn                        called by fhem.pl (1882)
2019.09.17 15:40:01 1:     main::DoSet                         called by fhem.pl (1924)
2019.09.17 15:40:01 1:     main::CommandSet                    called by fhem.pl (2734)
2019.09.17 15:40:01 1:     main::getAllSets                    called by ./FHEM/01_FHEMWEB.pm (3175)
2019.09.17 15:40:01 1:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (2983)
2019.09.17 15:40:01 1:     main::FW_roomStatesForInform        called by ./FHEM/01_FHEMWEB.pm (666)
2019.09.17 15:40:01 1:     main::FW_initInform                 called by ./FHEM/01_FHEMWEB.pm (898)
2019.09.17 15:40:01 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (579)
2019.09.17 15:40:01 1:     main::FW_Read                       called by fhem.pl (3752)
2019.09.17 15:40:01 1:     main::CallFn                        called by fhem.pl (750)
2019.09.17 15:40:01 1: PERL WARNING: Use of uninitialized value $sret in split at ./FHEM/98_structure.pm line 482.
2019.09.17 15:40:01 1: stacktrace:
2019.09.17 15:40:01 1:     main::__ANON__                      called by ./FHEM/98_structure.pm (482)
2019.09.17 15:40:01 1:     main::structure_Set                 called by fhem.pl (3752)
2019.09.17 15:40:01 1:     main::CallFn                        called by fhem.pl (1882)
2019.09.17 15:40:01 1:     main::DoSet                         called by fhem.pl (1924)
2019.09.17 15:40:01 1:     main::CommandSet                    called by fhem.pl (2734)
2019.09.17 15:40:01 1:     main::getAllSets                    called by ./FHEM/01_FHEMWEB.pm (3175)
2019.09.17 15:40:01 1:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (2983)
2019.09.17 15:40:01 1:     main::FW_roomStatesForInform        called by ./FHEM/01_FHEMWEB.pm (666)
2019.09.17 15:40:01 1:     main::FW_initInform                 called by ./FHEM/01_FHEMWEB.pm (898)
2019.09.17 15:40:01 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (579)
2019.09.17 15:40:01 1:     main::FW_Read                       called by fhem.pl (3752)
2019.09.17 15:40:01 1:     main::CallFn                        called by fhem.pl (750)


Ich kann nicht erkennen, was diese Fehlermeldungen verursacht. Die von mir angelegten Stucture's funktionieren einwandfrei und im laufenden betrieb werden auch keine weiteren Fehlermeldungen generiert. Was könnte die Fehlermeldung beim Start von FHEM verursachen?

Hier mal zwei Beispiele (list) meiner Structure's:
Internals:
   ATTR       struct_tadoValve
   CHANGEDCNT 216
   DEF        struct_tadoValve ht_bz ht_sz ht_fz ht_ks ht_gw ht_wz ht_kc ht_ph
   FUUID      5d306d06-f33f-bb67-091e-4b683e81cf03e15f
   NAME       TADO_heater
   NR         693
   NTFY_ORDER 50-TADO_heater
   STATE      off
   TYPE       structure
   READINGS:
     2019-09-17 16:06:55   LastDevice      ht_sz
     2019-09-17 16:06:55   LastDevice_Abs  ht_sz
     2019-09-17 16:06:55   state           off
Attributes:
   DbLogExclude .*
   clientstate_behavior absolute
   clientstate_priority on off
   evaluateSetResult 1
   room       Automatisierung,Tado


Internals:
   ATTR       room
   CFGFN      /opt/fhem/dev_automation.cfg
   CHANGEDCNT 0
   DEF        room sc_bzl sc_bzr
   FUUID      5c5721eb-f33f-bb67-74d6-b1d5a589fc0f4791
   NAME       st_bz
   NR         390
   NTFY_ORDER 50-st_bz
   STATE      closed
   TYPE       structure
   READINGS:
     2019-09-17 07:00:08   LastDevice      sc_bzr
     2019-09-17 07:00:08   LastDevice_Abs  sc_bzr
     2019-09-17 07:00:08   state           closed
Attributes:
   DbLogExclude .*
   alias      Fenster Badezimmer
   clientstate_behavior relative
   clientstate_priority open|tilted closed
   room       Automatisierung,EnOcean


Grüße
Stefan

rudolfkoenig

Einer der Strukturmitglieder liefert auf "set Mitglied ?" undef zurueck, statt dem Standard "Unknown argument ?, choose one of ..."
Habe gerade eine Fehlermeldung eingebaut, um diese Warnung zu vermeiden.

Karflyer

ZitatEiner der Strukturmitglieder liefert auf "set Mitglied ?" undef zurueck, statt dem Standard "Unknown argument ?, choose one of ..."
Habe gerade eine Fehlermeldung eingebaut, um diese Warnung zu vermeiden.

@rudolfkoenig zunächst vielen Dank für die Anpassung des Moduls.

In der Tat werden jetzt im Log die betreffenden struckture's bzw. structure-Member gelistet auf die der 'Fehler' zutrifft:

2019.09.18 08:14:40 1: st_ph: 'set sc_ph ?' returned undef
2019.09.18 08:14:40 1: st_bz: 'set sc_bzl ?' returned undef
2019.09.18 08:14:40 1: st_bz: 'set sc_bzr ?' returned undef
2019.09.18 08:14:40 1: st_sz: 'set sc_szl ?' returned undef
2019.09.18 08:14:40 1: st_sz: 'set sc_szr ?' returned undef
2019.09.18 08:14:40 1: st_wzez: 'set sc_wz ?' returned undef
2019.09.18 08:14:40 1: st_wzez: 'set sc_ezl ?' returned undef
2019.09.18 08:14:40 1: st_wzez: 'set sc_ezr ?' returned undef


Das sind Fensterkontakte (enocean) für die es keinen Set-Befehl gibt. Ich möchte in Räumen mit mehreren Fenstern auswerten ob eines der Fenster geöffnet ist oder alle Fenster geschlossen sind. Das funktioniert mit einer 'structure' auch wunderbar. Gibt es ein Attribut, dass man setzen muss um die oben aufgeführten Meldungen im Log zu eliminieren? Oder sind diese Meldungen eher als Hinweis zu betrachten?

Grüße
Stefan

rudolfkoenig

ZitatDas sind Fensterkontakte (enocean) für die es keinen Set-Befehl gibt.
In diesem Fall darf der Modul-Autor entweder kein SetFn implementieren, oder (in diesem Fall vmtl. richtig), muss den Text "Unknown argument ?, choose one of" zurueckliefern.

Karflyer

ZitatIn diesem Fall darf der Modul-Autor entweder kein SetFn implementieren, oder (in diesem Fall vmtl. richtig), muss den Text "Unknown argument ?, choose one of" zurueckliefern.

Danke für die Info. Ich werde mich dann an den Maintainer des enocean-Moduls wenden.

Grüße
Stefan

zife

Ich möchte diesen betagten Faden nochmal aktivieren.

Ich habe auch die o.g. Fehler im Log, und aus
https://forum.fhem.de/index.php?topic=103815.0
gelernt, dass das nicht so einfach zu ändern ist. Ok, Haken dran.

Zusätzlich habe ich aber ein paar Freezes, zu denen mir das Freezemon-Log unzählige Aufrufe von "set <device> ?" mitsamt der Rückmeldung "Unknown argument ?, choose one of ..." ausweist. Zum Beispiel:

2022.02.25 15:57:32.548 5: Cmd: >set Kuechen_Wassersensor ?<
2022.02.25 15:57:32.580 5: SET: Unknown argument ?, choose one of A0:noArg AI:noArg B0:noArg BI:noArg C0:noArg CI:noArg D0:noArg DI:noArg released:noArg


Ich verstehe die Ausführungen oben so, dass auch das so sein muss. Aber ich würde gerne die Logik hinter "set <device> ?" in einer structure verstehen - wann wird das ausgeführt? Warum?

Mir blockiert es fhem für teilweise 10 Sekunden - aber ohne, dass ich die structure geschaltet hätte. Ich weiß, ich kann Aufrufe mit async entzerren, aber hier gab es ja gar keinen Aufruf... oder doch? Muss ich auf Fehlersuche gehen, oder ist das einfach eine "Begleiterscheinung" von großen structures?

fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

rudolfkoenig

ZitatAber ich würde gerne die Logik hinter "set <device> ?" in einer structure verstehen - wann wird das ausgeführt? Warum?
In der FHEMWEB Detailansicht hat man die Moeglichkeit die Befehle aus einer Liste auszuwaehlen.
Diese Liste kriegt man mit einem ungueltigen set Befehl (z.Bsp. ?), woraufhin das Modul mit "... choose one of <Liste der gueltigen Befehle>" zu antworten hat.
Structure selbst muss diese Liste von den Mitgliedern einsammeln, deswegen werden sie alle angefragt.

Das sollte bei normalen Modulen nicht zu einer Blockierung fuehren, da die Liste der moeglichen Befehle nicht aufwendig zu berechnen ist, oder von anderen Programmen abgefragt werden muss.

zife

Ah, ok, Erleuchtung  8)  Danke!
Also schickt er die set <device> ? erst beim Aufruf einer WEB-Instanz - dann aber alle auf einmal.
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?