Autor Thema: 72_FRITZBOX.pm: Patch gegen Perl Warning bei fehlendem DECT  (Gelesen 324 mal)

Online loescher

  • Jr. Member
  • **
  • Beiträge: 76
Hallo tupol!

Ich bekomme bei einer FritzBox 7170 (ohne DECT!) bei jedem "set FritzBox update" diese Meldungen im FHEM Log:
2018.05.04 16:53:15 1: PERL WARNING: Use of uninitialized value $dectUserID in hash element at ./FHEM/72_FRITZBOX.pm line 1494.
2018.05.04 16:53:15 1: PERL WARNING: Use of uninitialized value $dectUserID in hash element at ./FHEM/72_FRITZBOX.pm line 1495.

Nach meinen Tests würde dieser Patch das beheben:

--- 72_FRITZBOX.pm 2018-05-04 17:16:01.222978102 +0200
+++ 72_FRITZBOX.pm.NEW 2018-05-04 17:23:34.292828550 +0200
@@ -1491,8 +1491,12 @@
 # Handset der internen Nummer zuordnen
    foreach ( @{ $result->{handset} } ) {
       my $dectUserID = $_->{User};
-      my $dectUser = $dectFonID{$dectUserID}{User};
-      my $intern = $dectFonID{$dectUserID}{Intern};
+      my $dectUser = '';
+      my $intern   = '';
+      if (defined $dectUserID) {
+         $dectUser = $dectFonID{$dectUserID}{User};
+         $intern   = $dectFonID{$dectUserID}{Intern};
+      }
       
       if ($dectUser) {
          FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "dect".$dectUser."_manufacturer", $_->{Manufacturer};

Könntest dir das bitte anschauen und wenn OK dann offiziell einbauen?

LG,
Stephan.

Offline tupol

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1359
  • Wiki lesen hilft. Support geb ich im Forum.
Antw:72_FRITZBOX.pm: Patch gegen Perl Warning bei fehlendem DECT
« Antwort #1 am: 12 Mai 2018, 21:32:08 »
Interessant. Laut Statistik gibt es nur eine Box mit 7170 (von 2069) ;-)
Bei den Repeatern gibt es diesen Fehler nicht.
Ich schau es mir mal genauer an. Ich vermute, es gibt auch eine Möglichkeit festzustellen, ob es DECT auf der Box gibt oder nicht.
Was spuckt die Box den aus, wenn Du folgende Befehle absetzt

get <device> luaQuery dect:settings/Handset/list(User,Manufacturer,Model,FWVersion)

get <device> luaQuery telcfg:settings/Foncontrol/User/list(Id,Name,Intern,IntRingTone,AlarmRingTone0,RadioRingID,ImagePath,G722RingTone,G722RingToneName)
FHEM 5.5 auf RPi B Rev.2 (mit LCD4Linux, BMP180 und CUL v3 868.35 MHz), FB7490, Fritz!DECT 200, FS20, FHT80TF-2, S300TH, KS300, Homematic, PRESENCE
Modul-Entwickler von: FRITZBOX, statistics, PROPLANTA, OPENWEATHER, JSONMETER, LUXTRONIK2

Online loescher

  • Jr. Member
  • **
  • Beiträge: 76
Antw:72_FRITZBOX.pm: Patch gegen Perl Warning bei fehlendem DECT
« Antwort #2 am: 12 Mai 2018, 22:11:33 »
Naja, diese eine Box ist dann wohl meine  ;) Aber die erfüllt genau ihren Zweck.

Dabei bin ich gleich noch über etwas "gestolpert":
Das "get ... luaQuery ..." geht erst nach einem
attr FritzBox3 allowTR064Command 1
Ansonsten kommt nur:
Unknown argument luaquery, choose one of ringTones:noArg
In der Hilfeseite taucht leider weder luaquery noch die Abhängigkeit zum allowTR064Command auf.
Könntest du bitte bei Gelegenheit noch dazuschreiben.

Hier die Ausgaben:
Result of query = 'dect:settings/Handset/list(User,Manufacturer,Model,FWVersion)'
----------------------------------------------------------------------
$VAR1 = [
          {}
        ];
und
Result of query = 'telcfg:settings/Foncontrol/User/list(Id,Name,Intern,IntRingTone,AlarmRingTone0,RadioRingID,ImagePath,G722RingTone,G722RingToneName)'
----------------------------------------------------------------------
$VAR1 = [
          {
            'Name' => '',
            'Intern' => '',
            'G722RingTone' => '',
            'G722RingToneName' => '',
            'AlarmRingTone0' => '',
            'Id' => '0',
            'IntRingTone' => '0',
            'ImagePath' => '',
            'RadioRingID' => ''
          }
        ];

Wenn du noch mehr Infos brauchst, dann einfach sagen.

LG,
Stephan.

Offline tupol

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1359
  • Wiki lesen hilft. Support geb ich im Forum.
Antw:72_FRITZBOX.pm: Patch gegen Perl Warning bei fehlendem DECT
« Antwort #3 am: 13 Juni 2018, 20:54:02 »
Hallo Stephan,
jetzt habe ich wieder etwas mehr Zeit mir das Problem anzuschauen. So richtig ist es mir noch nicht klar. Ich dachte eigentlich, dass die Schleife
   foreach ( @{ $result->{handset} } ) {
übersprungen wird, da laut Deiner Rückmeldung $result->{handset} = undefined. Evtl. habe ich vielleicht Perl noch nicht durchschaut.

Kannst Du das ganze mal als if in Klammer setzen?
# Handset der internen Nummer zuordnen  if defined (result->{handset}) {      foreach ( @{ $result->{handset} } ) {      ...  }   }
« Letzte Änderung: 13 Juni 2018, 20:57:16 von tupol »
FHEM 5.5 auf RPi B Rev.2 (mit LCD4Linux, BMP180 und CUL v3 868.35 MHz), FB7490, Fritz!DECT 200, FS20, FHT80TF-2, S300TH, KS300, Homematic, PRESENCE
Modul-Entwickler von: FRITZBOX, statistics, PROPLANTA, OPENWEATHER, JSONMETER, LUXTRONIK2

Online loescher

  • Jr. Member
  • **
  • Beiträge: 76
Antw:72_FRITZBOX.pm: Patch gegen Perl Warning bei fehlendem DECT
« Antwort #4 am: 14 Juni 2018, 22:46:47 »
Hallo tupol,

Das funktioniert leider auch nicht.
Das $result->{handset} ist ja nicht undefined, sondern ist eine Liste mit einem leeren Hash.
Man muss also testen, ob der Hash in der Liste leer ist.
Dieser Patch behebt das Problem:

--- 72_FRITZBOX.pm 2018-05-04 17:37:47.189697441 +0200
+++ 72_FRITZBOX.pm.NEW2 2018-06-14 22:42:21.261149973 +0200
@@ -1490,6 +1490,7 @@
   
 # Handset der internen Nummer zuordnen
    foreach ( @{ $result->{handset} } ) {
+      last if (!%{$_}); # End this loop, if Hash is empty
       my $dectUserID = $_->{User};
       my $dectUser = $dectFonID{$dectUserID}{User};
       my $intern = $dectFonID{$dectUserID}{Intern};

LG,
Stephan.