Autor Thema: Regex für attribute bei deleteattr  (Gelesen 257 mal)

Offline StefanStrobel

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1403
Regex für attribute bei deleteattr
« am: 21 September 2020, 17:57:07 »
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


Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22944
Antw:Regex für attribute bei deleteattr
« Antwort #1 am: 23 September 2020, 17:32:30 »
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...

Offline StefanStrobel

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1403
Antw:Regex für attribute bei deleteattr
« Antwort #2 am: 23 September 2020, 18:46:45 »
Vielen Dank!

Gruss
   Stefan

 

decade-submarginal