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
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
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
Ä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.
Moin und Danke
das wars!
Danke - Respekt!!!
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
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
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
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.
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.
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.
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.
- FHEM 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.
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.
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.....
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.
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.
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
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.
Hier kann man wirklich was lernen......
Dafür ist ein Forum schließlich da :)
Ich sags ja nur ungerne, aber diesmal hast Du Recht. Hätte mal einen Blick in den Code werfen sollen :'(
LG
pah