Hauptmenü

Syntaxfehler

Begonnen von Harald, 01 August 2013, 13:29:27

Vorheriges Thema - Nächstes Thema

Harald

Hallo zusammen,

Wo ist hier der Fehler?

Log 3, "Max: $shash->{NAME} neu5: $measuredTemperature gespeichert: $var desTemp: $des istneu: $shash->{newTemp}";
Use of uninitialized value in concatenation (.) or string at ./FHEM/10_MAX.pm line 970

Wenn ich das so ändere, ist die Meldung weg:

Log 3, "Max: $shash->{NAME} neu5: $measuredTemperature gespeichert: $var desTemp: $des istneu: ";#$shash->{newTemp}";



Viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

betateilchen

im Wert $shash->{newTemp} steht vermutlich nix drin oder der Wert existiert gar nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Harald

Danke betateilchen für die schnelle Antwort. So etwas habe ich schon befürchtet.

Ist denn so eine Zuweisung richtig oder kann man das besser machen?

$shash->{newTemp} = 0 if($measuredTemperature eq "" or $measuredTemperature == 0);

Viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

betateilchen

sollte grundsätzlich so funktionieren, obwohl ich es, je nachdem wie das in Deiner Anwendung auftreten kann, anders lösen würde (z.B. mit undef und einer Abfrage if(defined(...)) umsetzen würde. Um das zu beurteilen, müsste man aber mehr Sourcecode aus dem umgebenden Kontext kennen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Harald

Hier mal den entsprechenden Auszug:960 # neu
961 # Modus wurde durch einen manuellen Eingriff während xScan aktiv ist geändert
962 readingsBulkUpdate($shash, "xScanSet", 0) if ((MAX_ReadingsVal($shash, "mode") eq MAX_ReadingsVal($shash, "xScanMode")) and MAX_ReadingsVal($shash, "xScanSet") eq 1);
963
964 # nur übernehmen wenn Isttemperatur wieder 0 war oder eine andere Isttemperatur gesendet wird als die schon gespeicherte
965 $shash->{newTemp} = 0 if($measuredTemperature eq "" or $measuredTemperature == 0);
966 Log 3, "Max: $shash->{NAME} new4: $measuredTemperature gespeichert: $var desTemp: $des istneu: $shash->{newTemp}";
967
968 my $temp = $measuredTemperature;
969 if ((($temp ne "") or ($temp != 0)) and (($temp != $var) or ($shash->{newTemp} == 0))) {
970 Log 3, "Max: $shash->{NAME} neu5: $measuredTemperature gespeichert: $var desTemp: $des istneu: $shash->{newTemp}";
971 readingsBulkUpdate($shash, "temperature", sprintf("%2.1f",$measuredTemperature));
972 # neue Temperatur empfangen
973 $shash->{newTemp} = 1;
974 # bei scanTemp Modus 2 und scanTempSet auf 1 wird der Thermostat beim Empfang einer neuen Temperatur
975 # sofort wieder in seinen ursprünglichen Modus zurück gesetzt !

Für mich sieht das eigentlich richtig aus. Oder gibt es da Fehler, die für dieseUse of uninitialized numeric eq (==) at ./FHEM/10_MAX.pm line 969
Use of uninitialized value in concatenation (.) or string at ./FHEM/10_MAX.pm line 970
Meldungen sorgen?
Wenn ich $shash->{newTemp} auskommentiere, sind die Meldungen weg.

Viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

betateilchen

Welche Version von dem Modul verwendest Du eigentlich? Bei mir ist die aktuelle diese hier:

##############################################
# $Id: 10_MAX.pm 3448 2013-07-18 22:25:31Z mgehre $
# Written by Matthias Gehre, M.Gehre@gmx.de, 2012-2013
#


Bei mir ist die letzte Coding-Zeile in 10_MAX.pm die Zeile 816.

Die Ursache für die beiden von Dir genannten Meldungen dürften vor dieser Codingstelle auftreten.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Harald

Hallo betateilchen,

ich versuche, das Modul von Jürgen hin zu bekommen. Er ist leider für längere Zeit verhindert, daran weiter zu arbeiten. Da ich das gerne nutzen möchte, versuche ich zu finden, wo die in telnet gezeigten Fehlermeldungen herrühren und die Ursachen zu finden. Ein paar Erfolge habe ich schon zu verzeichnen. Aber nun übersteigt das meinen derzeitigen Horizont in Perl. Deshalb habe ich mich an's Forum gewendet und Du hast Dich dankenswerter Weise gemeldet. Ich denke, dass ich bei der Ursachenforschung sicherlich auch mit Perl etwas vertrauter werde.

Danke jedenfalls für den Hinweis. Da muss ich mal weiter suchen. Allerdings gibt es $Shash->{newTemp} nur an dieser Stelle im Modul. Habe es mit Notepad++ mehrfach durchsucht und nichts weiter gefunden. Und, wie schon geschrieben, wenn ich $shash->{newTemp} auskommentiere, sind die Meldungen weg. Es muss m.E. damit zusammen hängen, oder?

Besten Dank nochmal für Deine Bemühungen und viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

betateilchen

mach mal in Zeile 963 $shash->{newTemp} = -1; und teste nochmal.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Harald

wenn ich das mache, erhalte ich jede Menge Meldungen bez. div. Subroutinen in 10_MAX.pm, egal, ob ich -1, 1 oder 2 einsetzt.

Vertausche ich 1 und 0 in Zele 965 und 973, sehe ich keine Änderung.
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Harald

Hm, wie kann es sein, dass ich solche Meldungen im Logfile finde2013.08.03 10:43:05 0: syntax error at ./FHEM/10_MAX.pm line 965, near "$shash"
Global symbol "$measuredTemperature" requires explicit package name at ./FHEM/10_MAX.pm line 965.
Global symbol "$measuredTemperature" requires explicit package name at ./FHEM/10_MAX.pm line 965.
Global symbol "$measuredTemperature" requires explicit package name at ./FHEM/10_MAX.pm line 966.
Global symbol "$var" requires explicit package name at ./FHEM/10_MAX.pm line 966.
Global symbol "$des" requires explicit package name at ./FHEM/10_MAX.pm line 966.
wenn ich in Zeile 963  $shash->{newTemp} = 1  eingebe.
Damit setze ich doch explizit die den Wert von $shash->{newTemp} auf 1, oder? In der nachfolgenden Zeile
$shash->{newTemp} = 0 if($measuredTemperature eq "" or $measuredTemperature == 0);
wird der Wert doch auf 0 gesetzt, wenn keine Temperatur vom Thermostat gelesen wurde.

Viele Grüße

Harald

Ich hab's! Es fehlt das Semicolon am Ende -> $shash->{newTemp} = 1;
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

betateilchen

erstens habe ich geschrieben, Du sollst -1 eintragen und nicht 1

zweitens hast Du vermutlich das Semikolon am Ende der neu eingetragenen Zeile vergessen.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Harald

Hallo betateilchen,

entschuldige bitte, aber ich Trottel hatte, wie ich ja schon schrieb, das Semikolon vergessen. Ich habe erstmal $shash->{newTemp} = 1 (oder auch -1, wie Du vorschlugst) in Zeile 930 (nicht 936, weil davor noch einige Logausgaben vorhanden sind) platziert. Damit sind die diesbezüglichen Meldungen eliminiert und es läuft soweit. Im Log sieht es auch ganz gut aus.

Nun habe ich noch ein Problem, was möglicherweise die Ursache, dass $shash{newTemp} nicht richtig gesetzt wird, sein könnte.

Ab Zeile 968 steht

my $temp = $measuredTemperature;
if (($temp ne "" or $temp != 0) and (($shash->{newTemp} == 0) or ($temp != $var))) {
Log 3, "Max:$shash->{NAME} neu5:$measuredTemperature gespeichert:$var desTemp:$des Mode:$mode temp:$temp istneu:$shash->{newTemp}";
readingsBulkUpdate($shash, "temperature", sprintf("%2.1f",$measuredTemperature));
# neue Temperatur empfangen
$shash->{newTemp} = 1;
und die Fehlermeldung in Telnet lautet

Argument "" isn't numeric in numeric ne (!=) at ./FHEM/10_MAX.pm line 969

Ist es nicht so, dass wenn ein Syntaxfehler auftritt, die Funktion nicht weiter bearbeitet wird?
Wenn das so ist, wird $shash{newTemp} nicht auf 1 gesetzt?

Viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

betateilchen

mach das mal raus: or $temp != 0

denn sie wissen nicht, was sie tun...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Harald

Besten Dank, hab' ich gemacht und die Fehlermeldung ist weg!

Dann kann ich auf die Suche nach den Ursachen der anderen Fehlermeldungen gehen. Ich glaube, die sind schwieriger zu finden, da sie sich auf Bereiche beziehen, die Jürgen nicht programiert hat. Ich vermute, dass da falsche Parameter übergeben werden - aber wo? Vielleicht finde ich ja was.

Ist meine Annahme bez. der Abarbeitung von Perlcodes richtig, dass die Sequenz bei Syntaxfehler nicht bearbeitet wird?

Entschuldige die dumme Frage (Anfänger halt) was ist an (..... or $temp != 0) denn falsch?

Vielen Dank für die Hilfe und viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Harald

Hallo betateilchen,

ich würde mich sehr freuen, wenn Du mir die beiden Fragen von gestern beantworten könntest. Ich würde gerne verstehen, was und warum das nicht geklappt hat.

Herzlichen Dank im Voaus und schönen Sonntag noch

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus