FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: drobskind am 08 September 2017, 20:35:19

Titel: [gelöst] Perl Variablen plötzlich defekt?
Beitrag von: drobskind am 08 September 2017, 20:35:19
Hallo,
einige meiner notifys funktionieren seit einiger Zeit plötzlich nicht mehr.  :(

Ich kann mir das gerade nicht wirklich erklären und finde auch keine Lösung.
Somit habe ich einen ganz einfaches notify erstellt, welches aber auch nicht funktioniert:


11110_C:.* {
my $AZ = "Hugo";
{Log 1, $AZ}
};


Ergibt folgendes Ergebnis im LOG:
2017.09.08 20:33:41 1: ERROR evaluating my $EVENT='off';my $TYPE='dummy';my $SELF='testnotify';my $NAME='11110_C';my $EVTPART0='off';{Log 1, $AZ}
}: Global symbol "$AZ" requires explicit package name at (eval 254169) line 1.
Unmatched right curly bracket at (eval 254169) line 2, at end of line
syntax error at (eval 254169) line 2, near "}
}"


jetzt fühle ich mich echt blöd  :o, weil soviel kann man ja bei dem bisschen Quellcode nicht falsch machen. Zudem es bis vor einigen Wochen noch lief...

Bitte um Hilfe.
Danke


->> Lösung: ich hatte ein unnötiges Semikolon ";" hinter der letzen geschweiften Klammer "}"
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: viegener am 08 September 2017, 20:51:46
Lass doch mal die inneren geschweiften Klammern weg
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: drobskind am 08 September 2017, 21:14:26
Hallo Viegener,

danke, somit ist jetzt schon mal die Fehlermeldung weg.
Im Log wird mir dennoch nicht der Wert der Variablen ausgegeben.
Beim Suchen habe ich einen Thread gefunden indem erwähnt wird, dass "Log" veraltet ist.
Ist es eventuell schon heraus gefallen und muss nun ersetzt werden?
Wenn ja, wie kann ich jetzt aus einem perl ins fhem log schreiben?

Danke
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 08 September 2017, 21:33:33
Log3(undef, 1, "Hallo")
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: drobskind am 08 September 2017, 21:50:56
Hallo CoolTux,

danke für den Hinweis. Dann werde ich mal auf Log3 umstellen. Gibt es dazu auch eine Doku? Habe gelesen, das die 1 für das loglevel/verbose steht. Würde gern genauer wissen, wie ich es sinnvoll nutze.
Eine Reine Logausgabe hat in meinem notify nun funktioniert.
Sobald ich die Variable dazu deklariert habe ging wieder nichts mehr.
Nachdem ich nun hinter jeden Befehl 2 Semikolon geschrieben habe funktioniert er plötzlich.
Ich verstehe nur nicht, warum es früher ohne diese / bzw mit einem Semikolon ging.

So tuts jetzt auch mit dem "alten" Log 1:

11110_C:.* {
my $VAR = "Hugo";;
Log3(undef, 1, "Hallo".$VAR);;
Log 1, "Hallo".$VAR;;
};


Log:
2017.09.08 21:47:21 1: HalloHugo
2017.09.08 21:47:21 1: HalloHugo
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 08 September 2017, 21:57:41
Kann es sein das Du direkt in die fhem.cfg schreibst?
Es gibt im Wiki ein Developer Guide
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: viegener am 08 September 2017, 22:01:15
Das doppelte Semikolon ist in der fhem.cfg oder bei der Definition über die FHEM-Komanndozeile nötig. Im Editor für notifys und in der Anzeige wird nur ein Semikolon verwendet. Aus Deinem Post ist aber nicht klar, von wo Du den Text kopiert hast / einträgst?
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: drobskind am 08 September 2017, 22:01:59
Hallo CoolTux,

in der fhem.cfg wird sowas normalerweise mit doppelten Semikolon angezeigt und zusätzlich einem Backslash. Das habe ich auch schon gesehen, somit kann ich nachvollziehen, dass du das denkst.
Aber nein.
Ich schreibe es in das Notify. Indem ich auf "DEF" klicke und dann in die sich öffnene Textbox schreibe. Anschließend bestätige ich das mit "modify <notifiyname>"

