FHEM Forum

FHEM - Hausautomations-Systeme => EnOcean => Thema gestartet von: Bitzer am 18 August 2017, 11:07:13

Titel: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: Bitzer am 18 August 2017, 11:07:13
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)
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: klaus.schauer am 18 August 2017, 14:30:57
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?
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: rudolfkoenig am 18 August 2017, 14:35:40
Nein, keine Aenderungen.
In diesem Fall wurde AttrVal mit einem undefinierten Geraet ($d) aufgerufen, und das war auch frueher unzulaessig.
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: klaus.schauer am 18 August 2017, 17:32:50
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.
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: Bitzer am 18 August 2017, 22:41:50
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?
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: Bitzer am 28 August 2017, 09:16:47
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
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: klaus.schauer am 29 August 2017, 10:08:11
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.
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: Bitzer am 29 August 2017, 11:24:22
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
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: gagamicha am 23 Dezember 2017, 22:31:40
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
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: christoph.kaiser.in am 18 Januar 2018, 00:07:19
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
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: klaus.schauer am 18 Januar 2018, 21:19:20
Danke für den Tipp. Schaue ich mir an.
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: klaus.schauer am 22 Januar 2018, 12:02:57
Bitte geänderte Version von 10_EnOcean testen, Entwicklerversion siehe Anlage.
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: christoph.kaiser.in am 24 Januar 2018, 08:20:57
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
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: klaus.schauer am 24 Januar 2018, 09:14:15
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.
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: christoph.kaiser.in am 24 Januar 2018, 20:32:49
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

Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: christoph.kaiser.in am 25 Januar 2018, 20:50:11
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


Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: klaus.schauer am 26 Januar 2018, 06:10:42
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?
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: christoph.kaiser.in am 28 Januar 2018, 15:44:01
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
Titel: Antw:PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4096
Beitrag von: drhirn am 02 Februar 2018, 10:44:46
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.