Hallo zusammen,
je komplexer die Installation wird, desto wichtiger empfinde ich das Thema Debugging. Ein Traum wären natürlich Haltepunkte etc. Soweit mir bekannt, ist das aber nur schwer bis gar nicht möglich. Mir genügt aber auch schon eine einfache Ausgabe a la console.log(string) in JS, um ein paar Werte schnell einzusehen und reagieren zu können. Mein Fokus liegt auf einfach und schnell. (Ich nenne es trotzdem mal Debugging.)
Um nicht wieder nur nach Lösungen zu fragen, möchte ich meine Lösung mal zur Diskussion stellen. Freuen würde ich mich über Optimierungen oder auch andere Lösungen.
Grundsätzlich will ich fürs Debuggen nicht das Logfile mittels Log 1, MeinString bemühen / zumüllen müssen. Nicht zuletzt, weil das (besonders am Ende eines Monats) zu lange lädt. Vielleicht wäre es ja eine Lösung, ein schmales Debugging Logfile erstellen zu lassen und dieses mit F5 auf einem separaten Tab zu aktualisieren. Meine Lösung sieht aber so aus:
Ausgabe als Event im Event monitor und damit quasi in Echtzeit. Dazu verwende ich die Funktion
debug(string) im Perl Code oder
debug string im FHEM Code
Beispiel:
...
my $newtime = strftime("%H:%M:%S",localtime(time()+$secs));
debug($newtime);
fhem("debug $newtime);
fhem("set $dev inactive; defmod at.Disable.$dev.Temporary at $newtime set $dev active");
Im Event monitor erscheint dann
2017-11-11 11:56:12.245 dummy DEBUG >>>11:56:12
Bei vielen Events zum Zeitpunkt wird mit Events (Filter: DEBUG.*) alles andere rausgeschmissen.
Die Umsetzung ist eine simple Funktion in der myUtils:
sub debug($)
{
my ($logtxt) = @_;
fhem("set DEBUG >>>$logtxt");
}
und ein CMDALIAS debug
debug .* AS { debug($EVENT) }
Mich würde interessieren, wie ihr das Thema angeht.
Gruß
Ronny
Jenachdem, was man unter Debugging versteht.
Bei Modulentwickeln: 3 Terminal-Fenster nebeneinander:
1. mit "perl fhem.pl cfg/fhem.cfg.test", wo "attr global logfile -" gesetzt ist, verbose nach belieben. Neustart mit ^C, Pfeil nach oben, return.
2. mit telnet, wobei das ein alias ist: "socat TCP:!:1\:!:2 readline,history=/Users/rudi/.telnet_history (Achtung, tcsh). Hier werden als erstes Events mit "inform timer" aktiviert. Falls FHEMWEB betroffen ist, dann statt telnet (oder zusaetzlich dazu) ein Browser mit geoeffnete JS-Console.
3. mit Editor, und Log 1, "..." Meldungen am Anfang der Zeile, damit man diese schnell als Temporaer erkennen kann. Vor dem Einchecken "svn diff .", damit man nichts Unbeabsichtigtes eincheckt.
Statt "socat" rufe ich die telnet session mit "rlwrap telnet hostxyz 7072" auf. Vmtl. mit gleichem Ergebnis.
In der produktiven Umgebung würde ich die Ausgaben ins normale Log schreiben lassen und das Log löschen, falls es mir zu groß geworden wäre.
Hi,
einfach in global nofork setzen und dann
perl -d fhem.pl fhem.cfg
...und in der Suchmaschine Deines Vertrauens nach "perldebug" suchen.
Gruß,
Thorsten
Zitat von: FHEMAN am 10 November 2017, 11:09:22
Hallo zusammen,
je komplexer die Installation wird, desto wichtiger empfinde ich das Thema Debugging. Ein Traum wären natürlich Haltepunkte etc. Soweit mir bekannt, ist das aber nur schwer bis gar nicht möglich. Mir genügt aber auch schon eine einfache Ausgabe a la console.log(string) in JS, um ein paar Werte schnell einzusehen und reagieren zu können. Mein Fokus liegt auf einfach und schnell. (Ich nenne es trotzdem mal Debugging.)
Um nicht wieder nur nach Lösungen zu fragen, möchte ich meine Lösung mal zur Diskussion stellen. Freuen würde ich mich über Optimierungen oder auch andere Lösungen.
Grundsätzlich will ich fürs Debuggen nicht das Logfile mittels Log 1, MeinString bemühen / zumüllen müssen. Nicht zuletzt, weil das (besonders am Ende eines Monats) zu lange lädt. Vielleicht wäre es ja eine Lösung, ein schmales Debugging Logfile erstellen zu lassen und dieses mit F5 auf einem separaten Tab zu aktualisieren. Meine Lösung sieht aber so aus:
Ausgabe als Event im Event monitor und damit quasi in Echtzeit. Dazu verwende ich die Funktion
debug(string) im Perl Code oder
debug string im FHEM Code
Beispiel:
...
my $newtime = strftime("%H:%M:%S",localtime(time()+$secs));
debug($newtime);
fhem("debug $newtime);
fhem("set $dev inactive; defmod at.Disable.$dev.Temporary at $newtime set $dev active");
Im Event monitor erscheint dann
2017-11-11 11:56:12.245 dummy DEBUG >>>11:56:12
Bei vielen Events zum Zeitpunkt wird mit Events (Filter: DEBUG.*) alles andere rausgeschmissen.
Die Umsetzung ist eine simple Funktion in der myUtils:
sub debug($)
{
my ($logtxt) = @_;
fhem("set DEBUG >>>$logtxt");
}
und ein CMDALIAS debug
debug .* AS { debug($EVENT) }
Mich würde interessieren, wie ihr das Thema angeht.
Gruß
Ronny
Hallo,
wollte das probieren, aber.
debug .* AS { debug($EVENT) }
das liefert einen fehler. unbekannter befehl
owohl in 99_myUlits der code vorhanden ist.
Was mache ich denn falsch?
Danke
Hi,
hast Du den cmdalias angelegt? Siehe hier: https://wiki.fhem.de/wiki/Cmdalias
Gruß,
Thorsten
Ah,
das ist mir wohl durchgerutscht.
Danke muss ich gleich nochmal testen.
Danke
so hat nun geklappt denke ich ,
habe aber noch die Meldung drinnen:
debug_test_N return value: Unknown command debug(off), try help.
debug(off) ist richtig, aber warum kommt vorher unknown command?