Deswegen bin ich ja auch so verwirrt  :o
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: drobskind am 08 September 2017, 22:03:21
Lustigerweise steht es in der fhem.cfg nun mit 4x Semikolon  ;D
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 08 September 2017, 22:05:21
Interessant. Ich werde das morgen mal auf meinem Testsystem nachstellen. Erklären kann ich es mir nicht.

Und wenn du my $VAR Mal direkt nach dem ersten { schreibst? Nur so eine Idee
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: drobskind am 08 September 2017, 22:12:05
Du meinst so? -> funktioniert nicht mehr.
11110_C:.* {my $VAR = "Hugo";
Log3(undef, 1, "Hallo".$VAR);
Log 1, "Hallo".$VAR;
};


So tut es noch (2x ; ), aber das ist ja nicht das Ziel:
11110_C:.* {my $VAR = "Hugo";;
Log3(undef, 1, "Hallo".$VAR);;
Log 1, "Hallo".$VAR;;
};
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: drobskind am 08 September 2017, 22:14:52
Hier noch ein Auszug mit VERBOSE = 5:
2017.09.08 22:13:50 3: n_Licht_11110_C_off return value: -1
2017.09.08 22:13:50 5: Cmd: >{my $VAR = "Hugo"<
2017.09.08 22:13:50 5: Cmd: >Log3(undef, 1, "Hallo".$VAR)<
2017.09.08 22:13:50 5: Cmd: >Log 1, "Hallo".$VAR<
2017.09.08 22:13:50 5: AnalyzeCommand: trying Log2Syslog for Log
2017.09.08 22:13:50 5: Cmd: >}<
2017.09.08 22:13:50 5: End notify loop for 11110_C



Und um auf Nummer sicher zu gehen, habe ich gerade nochmal "update" ausgeführt. Das habe ich auch bereits gestern getan. Geändert hat dies aber auch nichts.
Kann es sein, dass auf meinem Raspi ein perl Paket fehlt/ein update benötigt? ("sudo apt-get update" UND "sudo apt-get upgrade" habe ich gestern aber auch bereits ausgeführt.)

Was mir gerade noch in den Sinn kommt:
kann es sein, dass durch ein anderes notify, at oder doif ein "Fehler" in der fhem.cfg entstanden ist, der sich auf andere (korrekte) notify negativ auswirkt?
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 08 September 2017, 22:23:23
Kann ich nicht glauben, ist alles in FHEM. Ich Versuch morgen mal zu testen.
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: drobskind am 08 September 2017, 22:26:58
Hallo CoolTux,

danke ich würde mich freuen wenn du dir das morgen anschaust. Danke!

Übrigens ALLES GUTE ZU DEINEM 10000 Post!!!! *party*
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 08 September 2017, 22:30:32
Oh danke. Sehe gerade sind schon 10002. Man wie die Zeit vergeht.
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: viegener am 09 September 2017, 10:22:04
Es ist zwar ein interessanter Effekt mit den doppelten Semikolons, aber das eigentliche Problem liegt in dem abschliessenden Semikolon nach der geschweiften Klammer. Wenn Du das weglässt, dann sollte es funktionieren (auch mit einfachen Semikolons im modify).

Vermutung: Der notify erkennt das ganze Konstrukt nicht mehr als perl-konstrukt und versucht die einzelnen Teile als FHEM-Kommandos auszuführen.

Im Prinzip ist es vermutlich richtig, dass es so nicht richtig funktioniert, denn das Semikolon am Ende kündigt ja einen weiteren Befehl an, der aber nicht da ist. Trotzdem ist der Effekt überraschend
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 09 September 2017, 10:33:38
Stimmt. Es liegt in der Tat am Semikolon nach der geschweiften Klammer.
Kleiner Fehler große Wirkung. Darauf habe ich so gar nicht geachtet.
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: viegener am 09 September 2017, 10:44:18
Habe gerade mal in fhem.pl geschaut - ja perl wird nur ausgeführt wenn der Ausdruck am Anfang ein { hat und genau am Ende mit } beendet wird (abzüglich white space).

Warum es mit doppeltem ; geht ist mir trotzdem unklar und ich habe auch so keine Erklärung gefunden, kann es aber nachvollziehen. 
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 09 September 2017, 11:14:28
Magst Du eine Zusammenfassung für Rudi schreiben oder soll ich? Was er dann daraus macht ist ja seine Sache, aber so haben wir das mal gemeldet
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: viegener am 09 September 2017, 11:33:04
Ich hatte das schon überlegt, aber es erscheint mir erstmal nicht als Fehler - Die Definition mit einem ; am Ende ist inkorrekt. Das der notify das schluckt finde ich generell auch keinen Fehler, eher etwas problematisch, weil auch wir beide nicht direkt draufgekommen sind.

Das es mit den 2 Semikolons geht ist in diesem Sinne auch kein Fehler (allerdinga auch nicht wirklich ein Feature)

Siehst Du das anders, oder ging es mehr darum das Verhalten für Rudi im Dev-Forum zu dokumentieren und er kann dann entscheiden ob er etwas ändern will? Das kann ich gerne machen.
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 09 September 2017, 11:45:06
Ich hatte es wenn dann dokumentiert. Rudi kann dann gerne entscheiden. Was sagst dazu?
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: viegener am 09 September 2017, 11:45:55
Hab mal einen Eintrag im Dev-Forum erstellt:
https://forum.fhem.de/index.php/topic,76418.0.html (https://forum.fhem.de/index.php/topic,76418.0.html)

Passt das so?
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 09 September 2017, 12:10:23
Super. Vielen Dank. Rudi hat ja auch schon was dazu geschrieben.


Grüße
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: betateilchen am 09 September 2017, 12:13:03
ich finde ja den Threadtitel total geil...

ZitatPerl Variablen plötzlich defekt

8)
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: drobskind am 09 September 2017, 13:07:20
Hallo Zusammen,

