FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: magicteddy am 24 Januar 2018, 12:34:03

Titel: Gelöst! Cannot load module BRAVIA
Beitrag von: magicteddy am 24 Januar 2018, 12:34:03
Moin,

mit dem letzten update tauchte das o.g. Problem auf, ein reload meldet:
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 389.
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 390.
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 390.
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 391.
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 391.
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 391.


Zitatdefine WZ.SonyTV BRAVIA 192.168.19.10 60

Ŵer hat einen Tipp?

Ich habe erstmal das Backup vom 21.1.18  eingespielt sonst gerät der Haussegen in Schieflage  :o

Internals:
   CHANGED   
   CHANNELCOUNT 50
   DEF        192.168.19.10 60
   INTERVAL   60
   NAME       WZ.SonyTV
   NR         178
   STATE      absent
   TYPE       BRAVIA
   generation
   model     
   name       
   Helper:
     DBLOG:
       channel:
         logdb:
           TIME       1516793911.41188
           VALUE      -
       channelId:
         logdb:
           TIME       1516793911.41188
           VALUE      -
       currentMedia:
         logdb:
           TIME       1516793911.41188
           VALUE      -
       currentTitle:
         logdb:
           TIME       1516793911.41188
           VALUE      -
       input:
         logdb:
           TIME       1516793911.41188
           VALUE      -
       power:
         logdb:
           TIME       1516793911.41627
           VALUE      off
       presence:
         logdb:
           TIME       1516793911.41527
           VALUE      absent
       state:
         logdb:
           TIME       1516793911.41627
           VALUE      absent
   READINGS:
     2018-01-24 12:38:31   channel         -
     2018-01-24 12:38:31   channelId       -
     2018-01-24 12:38:31   currentMedia    -
     2018-01-24 12:38:31   currentTitle    -
     2018-01-24 12:38:31   input           -
     2018-01-24 12:38:31   power           off
     2018-01-24 12:38:31   presence        absent
     2018-01-24 12:38:31   state           absent
   helper:
     ADDRESS    192.168.19.10
     AVAILABLE  0
     HEADER     X-CERS-DEVICE-ID: fhem_remote
     lastInput 
     PORT:
       IRCC       80
       SERVICE    80
       UPNP       52323
     device:
Attributes:
   devStateIcon on:rc_GREEN:off off:rc_YELLOW:on absent:rc_STOP:on
   icon       it_television
   room       1.1.Wohnzimmer
   verbose    0
   webCmd     volume:channelUp:channelDown


-teddy
Titel: Antw:Cannot load module BRAVIA
Beitrag von: MadMax-FHEM am 24 Januar 2018, 12:41:48
Eventuell schon mal einen shutdown restart probiert?
(also statt "nur" reload des Moduls, wenn ich das richtig verstanden habe)

Vorher halt evtl. mal die fhem.cfg sichern...

Ansonsten ins entsprechende Unterforum (Multimedia) verschieben oder Maintainer anschreiben...

Gruß, Joachim
Titel: Antw:Cannot load module BRAVIA
Beitrag von: magicteddy am 24 Januar 2018, 12:43:05
Moin,

nee, so einfach ist nicht, shutdown restart sind selbstverständlich  8)
Ich wollte erstmal abklopfen ob der Anfängerfehler vielleicht vorm PC sitzt.

-teddy

Titel: Antw:Cannot load module BRAVIA
Beitrag von: betateilchen am 24 Januar 2018, 12:48:35
Ändere mal Zeile 389 in der aktuellen Modulversion von gestern von

              $macAddr = AttrVal( $name, "macaddr", "" );

in

              my $macAddr = AttrVal( $name, "macaddr", "" );

dann sollte sich das Modul laden lassen. Unabhängig von diesem Workaround sollte sich natürlich der Modulautor darum kümmern, den Fehler zu korrigieren.
Titel: Antw:Cannot load module BRAVIA
Beitrag von: magicteddy am 24 Januar 2018, 13:03:20
Moin und Danke

das wars!
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: exbibe am 25 Januar 2018, 00:47:45
Danke - Respekt!!!
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: Mave am 25 Januar 2018, 05:38:04
Moin zusammen,

ich habe dasselbe Problem und würde anhand dieses Beispiels gerne verstehen, was passiert ist, wie FHEM darauf reagiert und wie man das Problem lösen kann.

Wenn ich das richtig interpretiere, hat der Modulautor das 'my' vor der Variablen vergessen und das Modul eingecheckt. Nach einem Update und Restart trifft FHEM auf diesen Fehler.
Jetzt meine Verständnisfrage: trifft FHEM bei der Abarbeitung der fhem.cfg beim define auf das Problem und lädt das Modul nicht?

Wie kommt es dann zu den vielen Meldungen "define blabla first" und warum stehen die in der fhem.cfg?

Wie ist dann die genaue Vorgehensweise zur Lösung des Problems?
Ich kann entweder das Modul selbst reparieren oder auf ein Update warten, richtig?

Lädt FHEM dann automatisch das neue Modul und entfernt die Meldungen aus der fhem.cfg oder muss ich noch etwas tun?

Vielen Dank für Eure Hilfe.

Grüße Mave
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: Prof. Dr. Peter Henning am 25 Januar 2018, 08:05:45
ZitatJetzt meine Verständnisfrage:

Das ist aber mehr als eine ...

Zitat
trifft FHEM bei der Abarbeitung der fhem.cfg beim define auf das Problem und lädt das Modul nicht?

Nicht so ganz. Beim "define" wird das Modul geladen, erst dann trifft Perl (und nicht FHEM) auf den Syntaxfehler. Hierarchisch denken, wir sind hier eine Ebene tiefer ! Dieser Fehler wird dann nach oben auf die FHEM-Ebene zurückgereicht.

Zitat
Wie kommt es dann zu den vielen Meldungen "define blabla first" und warum stehen die in der fhem.cfg?

Weil Perl in dem Programm immer wieder auf die undefinierte Variable stößt und immer wieder dieselbe Meldung ausspuckt. Und die werdenalle nach oben durchgereicht - und dann als "Fehler während des Abarbeitens der fhem.cfg" notiert.

Zitat
Wie ist dann die genaue Vorgehensweise zur Lösung des Problems?
Ich kann entweder das Modul selbst reparieren oder auf ein Update warten, richtig?

Das ist immer so.

Zitat
Lädt FHEM dann automatisch das neue Modul und entfernt die Meldungen aus der fhem.cfg oder muss ich noch etwas tun?

Nix automatisch. FHEM neustarten nach dem entsprechenden Update.

LG

pah
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: Mave am 25 Januar 2018, 08:27:40
Hey pah,

super, vielen Dank.  :D

Wenn das Update mit dem "reparierten" Modul durchgelaufen ist und FHEM neu gestartet wurde, dann läuft FHEM wieder automatisch wie gewohnt? Das meinte ich mit automatisch.  ;)

Grüße Mave
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: Mave am 25 Januar 2018, 09:43:31
So, jetzt stehe ich genau vor dem Problem, dass das Modul upgedated wurde und nach einem Neustart mein Device "SonyTV" aber nicht wieder automatisch angelegt wurde.

Die Meldungen "Can't load module Bravia" und "Please define SonyTV first" stehen nachwievor in der fhem.cfg, werden aber nicht mehr ausgegeben.

Was muss ich tun, damit das Modul wieder korrekt geladen wird?

Vielen Dank.
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: Mave am 25 Januar 2018, 10:19:11
Das steht in der fhem.cfg, wird aber in der Oberfläche von FHEM nicht angezeigt.

attr global motd Messages collected while initializing FHEM:
configfile: Cannot load module BRAVIA
./log/fhem.save: Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first
Please define SonyTV first

Autosave deactivated


Das Modul scheint jetzt in Ordnung zu sein, das Device "SonyTV" wird aber nicht mehr defined.

Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: betateilchen am 25 Januar 2018, 10:36:58
als erstes solltest Du ein

