Patch für defInfo() in Bezug auf devspec2array()

Begonnen von Markus Bloch, 27 Dezember 2017, 23:22:04

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo zusammen,

in der 99_Utils.pm gibt es seit längerem die Funktion defInfo() welche aus diesem Beitrag stammt: https://forum.fhem.de/index.php/topic,26395

Hierbei wird devspec2array() genutzt um anschließend ein bestimmtes Internal zu extrahieren:

my @etDev = devspec2array($search);
  foreach my $d (@etDev) {
    next unless $d;
    push @ret, $defs{$d}{$internal};
  }


Sollte die devspec jedoch kein Ergebnis ermitteln können, so tritt ein Sonderfall in devspec2array() aus historischen Gründen ein (evtl. könnte man den ja mal beseitigen...):
- devspec2array() gibt den Übergabeparameter $search als Skalar zurück
- Dieser muss anschließend nochmal gezielt geprüft werden ob dieser Key in %defs existiert, andernfalls gibt es keine passenden Definitionen als Ergebnis
- Ein anschließender Zugriff auf $defs{$d}{$internal} würde andernfalls $defs{$search} anlegen -> dies führt zu Logmeldungen "Strange call for typeless ...."

Mein Vorschlag daher den betreffenden Abschnitt um eine next-Answeisung zu ergänzen:

my @etDev = devspec2array($search);
  foreach my $d (@etDev) {
    next unless $d;
    next if($d eq $search && !$defs{$d});
    push @ret, $defs{$d}{$internal};
  }


Oder als Alternative die historische Sonderlocke in devspec2array() loswerden  :)

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Ich bin nicht dagegen, allerdings verwende ich devInfo nicht, und soweit ich sehe, auch keiner der Module.
Habs also eingecheckt.

P.S.: Was mir auch merkwuerdig vorkommt: falls $internal nicht gesetzt ist, dann landet ein undef im Array.

Markus Bloch

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig


betateilchen

Zitat von: rudolfkoenig am 28 Dezember 2017, 11:37:42
allerdings verwende ich devInfo nicht, und soweit ich sehe, auch keiner der Module.

Die Funktion heißt defInfo() und Du verwendest sie in 01_FHEMWEB.pm :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

ZitatDie Funktion heißt defInfo()
Das erklaert einiges. :)