FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: BenMarloe am 16 Juli 2015, 22:42:53

Titel: Debuggen mit FHEM..
Beitrag von: BenMarloe am 16 Juli 2015, 22:42:53
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.
Titel: Antw:Debuggen mit FHEM..
Beitrag von: JoWiemann am 16 Juli 2015, 23:02:08
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
Titel: Antw:Debuggen mit FHEM..
Beitrag von: BenMarloe am 16 Juli 2015, 23:38:44
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?
Titel: Antw:Debuggen mit FHEM..
Beitrag von: franky08 am 16 Juli 2015, 23:55:45
Nur mal so Pearl ist ein Versandhandel, du meinst Perl, ist ne Programmiersprache  ;)

VG
Frank
Titel: Antw:Debuggen mit FHEM..
Beitrag von: Wzut am 17 Juli 2015, 09:04:15
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 :)
Titel: Antw:Debuggen mit FHEM..
Beitrag von: Mario67 am 17 Juli 2015, 09:47:29
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
Titel: Antw:Debuggen mit FHEM..
Beitrag von: BenMarloe am 25 Juli 2015, 20:20:54
Welchen Perl Interpreter verwendest Du?
Titel: Antw:Debuggen mit FHEM..
Beitrag von: Mario67 am 25 Juli 2015, 22:54:31
Unter Windows:  Strawberry Perl http://strawberryperl.com/ (http://strawberryperl.com/)

Grüße,
Mario
Titel: Antw:Debuggen mit FHEM..
Beitrag von: AHA1805 am 26 Juli 2015, 01:31:06
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
Titel: Antw:Debuggen mit FHEM..
Beitrag von: fiedel am 26 Juli 2015, 09:36:26
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.
Titel: Antw:Debuggen mit FHEM..
Beitrag von: Hollo am 26 Juli 2015, 14:54:17
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)


Titel: Antw:Debuggen mit FHEM..
Beitrag von: BenMarloe am 26 Juli 2015, 15:35:13
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!
Titel: Antw:Debuggen mit FHEM..
Beitrag von: MCh76 am 14 Februar 2018, 21:13:02
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----------------";
}
Titel: Antw:Debuggen mit FHEM..
Beitrag von: Wzut am 14 Februar 2018, 21:24:42
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.