00_MQTT2_SERVER.pm - Use of uninitialized value $l in ...

Begonnen von JoWiemann, 02 Juli 2025, 15:41:23

Vorheriges Thema - Nächstes Thema

JoWiemann

Hallo,

seid etwa 8 Wochen bekommen ich beim Hochfahren von Fhem reihenweise folgende Log-Einträge:
2025.07.02 15:29:33 1: PERL WARNING: Use of uninitialized value $l in substr at /opt/fhem/FHEM/00_MQTT2_SERVER.pm line 711.
2025.07.02 15:29:33 1: stacktrace:
2025.07.02 15:29:33 1:     main::__ANON__                      called by /opt/fhem/FHEM/00_MQTT2_SERVER.pm (711)
2025.07.02 15:29:33 1:     main::MQTT2_SERVER_getStr           called by /opt/fhem/FHEM/00_MQTT2_SERVER.pm (430)
2025.07.02 15:29:33 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3988)
2025.07.02 15:29:33 1:     main::CallFn                        called by fhem.pl (789)
2025.07.02 15:29:33 1: PERL WARNING: substr outside of string at /opt/fhem/FHEM/00_MQTT2_SERVER.pm line 711.
2025.07.02 15:29:33 1: stacktrace:
2025.07.02 15:29:33 1:     main::__ANON__                      called by /opt/fhem/FHEM/00_MQTT2_SERVER.pm (711)
2025.07.02 15:29:33 1:     main::MQTT2_SERVER_getStr           called by /opt/fhem/FHEM/00_MQTT2_SERVER.pm (430)
2025.07.02 15:29:33 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3988)
2025.07.02 15:29:33 1:     main::CallFn                        called by fhem.pl (789)
Das ganze verschwindet dann nach einigen Minuten und taucht auch nicht wieder auf. Erst wenn ich Fhem neu starte. Das sendende MQTT Device läuft seid einigen Jahren ohne Anpassungen.

Da auch ein verbose 5 nicht hilfreich gewesen ist habe ich folgende Ergänzung im Source gemacht:
sub
MQTT2_SERVER_getStr($$$)
{

  my ($hash, $in, $off) = @_;

  my $xline       = ( caller(0) )[2];

  my $xsubroutine = ( caller(1) )[3];
  my $sub         = ( split( ':', $xsubroutine ) )[2];
  $sub ||= 'no-subroutine-specified';

  my $l = unpack("n", substr($in, $off, 2));
  my $r = substr($in, $off+2, $l);

  Log3 $hash, 3, "$sub.$xline " . (defined $in ? "in: $in " : "noIN ") . (defined $off ? "off: $off " : "noOFFset ");

  $hash->{stringError} = 1 if(index($r, "\0") >= 0);
  $r = Encode::decode('UTF-8', $r) if($unicodeEncoding);
  return ($r, $off+2+$l);
}
Im Anhang das veränderte Modul 00_MQTT2_SERVER.pm und das Log-File.

Über Ideen wäre ich dankbar.

Grüße Jörg

