FHEM Forum

FHEM - Hausautomations-Systeme => ZWave => Thema gestartet von: buspirat am 25 November 2016, 23:18:50

Titel: Debug-Code live ins ZWave-Modul einschleusen
Beitrag von: buspirat am 25 November 2016, 23:18:50
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
Titel: Antw:Debug-Code live ins ZWave-Modul einschleusen
Beitrag von: rudolfkoenig am 26 November 2016, 08:50:35
Das geht auch einfacher: Modul aendern und reload.
Titel: Antw:Debug-Code live ins ZWave-Modul einschleusen
Beitrag von: A.Harrenberg am 26 November 2016, 10:56:01
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.
Titel: Antw:Debug-Code live ins ZWave-Modul einschleusen
Beitrag von: rudolfkoenig am 26 November 2016, 12:07:30
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.
Titel: Antw:Debug-Code live ins ZWave-Modul einschleusen
Beitrag von: A.Harrenberg am 26 November 2016, 13:42:09
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.