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
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.
Da fehlte noch ein Semikolon am Ende...
Danke, habs geaendert.
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 :)
ZitatDie Funktion heißt defInfo()
Das erklaert einiges. :)