Hauptmenü

Debuggen mit FHEM..

Begonnen von BenMarloe, 16 Juli 2015, 22:42:53

Vorheriges Thema - Nächstes Thema

BenMarloe

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 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, 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 so beschrieben.

Ja und ich habe die FHEM-Übersicht gelesen und in der Command Reference gesucht.

Bitte! Ich brauche Starthilfe.
Alles ist kompliziert - bis man es verstanden hat
Fhem auf Raspberry 2 B
EnOcean / Homematic / Eigenbau / ABB 23 / SolarEdge SE10k

JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

BenMarloe

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?
Alles ist kompliziert - bis man es verstanden hat
Fhem auf Raspberry 2 B
EnOcean / Homematic / Eigenbau / ABB 23 / SolarEdge SE10k

franky08

Nur mal so Pearl ist ein Versandhandel, du meinst Perl, ist ne Programmiersprache  ;)

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

Wzut

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 :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Mario67

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
FHEM auf Raspberry Pi 4 mit CUL868, WMBUS,
FS20 ST, FS20 AS4-3, FS20 SU-2, FS20 DF, 1-Wire + RS-232: AB Electronics Com Pi RS232, Brandmelder + Fenster: AB Electronics IO Pi 32
BUDERUS GB142 über EMS/AVR-NET-IO, WESTAFLEX WAC250 über RS232, MySensors
mit fhem.cfg & includes glücklich

BenMarloe

Welchen Perl Interpreter verwendest Du?
Alles ist kompliziert - bis man es verstanden hat
Fhem auf Raspberry 2 B
EnOcean / Homematic / Eigenbau / ABB 23 / SolarEdge SE10k

Mario67

Unter Windows:  Strawberry Perl http://strawberryperl.com/

Grüße,
Mario
FHEM auf Raspberry Pi 4 mit CUL868, WMBUS,
FS20 ST, FS20 AS4-3, FS20 SU-2, FS20 DF, 1-Wire + RS-232: AB Electronics Com Pi RS232, Brandmelder + Fenster: AB Electronics IO Pi 32
BUDERUS GB142 über EMS/AVR-NET-IO, WESTAFLEX WAC250 über RS232, MySensors
mit fhem.cfg & includes glücklich

AHA1805

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
AHA 1805 RIP 29.08.2016 --> RUHE IN FRIEDEN
In Gedanken Bei dir HANNES
Dein Bruder Gerd (Inputsammler) Vermisst dich Hannes (AHA1805)

fiedel

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.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Hollo

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

Soll es doch Notepad++ sein, hilft auch hier die "FHEM-Erweiterung".
http://www.fhemwiki.de/wiki/Syntax_Highlighting_bei_externen_Editoren


FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

BenMarloe

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!
Alles ist kompliziert - bis man es verstanden hat
Fhem auf Raspberry 2 B
EnOcean / Homematic / Eigenbau / ABB 23 / SolarEdge SE10k

MCh76

#12
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----------------";
}

Wzut

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.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher