Autor Thema: Patch für defInfo() in Bezug auf devspec2array()  (Gelesen 343 mal)

Online Markus Bloch

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 3399
Patch für defInfo() in Bezug auf devspec2array()
« 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
« Letzte Änderung: 28 Dezember 2017, 11:41:31 von 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)

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 17943
Antw:Patch für defInfo() in Bezug auf devspec2array()
« Antwort #1 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.

Online Markus Bloch

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 3399
Antw:Patch für defInfo() in Bezug auf devspec2array()
« Antwort #2 am: 28 Dezember 2017, 11:41:55 »
Da fehlte noch ein Semikolon am Ende...
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 17943
Antw:Patch für defInfo() in Bezug auf devspec2array()
« Antwort #3 am: 28 Dezember 2017, 12:01:25 »
Danke, habs geaendert.

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 14140
  • s/fhem\.cfg/configDB/g
Antw:Patch für defInfo() in Bezug auf devspec2array()
« Antwort #4 am: 28 Dezember 2017, 15:17:20 »
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 :)
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 23.03.2018

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 17943
Antw:Patch für defInfo() in Bezug auf devspec2array()
« Antwort #5 am: 28 Dezember 2017, 17:53:02 »
Zitat
Die Funktion heißt defInfo()
Das erklaert einiges. :)

 

decade-submarginal