THZ PERL WARNING: Use of uninitialized value $value in concatenation (.) or string

Begonnen von aaameyer, 13 Februar 2026, 12:49:03

Vorheriges Thema - Nächstes Thema

aaameyer

Hallo zusammen,
seit ein paar Tagen bekomme ich haufenweise Warnungen im FHEM Log vom THZ Modul. Jedoch scheint das Modul weiterhin korrekt mit meiner Wärmepumpe zu kommunizieren. Auch gab es eigentlich keine Änderungen an der WP oder dem USB-Anschluss zum Raspi, so dass mir nicht klar ist was die Ursache dafür sein könnte.

2026.02.06 13:39:34 1: PERL WARNING: Use of uninitialized value $value in concatenation (.) or string at ./FHEM/00_THZ.pm line 1910.
2026.02.06 13:39:34 1: stacktrace:
2026.02.06 13:39:34 1:     main::__ANON__                      called by ./FHEM/00_THZ.pm (1910)
2026.02.06 13:39:34 1:     main::THZ_Parse1                    called by ./FHEM/00_THZ.pm (1478)
2026.02.06 13:39:34 1:     main::THZ_Get                       called by ./FHEM/00_THZ.pm (1058)
2026.02.06 13:39:34 1:     main::THZ_GetRefresh                called by fhem.pl (3527)
2026.02.06 13:39:34 1:     main::HandleTimeout                 called by fhem.pl (710)

Um kurzfristig Abhilfe zu schaffen habe ich oberhalb der Zeile 1910 in der 00_THZ.pm folgendes eingefügt:

$value //= "";

Evtl. könnte @immi schauen, ob es generell sinnvoll auf undef zu prüfen, falls bei anderen auch die Rahmenbedingungen dazu führen, dass die Warnung kommt.

aaameyer

Inzwischen konnte ich den Fehler genauer eingrenzen und lösen, evtl. könnte der Maintainer @immi folgende Änderungen am 00_THZ.pm modul einfügen:
Ich habe eine Stiebel LWZ 5S Plus welche einen Fehlercode 16 (EVE (elektronische Verdichtereinheit) liefert keine Leistung) hatte. Dieser Fehlercode ist in der %faultmap nicht aufgelistet. Daher habe ich den hinzugefügt: "16" => "F16_EVE_NoOutput",
Um unbekannte Fehler robust zu behandeln, würde ich in Zeile #1899 elsif ($Type eq "faultmap") {$value= $faultmap{(hex($value))};} mit folgendem ersetzen:
elsif ($Type eq "faultmap") {
    my $rawValue = $value;
    $value = $faultmap{hex($rawValue)};
    $value = sprintf("UnknownFaultCode_%02X", hex($rawValue))
        unless defined($value);
}