:o nun bin ich restlos verwirrt. Ihr schreibt dass es sich nicht um einen Fehler handelt und eigentlich funktionieren müsste. Aber das würde doch bedeuten, dass an meinem Codeschnipsel was falsch ist.
Darf innerhalb der {} Klammer gar kein ; Semikolon vorkommen, oder verstehe ich das falsch?
Weil wenn ich die weglasse hat wir WEBFHEM immer eine Fehlermeldung präsentiert beim klick auf "modify".

Bin für einen Tipp echt dankbar  ;)

Gruß
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 09 September 2017, 13:16:14
Zitat von: drobskind am 09 September 2017, 13:07:20
Hallo Zusammen,

:o nun bin ich restlos verwirrt. Ihr schreibt dass es sich nicht um einen Fehler handelt und eigentlich funktionieren müsste. Aber das würde doch bedeuten, dass an meinem Codeschnipsel was falsch ist.
Darf innerhalb der {} Klammer gar kein ; Semikolon vorkommen, oder verstehe ich das falsch?
Weil wenn ich die weglasse hat wir WEBFHEM immer eine Fehlermeldung präsentiert beim klick auf "modify".

Bin für einen Tipp echt dankbar  ;)

Gruß

Innerhalb der Klammern schon, nur nicht ausserhalb. Schau Dir mal deinen Code an

{
};

Ist falsch
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: drobskind am 09 September 2017, 14:19:15
Hallo,

mist, wieder so eine Kleinigkeit, die einen verzweifeln lässt.  ::)

Vielen Dank für die Hilfe.
Jetzt funktioniert es.

Vermutlich habe ich dann irgendwann mal selber das Semikolon am ende eingefügt.
Weil laut euren Aussagen, kann es so ja wirklich nie funktioniert haben.

Danke danke danke!

Gruß
drobs
Titel: Antw:Perl Variablen plötzlich defekt?
Beitrag von: CoolTux am 09 September 2017, 14:22:47
Gut. Können wir also abschließen.
Oder kurz gesagt

Der Drops ist gelutscht  ;D