FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Markus Bloch am 27 Dezember 2017, 23:22:04

Titel: Patch für defInfo() in Bezug auf devspec2array()
Beitrag von: Markus Bloch am 27 Dezember 2017, 23:22:04
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
Titel: Antw:Patch für defInfo() in Bezug auf devspec2array()
Beitrag von: rudolfkoenig am 28 Dezember 2017, 11:37:42
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.
Titel: Antw:Patch für defInfo() in Bezug auf devspec2array()
Beitrag von: Markus Bloch am 28 Dezember 2017, 11:41:55
Da fehlte noch ein Semikolon am Ende...
Titel: Antw:Patch für defInfo() in Bezug auf devspec2array()
Beitrag von: rudolfkoenig am 28 Dezember 2017, 12:01:25
Danke, habs geaendert.
Titel: Antw:Patch für defInfo() in Bezug auf devspec2array()
Beitrag von: betateilchen am 28 Dezember 2017, 15:17:20
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 :)
Titel: Antw:Patch für defInfo() in Bezug auf devspec2array()
Beitrag von: rudolfkoenig am 28 Dezember 2017, 17:53:02
ZitatDie Funktion heißt defInfo()
Das erklaert einiges. :)