FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: FHEm2005 am 04 November 2014, 09:35:59

Titel: [gelöst] Fehlermeldung; PERL WARNING: ... Kann mir jemand die Bedeutung erklären
Beitrag von: FHEm2005 am 04 November 2014, 09:35:59
ich erhalte jedemenge Fehlermeldungen im Logfile folgender Arten:

2014.11.04 09:28:22 1: PERL WARNING: Useless use of anonymous hash ({}) in void context at (eval 110) line 1.
2014.11.04 09:28:23 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 110) line 1.


Ich habe alle Klammern überprüft. Kann mir jemand sagen was ich jetzt machen kann? Scheint ja wohl eher eine Fehlermeldung aus dem Perl-Modul zu sein. Ich habe heute morgen bereits ein Update gemacht - die Fehlermeldung bleibt.

Gruß
Eberhard
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: betateilchen am 04 November 2014, 09:38:28
Zum 3498. Mal: Eine WARNING ist keine Fehlermeldung!

Zitat von: FHEm2005 am 04 November 2014, 09:35:59
Scheint ja wohl eher eine Fehlermeldung aus dem Perl-Modul zu sein.

Wenn man jetzt noch wüsste, von welchem perl Modul Du sprichst, könnte man Dir vielleicht auch weiterhelfen.
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: FHEm2005 am 04 November 2014, 09:45:07
Ich korrigiere den Satz:

statt:
ZitatScheint ja wohl eher eine Fehlermeldung aus dem Perl-Modul zu sein.
. ist es wohl besser den satz zu streichen. :-)

Gruß Eberhard
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: Puschel74 am 04 November 2014, 09:47:57
Hallo,

deswegen wissen wir immer noch nicht durch was dieses Warning ausgelöst wird.
Evtl. wären ja mal 2 oder 3 Zeilen mehr aus dem Logfile hilfreich(er).

Grüße
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: FHEm2005 am 04 November 2014, 10:55:19
Nach dem Update das Logfile vom restart ab:

2014.11.04 09:50:21 1: Including fhem.cfg
2014.11.04 09:50:21 3: Opening TCM310_0 device /dev/ttyAMA0
2014.11.04 09:50:21 3: Setting TCM310_0 baudrate to 57600
2014.11.04 09:50:21 3: TCM310_0 device opened
2014.11.04 09:50:21 3: Opening CUL1 device /dev/ttyACM0
2014.11.04 09:50:21 3: Setting CUL1 baudrate to 38400
2014.11.04 09:50:21 3: CUL1 device opened
2014.11.04 09:50:21 3: CUL1: Possible commands: BbCFiAZEGMKUYRTVWxxxxxxxx
2014.11.04 09:50:21 2: Switched CUL1 rfmode to HomeMatic
2014.11.04 09:50:27 3: telnetPort: port 7072 opened
2014.11.04 09:50:27 3: WEB: port 8083 opened
2014.11.04 09:50:27 3: WEBTest: port 4711 opened
2014.11.04 09:50:27 3: WEBphone: port 8084 opened
2014.11.04 09:50:27 3: WEBtablet: port 8085 opened
2014.11.04 09:50:27 2: eventTypes: loaded 1629 events from ./log/eventTypes.txt
2014.11.04 09:50:28 1: Including ./log/fhem.save
2014.11.04 09:50:32 2: TCM TCM310_0 initialized
2014.11.04 09:50:33 3: Device Hzg_Ez added to ActionDetector with 000:10 time
2014.11.04 09:50:33 3: Device Hzg_Wz1 added to ActionDetector with 000:10 time
2014.11.04 09:50:33 3: Device Hzg_Wz2 added to ActionDetector with 000:10 time
2014.11.04 09:50:34 3: Device Stecker01 added to ActionDetector with 000:10 time
2014.11.04 09:50:34 3: Device Th_Wz_Ez added to ActionDetector with 000:10 time
2014.11.04 09:50:34 1: PERL WARNING: Useless use of anonymous hash ({}) in void context at (eval 386) line 1.
2014.11.04 09:50:34 1: PERL WARNING: Useless use of anonymous hash ({}) in void context at (eval 386) line 1.
2014.11.04 09:50:34 1: PERL WARNING: Useless use of anonymous hash ({}) in void context at (eval 386) line 1.
2014.11.04 09:50:34 1: PERL WARNING: Useless use of anonymous hash ({}) in void context at (eval 386) line 1.
2014.11.04 09:50:34 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 386) line 1.
2014.11.04 09:50:34 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 386) line 1.


