Liebe Gemeinde,
das ist jezt mein dritter Abend mit "notify" in FHEM.
Ich habe bisher leider keine Möglichkeit gefunden zu tracen oder auch nur den Syntax zu prüfen.
Meine Versuche mit notepad++ von hier (http://forum.fhem.de/index.php?topic=32069.0) sind leider nicht erschöpfend was meine Syntaxfehler angeht.
Mein notify
WZ_Testschalter:.*
{
Log 1, "Hello";
if (value($EVENT) eq "BI") {
{fhem ("set EG_WZK_LED AI")};
}
elseif (value($EVENT) eq "B0") {
{fhem ("set EG_WZK_LED AO")};
}
};
geht nicht und ich habe keine Ahnung warum.
Das Log sagt:
Unknown command }
}, try help.
Wie kann man solche Scripts debuggen?
Gibt es eine Möglichkeit der Ausgabe? Geht das mit "Log 1". Ich habe das aus der Command Reference (http://command%20reference%20fhem.de/commandref.html#notify), dem Syntax nach ist es ein Pearl Befehl, aber ich habe keinen solchen Pearl Befehl gefunden log steht eigentlich für den natürlichen Logarithmus einer Zahl. Zumindest ist das hier (http://wiki.selfhtml.org/wiki/Perl/Funktionen_f%C3%BCr_Berechnungen#log_-_nat.C3.BCrlichen_Logarithmus_einer_Zahl_ermitteln)so beschrieben.
Ja und ich habe die FHEM-Übersicht gelesen und in der Command Reference (http://command%20reference%20fhem.de/commandref.html#notify) gesucht.
Bitte! Ich brauche Starthilfe.
Hallo Ben?!,
zunächst heißt elseif in Perl elsif. Dann sind da ein paar { } zu viel. Probier mal folgendes:
WZ_Testschalter:.* {
Log 1, "Hello";
if ($EVENT eq "BI") {
fhem ("set EG_WZK_LED AI");
}
elsif ($EVENT eq "B0") {
fhem ("set EG_WZK_LED AO");
}
}
Bitte so ins Def kopieren.
Grüße Jörg
Großartig. Geht. Vielen Dank!!
Ich habe also schon mal zweierlei gelernt
1) FHEM ist hier ein Pearl-Befehl und wird auch in der gleichen Syntax geschrieben - gut!
2) $EVENT ist ein Umgebungsvariable und braucht nicht mit value() ausgewertet werden
Ich bin damit meinem Ziel einen entscheidenden Schritt näher.
Verbleibt nur noch die Frage nach dem Debugger/Tracer/IDE.
Gibt es wenigstens eine Möglichkeit das Log aktuell lesen ohne jedesmal zu klicken?
Nur mal so Pearl ist ein Versandhandel, du meinst Perl, ist ne Programmiersprache ;)
VG
Frank
Zitat von: BenMarloe am 16 Juli 2015, 23:38:44
Gibt es wenigstens eine Möglichkeit das Log aktuell lesen ohne jedesmal zu klicken?
Also ich mache das bei meinen Modulentwicklungen immer so :
Zweites Konsole Fenster auf und dort lasse ich mittels "tail -f /pfad/Name-der-FHEM-Log-Datei" die Ausgabe ständig laufen. Muss ich die Flut eingrenzen kommt halt noch ein "| grep <Filter>" dran :)
Was bei mir die Frustrate stets senkt ist das Auslagern von PERL-Fragmenten, welche eben keine Einzeiler mehr sind, in 99_myUtils.pm (nicht neu..).
Dabei bin ich dazu übergegangen, die Methoden thematisch in Module zu sortieren (99_myUtils<Thema>.pm, z.B. 99_myUtilsPool.pm).
Dadurch entfallen, viele Fehlermöglichkeiten für Syntaxfehler und die Wiederverwendung von Code wird erleichtert (man macht sich mehr Gedanken ...).
Außerdem habe ich so, die Möglichkeit einzelne Methoden vorab im PERL-Interpreter zu testen. Das ist funktional natürlich oft eingeschränkt. Manchmal ist es möglich einfache Stubs um den Aufruf zu legen.
Gruß,
Mario
Welchen Perl Interpreter verwendest Du?
Unter Windows: Strawberry Perl http://strawberryperl.com/ (http://strawberryperl.com/)
Grüße,
Mario
Zitat von: Wzut am 17 Juli 2015, 09:04:15
Also ich mache das bei meinen Modulentwicklungen immer so :
Zweites Konsole Fenster auf und dort lasse ich mittels "tail -f /pfad/Name-der-FHEM-Log-Datei" die Ausgabe ständig laufen. Muss ich die Flut eingrenzen kommt halt noch ein "| grep <Filter>" dran :)
Cool ...
und schon wieder was gelernt :-)
... ich habe das auch immer mit Reload der Logdatei gemacht.
Gruß und Danke
Hannes
Sinnvoll ist auch den Editor "Notepad++" zu benutzen. Da kannst du als Sprache "Perl" einstellen und bekommst z.B. Klammerungsfehler angezeigt. Anschließend kopierst du den Code in FHEM.
Zitat von: BenMarloe am 16 Juli 2015, 22:42:53
...Ich habe bisher leider keine Möglichkeit gefunden zu tracen oder auch nur den Syntax zu prüfen...
Du kannst auch für den internen Editor eine übersichtlichere Darstellung mit Syntax-Hervorhebung aktivieren.
http://www.fhemwiki.de/wiki/Konfiguration#Integrierter_Editor (http://www.fhemwiki.de/wiki/Konfiguration#Integrierter_Editor)
Soll es doch Notepad++ sein, hilft auch hier die "FHEM-Erweiterung".
http://www.fhemwiki.de/wiki/Syntax_Highlighting_bei_externen_Editoren (http://www.fhemwiki.de/wiki/Syntax_Highlighting_bei_externen_Editoren)
Sehr gut!
Syntaxhighlighting und debugging mit TAIL machen das programmieren doch wesentlich einfacher für mich!
Vielen Dank!
Das sollte auf alle Fälle in die Hilfe für Einsteiger!
das Thema ist zwar schon älter, aber ich dachte ich trage noch was dazu bei.
Ich habe eine kleine Hilfsfunction geschrieben, die ich in die ich in meine 99_myUtils.pm aufgenommen habe.
Zweck: Ich möchte die Inhalte eines Arrays ins Log schreiben um die Inhalte auswerten zu können bzw. zu prüfen ob dieser ggf. leer ist.
Vielleicht hilft es ja dem einen oder anderen.
Grüße Chris
sub array2log($){
my @subarray=@{$_[0]};
Log 1, "----------------Start of Array Logging----------------";
if ($#subarray == -1) {
Log 1, "Array is empty!";
}
else {
my $i=0;
my $to = @subarray - 1;
until($i == $to){
Log 1, join(':', 'ArrayPos['.$i.']',$subarray[$i],);
$i++;
}
}
Log 1, "----------------End of Array Logging----------------";
}
Tipp :
schau dir mal Data::Dumper an , das haben viele Autoren zwar auskommentiert noch in ihren Modulen
Dumper($irgenddwas) zerlegt perfekt fast alles in nur einer Zeile.