FHEM Forum

FHEM - Anwendungen => Multimedia => Thema gestartet von: Gangi am 18 Juli 2026, 10:52:25

Titel: [PATCH] 71_YAMAHA_NP.pm erzeugt leeres .DABList-Attribut bei Geräten ohne DAB
Beitrag von: Gangi am 18 Juli 2026, 10:52:25
Hallo zusammen,

beim Modul [tt]71_YAMAHA_NP.pm[/tt] tritt bei meinem Yamaha R-N301 nach einem [tt]save[/tt] beziehungsweise Neustart reproduzierbar folgende Initialisierungsmeldung auf:

attr NP_RN301 .DABList: attribute value is missing

FHEM deaktiviert daraufhin außerdem Autosave.

System

FHEM: fhem.pl:29803/2025-03-29
Modul: 71_YAMAHA_NP.pm:0.198210/2019-07-12
Gerät: Yamaha R-N301
TYPE: YAMAHA_NP

Der Yamaha R-N301 besitzt keine DAB-Funktion.

Ursache

Im Notify-Teil des Moduls wird bei jedem SAVE oder SHUTDOWN zunächst ein leeres verstecktes Attribut angelegt:

Code (perl) Auswählen
# Save DAB list on save or shutdown
if (grep /(SAVE|SHUTDOWN)/, @{$events})
{
  $attr{$name}{".DABList"} = "";

  foreach (grep /^(.DAB_ID)/, keys %{$hash->{READINGS}})
  {
    $attr{$name}{".DABList"} .= ";".$_.":".$hash->{READINGS}{$_}{VAL};
  }
}

Besitzt das Gerät keine DAB-Readings, wird die Schleife nicht ausgeführt. Dadurch bleibt [tt].DABList[/tt] leer und wird beim Speichern offenbar als folgende unvollständige Zeile in die Konfiguration übernommen:

attr NP_RN301 .DABList

Beim nächsten Start folgt dann:

attr NP_RN301 .DABList: attribute value is missing

Getesteter Änderungsvorschlag

Die DAB-Readings werden zunächst gesammelt. Das Attribut wird nur angelegt, wenn tatsächlich DAB-Einträge vorhanden sind. Andernfalls wird ein eventuell vorhandenes leeres oder veraltetes Attribut entfernt.

Code (perl) Auswählen
# Save DAB list on save or shutdown
if (grep /(SAVE|SHUTDOWN)/, @{$events})
{
  my @dab = grep /^\.DAB_ID/, keys %{$hash->{READINGS}};

  if (@dab)
  {
    $attr{$name}{".DABList"} = "";

    foreach (@dab)
    {
      $attr{$name}{".DABList"} .= ";".$_.":".$hash->{READINGS}{$_}{VAL};
    }
  }
  else
  {
    delete $attr{$name}{".DABList"};
  }
}

Patch als Diff

Code (diff) Auswählen
--- 71_YAMAHA_NP.pm.orig
+++ 71_YAMAHA_NP.pm
@@ -315,15 +315,26 @@
 
  return undef if(!$events); # Some previous notify deleted the array.
 
-  # Save DAB list on save or shutdown
+  # Save DAB list on save or shutdown
  if (grep /(SAVE|SHUTDOWN)/, @{$events})
  {
-    $attr{$name}{".DABList"} = "";
+    my @dab = grep /^\.DAB_ID/, keys %{$hash->{READINGS}};
 
-    foreach (grep /^(.DAB_ID)/, keys %{$hash->{READINGS}})
+    if (@dab)
    {
-      $attr{$name}{".DABList"} .= ";".$_.":".$hash->{READINGS}{$_}{VAL};
+      $attr{$name}{".DABList"} = "";
+
+      foreach (@dab)
+      {
+        $attr{$name}{".DABList"} .= ";".$_.":".$hash->{READINGS}{$_}{VAL};
+      }
+    }
+    else
+    {
+      delete $attr{$name}{".DABList"};
    }
  }
  return undef;
 }

Test

Nach Einspielen des Patches habe ich:

deleteattr NP_RN301 .DABList
save
shutdown restart

ausgeführt.

Ergebnis:


Die Änderung sollte für DAB-fähige Geräte das bisherige Verhalten beibehalten. Geräte ohne DAB erzeugen hingegen kein ungültiges leeres Attribut mehr.

Könnte der Maintainer bitte prüfen, ob diese Änderung übernommen werden kann?

Viele Grüße
Frank