Der Block PERL WARNING wurde noch 9x mit der gleichen Uhrzeit geloggt.

Gruß Eberhard
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: betateilchen am 04 November 2014, 10:59:51
als ersten Schritt würde ich Dir empfehlen, das initialUsbCreate zu deaktivieren (besser: zu löschen)

Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: FHEm2005 am 04 November 2014, 11:18:57
Wo finde ich "initialUsbCreate"? In meiner fhem.cfg ist es jedenfalls nicht enthalten.

Ich komme mir im Moment ziemlich blöd vor. Stehe ich auf'm Schlauch?

Gruß Eberhard
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: betateilchen am 04 November 2014, 12:12:34
sorry, es heißt initialUsbCheck und ist ein notify, das standardmäßig in der fhem.cfg vorhanden sein sollte.

Das automatische Anlegen des TMC310_0 beim fhem-Start deutet für mich darauf hin, dass auch bei Dir dieses notify noch aktiv ist.

Da die Warnings nach dem Anlegen der HOmematic-Devices erfolgen, liegt der Verdacht nahe, dass es irgendwo daher kommt.

Mach mal bitte ein "attr global stacktrace 1" und dann ein "save config"
Danach starte fhem nochmal neu und poste die Logausgabe - dann sollte man genau sehen, was die Warnungen auslöst.
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: FHEm2005 am 04 November 2014, 12:42:43
Das initialUsbCheck habe ich gelöscht. Den stacktrace 1 eingefügt und fhem rebootet.

Ergebnis:
2014.11.04 12:30:38 1: Including fhem.cfg
2014.11.04 12:30:38 3: Opening TCM310_0 device /dev/ttyAMA0
2014.11.04 12:30:38 3: Setting TCM310_0 baudrate to 57600
2014.11.04 12:30:38 3: TCM310_0 device opened
2014.11.04 12:30:38 3: Opening CUL1 device /dev/ttyACM0
2014.11.04 12:30:38 3: Setting CUL1 baudrate to 38400
2014.11.04 12:30:38 3: CUL1 device opened
2014.11.04 12:30:38 3: CUL1: Possible commands: BbCFiAZEGMKUYRTVWxxxxxxxx
2014.11.04 12:30:38 2: Switched CUL1 rfmode to HomeMatic
2014.11.04 12:30:39 3: telnetPort: port 7072 opened
2014.11.04 12:30:39 3: WEB: port 8083 opened
2014.11.04 12:30:39 3: WEBTest: port 4711 opened
2014.11.04 12:30:39 3: WEBphone: port 8084 opened
2014.11.04 12:30:39 3: WEBtablet: port 8085 opened
2014.11.04 12:30:39 2: eventTypes: loaded 1629 events from ./log/eventTypes.txt
2014.11.04 12:30:40 1: Including ./log/fhem.save
2014.11.04 12:30:44 2: TCM TCM310_0 initialized
2014.11.04 12:30:45 3: Device Hzg_Ez added to ActionDetector with 000:10 time
2014.11.04 12:30:45 3: Device Hzg_Wz1 added to ActionDetector with 000:10 time
2014.11.04 12:30:46 3: Device Hzg_Wz2 added to ActionDetector with 000:10 time
2014.11.04 12:30:46 3: Device Stecker01 added to ActionDetector with 000:10 time
2014.11.04 12:30:46 3: Device Th_Wz_Ez added to ActionDetector with 000:10 time
2014.11.04 12:30:46 1: PERL WARNING: Useless use of anonymous hash ({}) in void context at (eval 2114) line 1.
2014.11.04 12:30:46 3: stacktrace:
2014.11.04 12:30:46 3:     main::__ANON__                      called by (eval 2114) (1)
2014.11.04 12:30:46 3:     (eval)                              called by fhem.pl (3548)
2014.11.04 12:30:46 3:     main::readingsEndUpdate             called by fhem.pl (3723)
2014.11.04 12:30:46 3:     main::readingsSingleUpdate          called by ./FHEM/10_CUL_HM.pm (6690)
2014.11.04 12:30:46 3:     main::CUL_HM_UpdtReadSingle         called by ./FHEM/10_CUL_HM.pm (5601)
2014.11.04 12:30:46 3:     main::CUL_HM_ID2PeerList            called by ./FHEM/10_CUL_HM.pm (235)
2014.11.04 12:30:46 3:     main::CUL_HM_updateConfig           called by fhem.pl (2539)
2014.11.04 12:30:46 3:     main::HandleTimeout                 called by fhem.pl (535)


Der Block ist bei beiden Warnings der gleiche Inhalt.

Gruß Eberhard

Edit:

Ich habe mal im Log des letzten Monats nachgesehen. Der Fehler trat auf nachdem ich dieses Attribute hinzugefügt hatte:


attr MGLWeather userReadings absFeuchteMG {
my $AF;;
my $dp;; 
my $temperature = ReadingsVal("MGLWeather","temp_c",0);;
my $humidity = ReadingsVal("MGLWeather","humidity",0);;
my $TK = 273.15 + $temperature;;  my $a;; 
($temperature >= 0)?{$a=7.5} : {$a=7.6};; 
my $b;; ($temperature >= 0)?{$b=237.3} : {$b=240.7};; 
my $SDD = 6.1078 * (10 ** (($a * $temperature)/($b+$temperature)));; 
my $DD = $humidity/100*$SDD;; 
$AF = 216.6869 * $DD/$TK ;; 
},
dewpointMG { 
my $dp;; 
my $temperature = ReadingsVal("MGLWeather","temp_c",0);; 
my $humidity = ReadingsVal("MGLWeather","humidity",0);;
my $TK = 273.15 + $temperature;; 
my $a;;  ($temperature >= 0)?{$a=7.5} : {$a=7.6};; 
my $b;; ($temperature >= 0)?{$b=237.3} : {$b=240.7};; 
my $SDD = 6.1078 * 10 ** (($a * $temperature)/($b+$temperature));; 
my $DD = $humidity/100*$SDD;; 
my $AF = 216.6869 * $DD/$TK ;; 
my $v = (log ($DD/6.1078))/(log(10));; 
$dp = $b * $v / ($a-$v);;  }


Ist da ein fehler drin? Rechnen und anzeigen tut er wie gewünscht. Die Zeilenumbrüche sind zur besseren Lesbarkeit eingefügt worden. Wenn ich dieses Attribut auskommentiere, ist das Warning weg.
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: FHEm2005 am 04 November 2014, 16:56:46
Inzwischen habe ich noch einiges versucht.

Ich habe das Atrribut wie oben abgegeben zweimal verwendet. Einmal bei einem device mit type weather (s.o.) und einmal bei einem device HM-TC-IT-WM-W-EU chan01 mit dem Namen Th_Wz_Ez_Weather.

Das Attribut unter MGLWeather läuft ohne Fehlermeldung. Wenn ich das Attribut unter Th_Wz_Ez_Weather aktiviere kommen die Fehlermeldungen. Deshalb hier die Definition aus der fhem.cfg:

define Th_Wz_Ez_Weather CUL_HM 2Dxxxx01
attr Th_Wz_Ez_Weather alias Wohnzimmer
attr Th_Wz_Ez_Weather model HM-TC-IT-WM-W-EU
attr Th_Wz_Ez_Weather peerIDs 29xxxx01,
attr Th_Wz_Ez_Weather stateFormat Soll-T:desired-temp,Ist-T:temperature,H:humidity,D:dewpoint
attr Th_Wz_Ez_Weather userReadings absFeuchteWz {  my $AF;;
my $dp;;
my $temperature = ReadingsVal("Th_Wz_Ez_Climate","measured-temp",0);;
my $humidity = ReadingsVal("Th_Wz_Ez_Climate","humidity",0);;
my $TK = 273.15 + $temperature;;
my $a;;
($temperature >= 0)?{$a=7.5} : {$a=7.6};;
my $b;;
($temperature >= 0)?{$b=237.3} : {$b=240.7};;
my $SDD = 6.1078 * (10 ** (($a * $temperature)/($b+$temperature)));;
my $DD = $humidity/100*$SDD;;
$AF = 216.6869 * $DD/$TK ;; },
dewpoint {  my $dp;;
my $temperature = ReadingsVal("Th_Wz_Ez_Climate","measured-temp",0);;
my $humidity = ReadingsVal("Th_Wz_Ez_Climate","humidity",0);;
my $TK = 273.15 + $temperature;;
my $a;;
($temperature >= 0)?{$a=7.5} : {$a=7.6};;
my $b;;
($temperature >= 0)?{$b=237.3} : {$b=240.7};;
my $SDD = 6.1078 * 10 ** (($a * $temperature)/($b+$temperature));;
my $DD = $humidity/100*$SDD;;
my $AF = 216.6869 * $DD/$TK;;
my $v = (log ($DD/6.1078))/(log(10));;
$dp = $b * $v / ($a-$v);;}


Auch hier sind die Umbrüche nachträglich zur besseren Lesbarkeit eingegeben worden. Der Code ist mit Notepad++ geschrieben und mit Copy/Paste in das feld für userReading eingefügt worden - NICHT direkt in die fhem.cfg.

So, und nun weiß ich nicht wie es weitergeht.

Gruß Eberhard
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: Joachim am 05 November 2014, 05:02:17
Warum nimmstdu nicht das Modul dewpoint?

Gruß Joachim
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: FHEm2005 am 05 November 2014, 06:49:53
ZitatWarum nimmstdu nicht das Modul dewpoint?

Diese Frage ist durchaus berechtigt. Da ich Anfänger bin und wenig bis fast nix Ahnung von Perl habe, arbeite ich lieber mit Dingen, die ich nachvollziehen kann. So versuche ich mich dem Thema Perl vorsichtig zu nähern. Da ein sehr ähnliches Beispiel in wiki steht, habe ich das Beispiel als Basis genommen, um den Taupunkt und die abs. Feuchte zu berechnen und anzuzeigen.

Wenn mir jemand einen Grund sagt, warum ich das so nicht machen kann/darf, habe ich etwas gelernt und werde das dewpoint Modul benutzen. So aber  können alle aus der Beseitigung dieser Fehlermeldung lernen bzw Erfahrung schöpfen.

Fassen wir mal zusammen: Wir haben ein und denselben Code, der einmal im Modul Weather und einmal im Modul CUL_HM läuft - beide Male als userReadings. Weather produziert keine Fehlermeldung und CUL_HM haut ein Warning nach dem anderen raus. Ist es vermessen zu vermuten, dass der Grund im Modul CUL_HM liegt?