attr global motd none

machen, dann das Sony TV neu anlegen und die Konfiguration abspeichern.

Und nächstes Mal, wenn Du eine Fehlermeldung beim Start von FHEM bekommst, solltest Du besser nicht auf "save" klicken, bevor Du den gefundenen und gemeldeten Fehler behoben hast.
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: betateilchen am 25 Januar 2018, 10:48:38
Zitat von: Prof. Dr. Peter Henning am 25 Januar 2018, 08:05:45
Weil Perl in dem Programm immer wieder auf die undefinierte Variable stößt und immer wieder dieselbe Meldung ausspuckt. Und die werdenalle nach oben durchgereicht - und dann als "Fehler während des Abarbeitens der fhem.cfg" notiert.

Naja, ganz so einfach ist es nicht.

Die erste Meldung "Cannot load module" kommt vom Syntaxfehler, der beim erstmaligen Laden des Moduls festgestellt wird. Danach passiert mit dem Modul und dem Code erstmal gar nichts mehr, denn wenn ein Modul nicht geladen wurde, gibt es auch keinen Code, der ausgeführt werden könnte.

Die vielen Meldungen "Please define blabla first" kommen daher, dass das genannte Device nicht angelegt werden konnte, weil das Modul nicht geladen werden kann.
Diese Meldungen treten aber nicht nur während des Abarbeitens der fhem.cfg auf, sondern auch beim Abarbeiten des stateFile.


Und wenn Du mehrere devices gleichen Typs in Deiner Konfiguration hast, die alle nicht geladen werden können, weil das Modul einen Fehler hat, dann multipliziert sich das Ganze entsprechend.

Mit "attr global motd none" kann (und sollte) man diese gesammelten Fehlermeldungen vor dem nächsten FHEM Start löschen.
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: Mave am 25 Januar 2018, 10:56:26
Zitat von: betateilchen am 25 Januar 2018, 10:36:58
als erstes solltest Du ein

attr global motd none

machen, dann das Sony TV neu anlegen und die Konfiguration abspeichern.

Und nächstes Mal, wenn Du eine Fehlermeldung beim Start von FHEM bekommst, solltest Du besser nicht auf "save" klicken, bevor Du den gefundenen und gemeldeten Fehler behoben hast.


Moin beta,

vielen Dank für Deine Hilfe.

Also war mein Fehler, dass ich irgendwann mal auf "save config" geklickt habe?
Okay, habe ich verstanden und werde ich das nächste Mal nicht mehr machen.

Ist der ursprüngliche define Befehl durch das versehentlich Speichern aus der fhem.cfg herausgeflogen, sodaß ich das device jetzt nochmal neu definieren muss?

Das verstehe ich jetzt nicht wirklich.....

Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: Mave am 25 Januar 2018, 11:00:02
Zitat von: betateilchen am 25 Januar 2018, 10:36:58
als erstes solltest Du ein

attr global motd none

machen, dann das Sony TV neu anlegen und die Konfiguration abspeichern.

Und nächstes Mal, wenn Du eine Fehlermeldung beim Start von FHEM bekommst, solltest Du besser nicht auf "save" klicken, bevor Du den gefundenen und gemeldeten Fehler behoben hast.


Achja, und warum kommt diese Meldung aus der fhem.cfg nicht mehr beim Start von FHEM?
Habe ich die durch den Save in die fhem.cfg geschrieben und damit das ursprüngliche define gelöscht?

Muss ich beim Thema "autosave" noch etwas berücksichtigen bzw. zurückstellen?

Vielen Dank.
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: betateilchen am 25 Januar 2018, 11:01:32
Zitat von: Mave am 25 Januar 2018, 10:56:26
Also war mein Fehler, dass ich irgendwann mal auf "save config" geklickt habe?
Okay, habe ich verstanden und werde ich das nächste Mal nicht mehr machen.

