Hallo Rudi,
bei HTTPMOD, Modbus oder FReplacer-Geräten mit vielen Wildcard-Attributen, wäre es hilfreich, wenn man Attribute nicht nur einzeln sondern auch gemeinsam mit einer Regex löschen könnte (so wie es auch bei deletereading möglich ist).
Folgende Änderung würde das ermöglichen:
--- svn/fhem.pl 2020-09-21 17:51:03.439575432 +0200
+++ fhem.pl 2020-09-21 17:51:03.440028645 +0200
@@ -2325,12 +2325,23 @@
DoTrigger("global", "DELETEATTR $sdev", 1) if($init_done);
} else {
- delete($attr{$sdev}{$a[1]}) if(defined($attr{$sdev}));
- addStructChange("deleteAttr", $sdev, join(" ", @a));
- DoTrigger("global", "DELETEATTR $sdev $a[1]", 1) if($init_done);
+ # check for wildcard
+ if ($a[1] =~ /[\.\+\*\?]/) { # wildcard specified
+ foreach my $dAttr (grep { /$a[1]/ }
+ keys %{$attr{$sdev}} ) {
+ delete($attr{$sdev}{$dAttr});
+ addStructChange("deleteAttr", $sdev, "$sdev $dAttr");
+ DoTrigger("global", "DELETEATTR $sdev $dAttr", 1) if($init_done);
+ push @rets, "Deleted attr $dAttr for device $sdev";
+ }
+ }
+ else {
+ delete($attr{$sdev}{$a[1]}) if(defined($attr{$sdev}));
+ addStructChange("deleteAttr", $sdev, join(" ", @a));
+ DoTrigger("global", "DELETEATTR $sdev $a[1]", 1) if($init_done);
+ }
}
-
}
return join("\n", @rets);
Ich bin mir nicht sicher, ob der Aufruf von addStructChange in der Änderung so optimal ist, aber da kennst Du Dich ja besser aus :-)
Gruss
Stefan
Ich habe den Vorschlag implementiert, aber leicht anders: alles wird als Regexp interpretiert, aber wie ueblich mit ^$ ergaenzt. addStructChange kriegt die deleteattr Parameter unverdaut, ist nachrichtlich gedacht.
Die Doku habe ich auch angepasst...
Vielen Dank!
Gruss
Stefan