From 0baaa2ea446e886dbeadc208d4f9e019461ca145 Mon Sep 17 00:00:00 2001
From: rudolfkoenig <>
Date: Fri, 16 Apr 2021 16:32:54 +0000
Subject: [PATCH] fhem.pl: add -silent to the attr command (Forum #57691)
git-svn-id: https://svn.fhem.de/fhem/trunk@24261 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/docs/commandref_frame.html | 7 ++++---
fhem/docs/commandref_frame_DE.html | 10 ++++++----
fhem/fhem.pl | 15 ++++++++-------
3 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/fhem/docs/commandref_frame.html b/fhem/docs/commandref_frame.html
index 26f29d338..79b288c06 100644
--- a/fhem/docs/commandref_frame.html
+++ b/fhem/docs/commandref_frame.html
@@ -716,7 +716,7 @@ The following local attributes are used by a wider range of devices:
attr
- attr [-a] [-r] <devspec> <attrname> [<value>]
+ attr [-a|-r|-silent] <devspec> <attrname> [<value>]
Set an attribute for a device defined by define.
@@ -734,6 +734,7 @@ The following local attributes are used by a wider range of devices:
space will be added automatically to the old value before appending the
new.
With the -r option one can remove a part of an attribute value.
+ With the -silent option the command is not recorded in the "save -?" list.
Examples:
@@ -1059,8 +1060,8 @@ The following local attributes are used by a wider range of devices:
case of a notify type definition, only the regex part will be changed. All
other values (state, attributes, etc) will remain intact.
After modify, the global event "MODIFIED" will be generated.
- With the -silent option the command is not recorded in the "save -?" list.
-
+ With the -silent option the command is not recorded in the "save -?" list.
+
Example:
define lampon at 19:00 set lamp on
diff --git a/fhem/docs/commandref_frame_DE.html b/fhem/docs/commandref_frame_DE.html
index 61d67a71c..510fe5cad 100644
--- a/fhem/docs/commandref_frame_DE.html
+++ b/fhem/docs/commandref_frame_DE.html
@@ -725,7 +725,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
attr
- attr [-a] [-r] <devspec> <attrname> [<value>]
+ attr [-a|-r|-silent] <devspec> <attrname> [<value>]
@@ -749,6 +749,8 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
anfängt, dann wird es mit einem Leerzeichen angehängt.
Mit der -r Option kann man Teile eines Attributes wieder entfernen.
+ Mit der silent Option wird der Befehl nicht in die "save -?" Liste
+ eingetragen.
Beispiele:
@@ -1117,9 +1119,9 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
Werte (Stati, Attribute, etc) bleiben erhalten.
Nach modify wird das global MODIFIED Event erzeugt.
Nach der Durchführung das globale Ereignis "MODIFIED" wird generiert.
- Mit der silent Option wird der modify Befehl nicht in die "save -?" Liste
- eingetragen.
-
+ Mit der silent Option wird der Befehl nicht in die "save -?" Liste
+ eingetragen.
+
Beispiel:
diff --git a/fhem/fhem.pl b/fhem/fhem.pl
index 6cb9131e5..28d5a7691 100755
--- a/fhem/fhem.pl
+++ b/fhem/fhem.pl
@@ -2950,13 +2950,14 @@ CommandAttr($$)
{
my ($cl, $param) = @_;
my ($ret, $append, $remove, @a);
+ my %opt;
+ my $optRegexp = '-a|-r|-silent';
+ $param = cmd_parseOpts($param, $optRegexp, \%opt);
- $append = ($param =~ s/^-a //);
- $remove = ($param =~ s/^-r //);
@a = split(" ", $param, 3) if($param);
- return "Usage: attr [-a|-r] []\n$namedef"
- if(@a < 2 || ($append && $remove));
+ return "Usage: attr [$optRegexp] []\n$namedef"
+ if(@a < 2 || ($opt{a} && $opt{r}));
my $a1 = $a[1];
return "$a[0]: bad attribute name '$a1' (allowed chars: A-Za-z/\\d_\\.-)"
if($featurelevel > 5.9 && !goodReadingName($a1) && $a1 ne "?");
@@ -2998,11 +2999,11 @@ CommandAttr($$)
}
}
- if($append && $attr{$sdev} && $attr{$sdev}{$attrName}) {
+ if($opt{a} && $attr{$sdev} && $attr{$sdev}{$attrName}) {
$attrVal = $attr{$sdev}{$attrName} .
($attrVal =~ m/^,/ ? $attrVal : " $attrVal");
}
- if($remove && $attr{$sdev} && $attr{$sdev}{$attrName}) {
+ if($opt{r} && $attr{$sdev} && $attr{$sdev}{$attrName}) {
my $v = $attr{$sdev}{$attrName};
$v =~ s/\b$attrVal\b//;
$attrVal = $v;
@@ -3118,7 +3119,7 @@ CommandAttr($$)
evalStateFormat($hash);
}
addStructChange("attr", $sdev, "$sdev $attrName $attrVal")
- if(!defined($oVal) || $oVal ne $attrVal);
+ if(!$opt{silent} && (!defined($oVal) || $oVal ne $attrVal));
DoTrigger("global", "ATTR $sdev $attrName $attrVal", 1) if($init_done);
}