Hallo,
nach dem heutigen Update habe ich folgende Fehlermeldungen nach jedem Neustart im log. Das ist nur ein Auszug, es sind noch einige mehr...
Kann mir jemand weiterhelfen wo das Problem liegt? Ich habe keine Idee...
Danke und Gruß
Oli
PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096, <$fh> line 175.
2017.08.18 10:54:02 1: stacktrace:
2017.08.18 10:54:02 1: main::__ANON__ called by fhem.pl (4096)
2017.08.18 10:54:02 1: main::AttrVal called by ./FHEM/10_EnOcean.pm (725)
2017.08.18 10:54:02 1: main::EnOcean_Define called by fhem.pl (3433)
2017.08.18 10:54:02 1: main::CallFn called by fhem.pl (1919)
2017.08.18 10:54:02 1: main::CommandDefine called by fhem.pl (1170)
2017.08.18 10:54:02 1: main::AnalyzeCommand called by fhem.pl (1024)
2017.08.18 10:54:02 1: main::AnalyzeCommandChain called by fhem.pl (1305)
2017.08.18 10:54:02 1: main::CommandInclude called by fhem.pl (531)
2017.08.18 10:54:03 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096, <$fh> line 216.
2017.08.18 10:54:03 1: stacktrace:
2017.08.18 10:54:03 1: main::__ANON__ called by fhem.pl (4096)
2017.08.18 10:54:03 1: main::AttrVal called by ./FHEM/10_EnOcean.pm (725)
2017.08.18 10:54:03 1: main::EnOcean_Define called by fhem.pl (3433)
2017.08.18 10:54:03 1: main::CallFn called by fhem.pl (1919)
2017.08.18 10:54:03 1: main::CommandDefine called by fhem.pl (1170)
2017.08.18 10:54:03 1: main::AnalyzeCommand called by fhem.pl (1024)
2017.08.18 10:54:03 1: main::AnalyzeCommandChain called by fhem.pl (1305)
2017.08.18 10:54:03 1: main::CommandInclude called by fhem.pl (531)
2017.08.18 10:54:03 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096, <$fh> line 232.
2017.08.18 10:54:03 1: stacktrace:
2017.08.18 10:54:03 1: main::__ANON__ called by fhem.pl (4096)
2017.08.18 10:54:03 1: main::AttrVal called by ./FHEM/10_EnOcean.pm (725)
2017.08.18 10:54:03 1: main::EnOcean_Define called by fhem.pl (3433)
2017.08.18 10:54:03 1: main::CallFn called by fhem.pl (1919)
2017.08.18 10:54:03 1: main::CommandDefine called by fhem.pl (1170)
2017.08.18 10:54:03 1: main::AnalyzeCommand called by fhem.pl (1024)
2017.08.18 10:54:03 1: main::AnalyzeCommandChain called by fhem.pl (1305)
2017.08.18 10:54:03 1: main::CommandInclude called by fhem.pl (531)
2017.08.18 10:54:03 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096, <$fh> line 248.
2017.08.18 10:54:03 1: stacktrace:
2017.08.18 10:54:03 1: main::__ANON__ called by fhem.pl (4096)
2017.08.18 10:54:03 1: main::AttrVal called by ./FHEM/10_EnOcean.pm (725)
2017.08.18 10:54:03 1: main::EnOcean_Define called by fhem.pl (3433)
2017.08.18 10:54:03 1: main::CallFn called by fhem.pl (1919)
2017.08.18 10:54:03 1: main::CommandDefine called by fhem.pl (1170)
2017.08.18 10:54:03 1: main::AnalyzeCommand called by fhem.pl (1024)
2017.08.18 10:54:03 1: main::AnalyzeCommandChain called by fhem.pl (1305)
2017.08.18 10:54:03 1: main::CommandInclude called by fhem.pl (531)
Im log finden sich, so verstehe ich das, Aufrufe der zentralen Routine AttrVal durch EnOcean. Kann mir mal jemand erklären, ob der Fehler ggf. mit den Aufrufen zusammenhängen kann.
Das EnOcean-Modul wurde seit dem 27. März nicht mehr angepasst. Gibt es grundlegende Änderungen in den zentralen Modulen, die Auswirkungen auf das EnOcean Modul haben und sind deshalb in dem Modul Anpassungen notwendig?
Nein, keine Aenderungen.
In diesem Fall wurde AttrVal mit einem undefinierten Geraet ($d) aufgerufen, und das war auch frueher unzulaessig.
Bitte mal 00_TCM auf die Vorgängerversion zurücksetzen, siehe Anlage. 10_EnOcean ruft auch Attribute des Transceivers aus 00_TCM auf. Vielleicht müssen wir dort suchen. Das Modul habe ich kürzlich aktualisiert.
Leider auch mit der alten Version noch das gleiche Verhalten. Vielleicht ist der Fehler auch schon älter, da ich länger keine Update gemacht hatte (letzter Stand war von Mai 2016).
Gibt es noch etwas was ich zur Eingrenzung des Fehlers machen kann?
Hallo Klaus,
ich habe inzwischen durch Analyse der Zeilennummerierung in der fhem.cfg herausgefunden, dass der Fehler scheinbar jedesmal beim Aufruf von
define Geraet_xyz EnOcean 01234ABCD
erzeugt wird.
Edit:
Außerdem habe ich mir die fhem.pl anschaut. In der Zeile 4096, in der der Fehler auftritt gab es eine Änderung am 11.4.17 "fhem.pl: make AttrVal parameter check identical to ReadingsVal (Forum..."
Screenshot Github im Anhang. Wenn ich den alten Code wieder einfüge ist der Fehler weg. Was ich nicht verstehe, warum tritt die Fehlermeldung scheinbar nur bei mir auf?
Hilft das bei der Fehlersuche evtl. weiter?
Danke und Gruß
Oli
Danke für die Fehlersuche. Zu den Änderungen in fhem.pl und ggf. den Auswirkungen kann Rudi sicherlich was sagen.
Welche Attribute sind denn im Device Geraet_xyz gesetzt? Scheint ja ein manuell angelegtes "Test"-Device zu sein.
Das Gerät war nur ein Beispiel. Tatsächlich kommt der Fehler bei allen definierten Enocean Devices. Hier mal ein konkretes Beispiel aus der fhem.cfg:
define Temp_Aussen EnOcean 04010815
attr Temp_Aussen IODev TCM310_0
attr Temp_Aussen manufID 00D
attr Temp_Aussen group Aussensensor
attr Temp_Aussen icon icoKLIMA
attr Temp_Aussen room 01_Licht,02_Rolladen,03_Temperatur
attr Temp_Aussen fp_Dachgeschoss 100,220,4,Temp_Aussen
attr Temp_Aussen fp_Erdgeschoss 100,220,4,Temp_Aussen
attr Temp_Aussen subType tempHumiSensor.02
Hallo zusammen ,
kann ich bei mir bestätigen ist mir auch aufgefallen
bei jedem
define XYZ EnOcean FFCCXYZ
kommt bei mir auch die Pearl Warnung
Hallo,
die Warnung kam bei mir auch - die Variable $autocreateName wird im Modul "10_EnOcean.pm" in der Zeile 715 definiert und vorbelegt. In Zeile 725 wird sie als Übergabeparameter in der Funktion AttrVal() verwendet. Dort ist sie dann im Fall der Warnung nicht mehr definiert.
Als Ursache habe ich die while() Schleife in den Zeilen 722ff gefunden. Dort würde sie für ein element des hash %defs des Typs "autocreate" mit dem im Hash gespeicherten Namen belegt. Für den Fall, dass der Hash kein Element des Typs "autocreate" enthält, bleibt sie wohl undefiniert.
Ich habe folgenden Code zur Analyse und Korrektur als Ersatz der Zeilen 720 bis 725 eingefügt:
Log3 $name, 5, "10_EnOcean: Defaultvalues: $autocreateName, $autocreateDeviceRoom, $name"; # CK: added 17.01.2018 for debugging purposes
Log3 $name, 5, "10_EnOcean: Commandline: " . join(' ', @a); # CK: added 17.01.2018 for debugging purposes
if(@a > 2 && @a < 5) {
# find autocreate device
while (($autocreateName, $autocreateHash) = each(%defs)) {
Log3 $name, 5, "10_EnOcean: While Schleife: $autocreateName, $autocreateHash, $defs{$autocreateName}{TYPE}"; # CK: added 17.01.2018 for debugging purposes
last if ($defs{$autocreateName}{TYPE} eq "autocreate");
}
Log3 $name, 5, "10_EnOcean: Defaultvalues $autocreateName , $autocreateDeviceRoom, $name"; # CK: added 17.01.2018 for debugging purposes
$autocreateDeviceRoom = AttrVal($autocreateName, "device_room", $autocreateDeviceRoom) if (defined $autocreateName); # CK: added 17.01.2018: " if (defined $autocreateName)" to avoid warning message, due to undefined var $autocreateName
Log3 $name, 5, "10_EnOcean: Defaultvalues $autocreateName , $autocreateDeviceRoom, $name"; # CK: added 17.01.2018 for debugging purposes
Meine Lösung wäre also in Zeile 725 den schliessenden ";" durch ein " if (defined $autocreateName);" zu ersetzen.
Evtl. kann sich ein FHEM EnOcean Guru dieses Thema noch einmal ansehen und eine professionelle Lösung implementieren ? - Danke !
Gruß
Christoph
Danke für den Tipp. Schaue ich mir an.
Bitte geänderte Version von 10_EnOcean testen, Entwicklerversion siehe Anlage.
Hallo,
leider ist ein Test der Funktion aktuell nicht möglich, da XML::Simple auf meinem System nicht verfügbar scheint.
Über apt-get ist es in der Distribution nicht verfügbar und über CPAN scheitert die Installation an der dependency XML::Parser::Expat, die sich bislang auf meinem Cubietruck/Armbian System nicht erstellen lässt.
...ich bleibe dran.
Gruß
Christoph
Mal mit
apt-get install libxml-simple-perl
versuchen.
Gehört die Bibliothek nicht eigentlich zum Standardumfang der PERL-Grundinstallation?
Anbei eine erweiterte Entwicklerversion in der fehlende XML-Routinen abgefangen und im LOG ein entsprechender Hinweis angezeigt wird. Die XML-Funktionen sind nicht für die Behebung des o. a. Fehlers sondern für andere neue Funktionen erforderlich.
Hallo,
vielen Dank für die zusätzliche Anpassung! Andererseits sollte ich XML::Simple schnellstmöglich installieren, um für zukünftige Updates vorbereitet zu sein.
Die Installtion mit apt-get install libxml-simple-perl schlägt bei meiner Distribution fehl.
root@meinserver:~# apt-get install libxml-simple-perl
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package libxml-simple-perl is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'libxml-simple-perl' has no installation candidate
Die Installation via CPAN
root@meinserver:~# cpan XML::Simple
schlug gestern abend wegen segmentation faults beim compilieren von XML::Parser::Expat fehl - da verabschiedet sich wohl meine SD Karte so langsam.
root@meinserver:~# apt-get install libexpat1-dev
im Vorfeld sorgte für die erforderlichen Libraries.
Ich schaue mir die komplette Version inkl. XML an - die Neugier ist einfach zu groß ;)
Gruß
Christoph
Hallo,
die Änderungen zeigen Wirkung.
Vorher:
2018.01.25 20:11:37 2: EnOcean Cryptographic functions available.
2018.01.25 20:11:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4178, <$fh> line 35.
2018.01.25 20:11:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4178, <$fh> line 45.
2018.01.25 20:11:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4178, <$fh> line 55.
2018.01.25 20:11:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4178, <$fh> line 80.
2018.01.25 20:11:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4178, <$fh> line 107.
2018.01.25 20:11:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4178, <$fh> line 224.
2018.01.25 20:11:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4178, <$fh> line 250.
2018.01.25 20:11:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4178, <$fh> line 270.
2018.01.25 20:11:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4178, <$fh> line 338.
2018.01.25 20:11:37 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4178, <$fh> line 364.
Nachher:
2018.01.25 20:15:39 2: EnOcean Cryptographic functions available.
2018.01.25 20:15:39 2: EnOcean XML functions available.
Sonst bislang alles unauffällig - wie bisher. Die weiteren Änderungen sehe ich vor allem für Eltako Geräte und beim Einlernen wirksam ? Wie kann man die Ausgabe der Device Descriptions auslösen ?
Mal sehen, was beim Einlernen meiner weiteren Permundo PSC152-EO passiert ;). Das braucht allerdings noch etwas Zeit...
Danke für die schnelle Reaktion und Korrektur - war in der Fehlerwirkung nicht wirklich kritisch, da die Änderung ja nur die Warnung abfängt. Hatte ich auch so beim Lesen des Codes verstanden.
Gruß
Christoph
Zur zukünftige Abbildung und Nutzung herstellerspezifischer Erweiterungen in Fhem wurden grundlegende ReComm Funktionen erstellt, insbesondere für das Auslesen von Geräte- und Parameterbeschreibungen im XML-Format. Die eigentlichen Zusatzfunktionen, die darauf aufbauen, müssen aber noch erstellt werden. Einen Zeitplan dafür habe ich noch nicht.
Funktioniert die aktuelle 10_EnOcean-Entwicklerversion auch ohne die Einbindung des zusätzlichen Perl XML-Moduls?
Hallo,
ja, sieht bei mir gut aus.
cpan App::cpanminus
danach
cpanm --uninstall XML::Simple
führt nach einem
shutdown restart
zu
2018.01.28 15:35:05 0: Server shutdown
2018.01.28 15:35:08 1: Including fhem.cfg
[...]
2018.01.28 15:35:12 2: EnOcean Cryptographic functions available.
2018.01.28 15:35:12 2: EnOcean XML functions are not available.
[...]
2018.01.28 15:35:14 2: EnOcean Anbau.Rolladen.Ost.Links XML functions are not available
2018.01.28 15:35:14 2: EnOcean Anbau.Tischlampe1 XML functions are not available
Ich würde sagen die Maskierung der XML Funktionen funktioniert...
Gruß
Christoph
Zitat von: klaus.schauer am 24 Januar 2018, 09:14:15Gehört die Bibliothek nicht eigentlich zum Standardumfang der PERL-Grundinstallation?
Also, auf meinem Debian Stretch nicht. Habe gerade ein FHEM-Update gemacht und danach genau die Fehlermeldung "XML functions are not available" für jedes EnOcean-Gerät. Nach der Installation des Pakets
libxml-simple-perl waren die dann wieder weg.