Hauptmenü

Debugging !?

Begonnen von FHEMAN, 10 November 2017, 11:09:22

Vorheriges Thema - Nächstes Thema

FHEMAN

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
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

rudolfkoenig

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.

dev0

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.

Thorsten Pferdekaemper

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
FUIP

riker1

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
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Thorsten Pferdekaemper

Hi,
hast Du den cmdalias angelegt? Siehe hier: https://wiki.fhem.de/wiki/Cmdalias
Gruß,
   Thorsten
FUIP

riker1

#6
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?
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox