From cc495c48775fc69f978297e9de85d2811e7e67c5 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Wed, 23 Sep 2020 15:28:56 +0000 Subject: [PATCH] fhem.pl: deleteattr attrname is a regexp now (Forum #114398) git-svn-id: https://svn.fhem.de/fhem/trunk@22833 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/docs/commandref_frame.html | 2 ++ fhem/docs/commandref_frame_DE.html | 2 ++ fhem/fhem.pl | 15 ++++++++------- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/fhem/docs/commandref_frame.html b/fhem/docs/commandref_frame.html index 69b78ef7d..3a38ec1f3 100644 --- a/fhem/docs/commandref_frame.html +++ b/fhem/docs/commandref_frame.html @@ -822,6 +822,8 @@ The following local attributes are used by a wider range of devices: or all attributes for a device (if no <attrname> is defined). See the Device specification section for details on <devspec>.
+ <attrname> is in fact a regexp, complemented with ^ and $ as usual, so + a range of attributes can be deleted with one command.
After deleting the attribute, the global event "DELETEATTR" will be generated.
diff --git a/fhem/docs/commandref_frame_DE.html b/fhem/docs/commandref_frame_DE.html index 45c533bd1..de4b3678a 100644 --- a/fhem/docs/commandref_frame_DE.html +++ b/fhem/docs/commandref_frame_DE.html @@ -850,6 +850,8 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: kein <attrname> angegeben wird).
Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.
+ <attrname> ist ein Regexp, ergänzt mit ^ und $, damit eine Menge + von Attributen mit einem Befehl gelöscht werden kann.
Nach der Durchführung das globale Ereignis "DELETEATTR" wird generiert.
diff --git a/fhem/fhem.pl b/fhem/fhem.pl index b792c4f92..331d408c0 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -2319,17 +2319,18 @@ CommandDeleteAttr($$) next; } - if(@a == 1) { + if(@a == 1) { # Delete all attributes of a device delete($attr{$sdev}); - addStructChange("deleteAttr", $sdev, $sdev); - 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); + } else { # delete specified attribute(s) + if(defined($attr{$sdev})) { + map { delete($attr{$sdev}{$_}) if($_ =~ m/^$a[1]$/) } + keys %{$attr{$sdev}}; + } } + addStructChange("deleteAttr", $sdev, join(" ", @a)); + DoTrigger("global", "DELETEATTR $sdev ".join(" ",@a), 1) if($init_done); }