Gruß Eberhard
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: FHEm2005 am 06 November 2014, 09:17:04
Bin ich jetzt mit meinem Problem auf mich selbst gestellt?  :'( :'(
Selbst wenn ich das Modul dewpoint verwenden würde, sollte der Frage nachgegangen werden, woher diese Warnings kommen. Das kann bei jeder etwas komplizierteren Berechnung wieder passieren.

Ich habe anstatt der ReadingsVal mal feste Werte verwendet. Ergebnis: Warnings bleiben im Moodul CUL_HM.

Kann ich die Warnings irgendwie unterdrücken?

@betateilchen: Was ist mit aus meinem stracktrace geworden? Kannst Du was erkennen?

Gruß Eberhard
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: FHEm2005 am 15 Dezember 2014, 07:34:51
Lleider hat sich das Problem nicht in Luft aufgelöst. Gibt es Jemand, der noch eine Idee hat?

Es muss doch möglich sein dem Programmierfehler auf die Schliche zu kommen.

Gruß Eberhard
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: Billy am 16 Dezember 2014, 08:44:40
Ich hatte bei mir die Meldung:
PERL WARNING: Useless use of anonymous hash ({}) in void context at (eval 3755) line 1.

Nachdem ich .. {`echo set myRolW_son on | nc -w 1 192.168.148.17 7072`}..
wie folgt verändert hatte
                     .. fhem(`echo set myRolW_son on | nc -w 1 192.168.148.17 7072`) ..

war die Meldung weg.

Vielleicht musst du bei dir auch irgendwo { ..... } durch fhem ( ..... ) ersetzen!

Gruß Billy
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: Bennemannc am 16 Dezember 2014, 10:11:55
Hallo,

lager doch die Berechnung mal in 99_myUtils aus. Dafür ist diese Datei eigentlich da, und da Du diesen Teil 3 mal verwendest, macht das auch Sinn.
Dem sub kannst Du dann Variabelen übergeben und mit Return die Werte als Reading zurück geben.
Vielleicht kommt dann eine differenziert Fehlermeldung oder es wird ein Fehler in 99_myUtils ausgeworfen.
Was mir bei Deiner Programmierung aufgefallen ist. Die Variabelen werden Teilweise mitten in der Berechnung angelegt. Ich kenne das nur so, das die Variabelen im Kopf - also oben alle angelegt werden.
Versuch es mal so - in 99_myUtils
##################################
sub Dewpoint_AbsFeuchte ($$) {
my ($temperature,$humidity) = @_;
my $AF;
my $dp;
my $a;
my $b;
my $TK = 273.15 + $temperature;
($temperature >= 0)?{$a=7.5} : {$a=7.6};
($temperature >= 0)?{$b=237.3} : {$b=240.7};
my $SDD = 6.1078 * (10 ** (($a * $temperature)/($b+$temperature)));
my $DD = $humidity/100*$SDD;
$AF = 216.6869 * $DD/$TK ;

my $v = (log ($DD/6.1078))/(log(10));
$dp = $b * $v / ($a-$v);
my $Out =  'Taupunkt:' . $dp . 'Feuchte: ' . $AF;
return $Out};


aufgerufen wird die Funktion auch über UserReadings {Dewpoint_AbsFeuchte (readingsVal(... Temp) , readingsVal( ... feuchte))}
Bei mir kommt da keine Fehlermeldung.

Gruß Christoph
Titel: Antw:Fehlermeldung; PERL WARNING: .... Kann mir jemand die Bedeutung erklären
Beitrag von: FHEm2005 am 15 Januar 2015, 15:28:47
Ich hatte das Thema schon aufgegeben. Das kann man/frau an meiner Reaktionszeit von 1 Monat sehen.

Ich habe also zuerst Billy's Vorschlag umgesetzt und die äußersten geschweiften Klöammern durch runde Klammern sertzt. Und siehe da - DIE FEHLERMELDUNG IST WEG!!! Niemand möge mich fragen, warum gerade hier die runde Klammer erforderlich ist.

Wenn doch irgendwann die Fehlermeldung wiederkommt, werd' ich es mit Bennemannc's Version versuchen


Allen Beteiligten meinen verbindlichen Dank!!!!

Viele Grüße
Eberhard