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.
SystemFHEM: 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.
UrsacheIm Notify-Teil des Moduls wird bei jedem SAVE oder SHUTDOWN zunächst ein leeres verstecktes Attribut angelegt:
# 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 ÄnderungsvorschlagDie 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.
# 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--- 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;
}
TestNach Einspielen des Patches habe ich:
deleteattr NP_RN301 .DABList
save
shutdown restart
ausgeführt.
Ergebnis:
- keine Initialisierungsmeldung mehr
- kein leeres [tt].DABList[/tt]-Attribut mehr
- erneutes [tt]save[/tt] und anschließender Neustart ebenfalls ohne Fehler
- die übrigen Funktionen des R-N301 arbeiten weiterhin
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