Ein "save config" speichert immer die aktuell laufende Konfiguration.
Wenn beim Starten von FHEM ein device nicht angelegt werden kann, dann fehlt es in der laufenden Konfiguration.
Beim nächsten "save config" wird dann eine Konfiguration gespeichert, in der dieses device fehlt.
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: Prof. Dr. Peter Henning am 25 Januar 2018, 11:14:21
ZitatFHEM versucht, alle in der Konfiguration gefundenen Attribute des nicht vorhandenen devices zu setzen, was natürlich nicht funktioniert, wenn das device fehlt.
    In einem zweiten Schritt versucht FHEM, alle im stateFile gefundenen readings zu allen devices wieder herzustellen, was auch nicht funktioniert, wenn ein device fehlt.
    Für jedes erfolglose Setzen eines Attributes oder eines readings wird eine Fehlermeldung protokolliert, die am Ende des FHEM Starts im globalen Attribut "motd" stehen und am Frontend ausgegeben werden.

Udo, so ist es aber auch nicht. Die weiteren Fehlermeldungen (im ersten Post des Threads) sind ja keine Fehlermeldungen von FHEM wegen des fehlenden Devices. Sondern Meldungen des Perl-Syntaxcheckers, der bei jedem weiteren Versuch, ein Attribut zu setzen, erneut den Code des Moduls ausführen will.

LG

pah
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: betateilchen am 25 Januar 2018, 13:22:50
Peter, Du irrst Dich. Die sechs Fehlermeldungen im ersten Post entstehen alle EINMALIG beim Laden des Moduls, das erkennt man daran, dass die Meldungen aus verschiedenen Zeilen stammen.


Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 389.
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 390.
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 390.
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 391.
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 391.
Global symbol "$macAddr" requires explicit package name (did you forget to declare "my $macAddr"?) at ./FHEM/70_BRAVIA.pm line 391.


In den Zeilen 388-392 steht folgendes:


388            elsif ( $cmd eq "WOL" ) {
389              $macAddr = AttrVal( $name, "macaddr", "" );
390             $macAddr = ReadingsVal( $name, "macAddr", "") if ($macAddr eq "");
391             BRAVIA_wake( $name, $macAddr ) if ( $macAddr ne "" && $macAddr ne "-" );
392           }


dabei kommt $macAddr genau sechs mal in drei unterschiedlichen Zeilen vor.
Und genau so viele Fehlermeldungen findest Du im Eingangsbeitrag.
Mit genau drei unterschiedlichen Zeilenangaben

389 = $macAddr kommt einmal vor
390 = $macAddr kommt zweimal vor
391 = $macAddr kommt dreimal vor

Und diese Fehlermeldungen treten ein einziges Mal auf.

Zitat von: Prof. Dr. Peter Henning am 25 Januar 2018, 11:14:21
Sondern Meldungen des Perl-Syntaxcheckers, der bei jedem weiteren Versuch, ein Attribut zu setzen, erneut den Code des Moduls ausführen will.

Nochmal nein. Es gibt überhaupt keine Versuche, irgendeinen Code aus dem Modul auszuführen.
Da das Modul nicht geladen werden konnte, gibt es auch keine modulspezifische ATTR Funktion, die fhem.pl aufrufen könnte.

Und die Meldungen "Please define..." kommen alle aus fhem.pl (genauer: aus CommandAttr()), da beim Versuch, ein Attribut zu setzen, das angegebene Device nicht gefunden werden konnte, und das ist völlig modul- und TYPE-unabhängig.
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: Mave am 25 Januar 2018, 13:50:52
Hier kann man wirklich was lernen......
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: betateilchen am 25 Januar 2018, 13:51:34
Dafür ist ein Forum schließlich da :)
Titel: Antw:Gelöst! Cannot load module BRAVIA
Beitrag von: Prof. Dr. Peter Henning am 26 Januar 2018, 08:04:09
Ich sags ja nur ungerne, aber diesmal hast Du Recht. Hätte mal einen Blick in den Code werfen sollen :'(

LG

pah