define MQTT2_50Herz MQTT2_DEVICE 50Herz
attr MQTT2_50Herz alias MQTT2_50Herz
attr MQTT2_50Herz disable 0
attr MQTT2_50Herz readingList 50Herz:/50Herz/frequence:.* frequence\
50Herz:/50Herz/status:.* status\
50Herz:/50Herz/version:.* version\
50Herz:/50Herz/watchdog:.* watchdog\
50Herz:/50Herz/wifi_rssi:.* wifi_rssi\
50Herz:/50Herz/ip:.* ip\
50Herz:/50Herz/deviation:.* deviation\
50Herz:/50Herz/alarmbyte:.* alarmbyte\
50Herz:/50Herz/buttonReset:.* buttonReset\
50Herz:/50Herz/buttonDisplay:.* buttonDisplay\
50Herz:/50Herz/clientIP:.* clientIP\
50Herz:/50Herz/clientMAC:.* clientMAC
attr MQTT2_50Herz room MQTT,Strom
attr MQTT2_50Herz stateFormat {my $ret = "<div style=\"text-align:left;;\">Aktuelle Netz-Frequenz<br />";;\
$ret .= "Maximum&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;:&nbsp;;<font style=\"color:yellow;;font-weight:bold;;\">" . ReadingsNum("MQTT2_50Herz", "50Hz_Maximum", 0) . " Hz</font><br />";;\
$ret .= "Durchschnitt:&nbsp;;<font style=\"color:white;;font-weight:bold;;\">" . ReadingsNum("MQTT2_50Herz", "50Hz_Durchschnitt", 0) . " Hz</font><br />";;\
$ret .= "Minnimum&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;:&nbsp;;<font style=\"color:red;;font-weight:bold;;\">" . ReadingsNum("MQTT2_50Herz", "50Hz_Minimum", 0) . " Hz</font><br />";;\
$ret .= "</font></div>";;\
return $ret;;\
}
attr MQTT2_50Herz userReadings 50Hz_Minimum {(split(" ", ReadingsVal("MQTT2_50Herz", "50HertzFrequenceHour", 0)))[1]},\
50Hz_Durchschnitt {(split(" ", ReadingsVal("MQTT2_50Herz", "50HertzFrequenceHour", 0)))[3]},\
50Hz_Maximum {(split(" ", ReadingsVal("MQTT2_50Herz", "50HertzFrequenceHour", 0)))[5]}
#   CID        50Herz
#   DEF        50Herz
#   FUUID      60b799e9-f33f-0b39-5606-4ea35204370e2a2b
#   IODev      MQTT2_FHEM_Server
#   LASTInputDev MQTT2_FHEM_Server
#   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.0.133_55358
#   MQTT2_FHEM_Server_MSGCNT 1897
#   MQTT2_FHEM_Server_TIME 2025-07-02 15:43:23
#   MSGCNT     1897
#   NAME       MQTT2_50Herz
#   NR         369
#   STATE      <div style="text-align:left;">Aktuelle Netz-Frequenz<br />Maximum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;<font style="color:yellow;font-weight:bold;">50.052 Hz</font><br />Durchschnitt:&nbsp;<font style="color:white;font-weight:bold;">50.012 Hz</font><br />Minnimum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;<font style="color:red;font-weight:bold;">49.976 Hz</font><br /></font></div>
#   TYPE       MQTT2_DEVICE
#   eventCount 1897
#   READINGS:
#     2025-07-02 15:43:23   50HertzFrequenceDay Min: 49.925 Avg: 50.007 Max: 50.056
#     2025-07-02 15:43:23   50HertzFrequenceDayAvg 50.007
#     2025-07-01 23:59:55   50HertzFrequenceDayAvgLast 49.997
#     2025-07-01 23:59:55   50HertzFrequenceDayLast Min: 49.899 Avg: 49.997 Max: 50.114
#     2025-07-02 15:43:23   50HertzFrequenceDayMax 50.056
#     2025-07-01 23:59:55   50HertzFrequenceDayMaxLast 50.114
#     2025-07-02 15:43:23   50HertzFrequenceDayMin 49.925
#     2025-07-01 23:59:55   50HertzFrequenceDayMinLast 49.899
#     2025-07-02 15:43:23   50HertzFrequenceHour Min: 49.976 Avg: 50.012 Max: 50.052
#     2025-07-02 15:43:23   50HertzFrequenceHourAvg 50.012
#     2025-07-02 14:59:55   50HertzFrequenceHourAvgLast 50.013
#     2025-07-02 14:59:55   50HertzFrequenceHourLast Min: 49.978 Avg: 50.013 Max: 50.051
#     2025-07-02 15:43:23   50HertzFrequenceHourMax 50.052
#     2025-07-02 14:59:55   50HertzFrequenceHourMaxLast 50.051
#     2025-07-02 15:43:23   50HertzFrequenceHourMin 49.976
#     2025-07-02 14:59:55   50HertzFrequenceHourMinLast 49.978
#     2025-07-02 15:43:23   50HertzFrequenceMonth Min: 49.899 Avg: 50.001 Max: 50.114
#     2025-06-30 23:59:55   50HertzFrequenceMonthLast Min: 49.854 Avg: 49.995 Max: 50.124
#     2025-07-02 15:43:23   50HertzFrequenceYear Min: 49.838 Avg: 50.023 Max: 50.146
#     2024-12-31 23:59:55   50HertzFrequenceYearLast Min: 49.821 Avg: 50.026 Max: 50.140
#     2025-07-02 15:43:23   50Hz_Durchschnitt 50.012
#     2025-07-02 15:43:23   50Hz_Maximum    50.052
#     2025-07-02 15:43:23   50Hz_Minimum    49.976
#     2025-07-02 15:29:17   IODev           MQTT2_FHEM_Server
#     2025-07-02 15:43:23   alarmbyte       000
#     2025-06-03 15:33:28   buttonDisplay   pressed
#     2021-06-15 22:47:48   buttonReset     pressed
#     2025-06-03 15:32:59   clientIP        192.168.0.133
#     2025-06-03 15:32:59   clientMAC       CC:50:E3:C5:59:3A
#     2025-07-02 15:43:23   deviation       -0000
#     2025-07-02 15:43:23   frequence       49.991
#     2021-06-07 22:49:54   frequence_Hz    50.011
#     2025-06-03 15:32:59   status          Software/System restart
#     2025-06-03 15:32:59   version         50Herz v1.2 03.06.2025
#     2025-07-02 15:43:00   watchdog        825241655
#     2025-07-02 15:43:00   wifi_rssi       -81
#   helper:
#     _98_statistics 50Herz_Statistik
#
setstate MQTT2_50Herz <div style="text-align:left;;">Aktuelle Netz-Frequenz<br />Maximum&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;:&nbsp;;<font style="color:yellow;;font-weight:bold;;">50.052 Hz</font><br />Durchschnitt:&nbsp;;<font style="color:white;;font-weight:bold;;">50.012 Hz</font><br />Minnimum&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;:&nbsp;;<font style="color:red;;font-weight:bold;;">49.976 Hz</font><br /></font></div>
setstate MQTT2_50Herz 2025-07-02 15:43:23 50HertzFrequenceDay Min: 49.925 Avg: 50.007 Max: 50.056
setstate MQTT2_50Herz 2025-07-02 15:43:23 50HertzFrequenceDayAvg 50.007
setstate MQTT2_50Herz 2025-07-01 23:59:55 50HertzFrequenceDayAvgLast 49.997
setstate MQTT2_50Herz 2025-07-01 23:59:55 50HertzFrequenceDayLast Min: 49.899 Avg: 49.997 Max: 50.114
setstate MQTT2_50Herz 2025-07-02 15:43:23 50HertzFrequenceDayMax 50.056
setstate MQTT2_50Herz 2025-07-01 23:59:55 50HertzFrequenceDayMaxLast 50.114
setstate MQTT2_50Herz 2025-07-02 15:43:23 50HertzFrequenceDayMin 49.925
setstate MQTT2_50Herz 2025-07-01 23:59:55 50HertzFrequenceDayMinLast 49.899
setstate MQTT2_50Herz 2025-07-02 15:43:23 50HertzFrequenceHour Min: 49.976 Avg: 50.012 Max: 50.052
setstate MQTT2_50Herz 2025-07-02 15:43:23 50HertzFrequenceHourAvg 50.012
setstate MQTT2_50Herz 2025-07-02 14:59:55 50HertzFrequenceHourAvgLast 50.013
setstate MQTT2_50Herz 2025-07-02 14:59:55 50HertzFrequenceHourLast Min: 49.978 Avg: 50.013 Max: 50.051
setstate MQTT2_50Herz 2025-07-02 15:43:23 50HertzFrequenceHourMax 50.052
setstate MQTT2_50Herz 2025-07-02 14:59:55 50HertzFrequenceHourMaxLast 50.051
setstate MQTT2_50Herz 2025-07-02 15:43:23 50HertzFrequenceHourMin 49.976
setstate MQTT2_50Herz 2025-07-02 14:59:55 50HertzFrequenceHourMinLast 49.978
setstate MQTT2_50Herz 2025-07-02 15:43:23 50HertzFrequenceMonth Min: 49.899 Avg: 50.001 Max: 50.114
setstate MQTT2_50Herz 2025-06-30 23:59:55 50HertzFrequenceMonthLast Min: 49.854 Avg: 49.995 Max: 50.124
setstate MQTT2_50Herz 2025-07-02 15:43:23 50HertzFrequenceYear Min: 49.838 Avg: 50.023 Max: 50.146
setstate MQTT2_50Herz 2024-12-31 23:59:55 50HertzFrequenceYearLast Min: 49.821 Avg: 50.026 Max: 50.140
setstate MQTT2_50Herz 2025-07-02 15:43:23 50Hz_Durchschnitt 50.012
setstate MQTT2_50Herz 2025-07-02 15:43:23 50Hz_Maximum 50.052
setstate MQTT2_50Herz 2025-07-02 15:43:23 50Hz_Minimum 49.976
setstate MQTT2_50Herz 2025-07-02 15:29:17 IODev MQTT2_FHEM_Server
setstate MQTT2_50Herz 2025-07-02 15:43:23 alarmbyte 000
setstate MQTT2_50Herz 2025-06-03 15:33:28 buttonDisplay pressed
setstate MQTT2_50Herz 2021-06-15 22:47:48 buttonReset pressed
setstate MQTT2_50Herz 2025-06-03 15:32:59 clientIP 192.168.0.133
setstate MQTT2_50Herz 2025-06-03 15:32:59 clientMAC CC:50:E3:C5:59:3A
setstate MQTT2_50Herz 2025-07-02 15:43:23 deviation -0000
setstate MQTT2_50Herz 2025-07-02 15:43:23 frequence 49.991
setstate MQTT2_50Herz 2021-06-07 22:49:54 frequence_Hz 50.011
setstate MQTT2_50Herz 2025-06-03 15:32:59 status Software/System restart
setstate MQTT2_50Herz 2025-06-03 15:32:59 version 50Herz v1.2 03.06.2025
setstate MQTT2_50Herz 2025-07-02 15:43:00 watchdog 825241655
setstate MQTT2_50Herz 2025-07-02 15:43:00 wifi_rssi -81
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

rudolfkoenig

Da sendet wer ein Passwort (Passwort-Kommt-Flag gesetzt) ohne ein Passwort zu senden (es folgt kein Passwort String).
Ich habe das Modul angepasst, dass sowas ignoriert wird.
Bitte um Feedback, da ich kein Programm habe, um das zu testen.

JoWiemann

Hallo Rudi,

vielen Dank für die schnelle Korrektur. Funktioniert so.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM