Hallo Zusammen,
möchte man live Debug-Code ins ZWave Modul einschleusen,
dann geht das mit einer einmaligen Änderung + Neustart von fhem.
Man sucht sich die zu untersuchende Funktion, z.B. ZWave_secEnd(), und fügt folgenden Code ein:
my $filename_debug = '/tmp/inject_fhem.pl';
if (-f $filename_debug) {
# variables you want to pass
# they will be available in the scope of the executed code snippet
local @ARGV = $hash;
unless (my $return = do $filename_debug) {
Log3 $ioName, 1, "couldn't parse $filename_debug: $@" if $@;
Log3 $ioName, 1, "couldn't do $filename_debug: $!" unless defined $return;
Log3 $ioName, 1, "couldn't run $filename_debug" unless $return;
# Log3 $hash->{NAME}, 1, "couldn't parse $filename_debug: $@" if $@;
# Log3 $hash->{NAME}, 1, "couldn't do $filename_debug: $!" unless defined $return;
# Log3 $hash->{NAME}, 1, "couldn't run $filename_debug" unless $return;
}
}
Name der Variabeln ggf. anpassen.
Die Datei "/tmp/inject_fhem.pl" sieht testweise so aus:
use Data::Dumper;
use strict;
my $hash = $_[0];
Log3 $hash->{NAME}, 1, Dumper($hash);
1;
Damit kann man bei einem laufenden Kommunikationsproblem den Debug-Code beliebig anpassen, ohne fhem neu zu starten.
Wichtig ist dabei, daß man die zu "exportierenden" Variablen in das @ARGV Array einträgt. Das schränkt leider den Nutzen ein wenig ein.
VG,
Thomas
Das geht auch einfacher: Modul aendern und reload.
Hi Rudi,
aber beim Reload vom Modul wird doch alles mögliche zurückgesetzt und neu initialisiert, oder doch nicht?
Hier ging es ja genau darum den Debug-Code anzupassen OHNE was zurückzusetzen, da nach dem Neustart der Fehler ja weg ist.
Gruß,
Andreas.
reload liest die Datei ein, und ruft XXX_Initialize() auf. Soweit ich sehe, setzt ZWave_Initialize nichts zurueck, und auch die Definition der Modul-globalen Variablen sind harmlos.
Ich mache das regelmaessig mit meinem Produktions-FHEM, wenn ich auf einem Feature scharf bin. Man muss natuerlich die Zusammenhaenge kennen, und das Modul darf sich nicht auf Aenderungen in fhem.pl verlassen.
Hi Rudi,
danke für die Klarstellung. Ich nutze meist auch nur das Reload, auch wenn ich meine Testumgebung recht schnell komplett neu gestartet habe.
Gruß,
Andreas.