diff --git a/fhem/docs/commandref_frame.html b/fhem/docs/commandref_frame.html
index 6378afc9e..30d008572 100644
--- a/fhem/docs/commandref_frame.html
+++ b/fhem/docs/commandref_frame.html
@@ -308,9 +308,11 @@ A line ending with \ will be concatenated with the next one, so long lines
a single device name. This is the most common case.
a list of devices, separated by comma (,)
a regular expression
- a NAME=VALUE pair, where NAME can be an Internal value like TYPE, a
+ a NAME=VALUE pair, where NAME can be an internal value like TYPE, a
Reading-Name or an attribute. VALUE is a regexp. To negate the
- comparison, use NAME!=VALUE
+ comparison, use NAME!=VALUE. To restrict the search, use i: as prefix
+ for internal values, r: for readings and a: for attributes. See the
+ example below.
if the spec is followed by the expression :FILTER=NAME=VALUE, then the
values found in the first round are filtered by the second expression.
@@ -324,6 +326,7 @@ A line ending with \ will be concatenated with the next one, so long lines
set room=kitchen:FILTER=STATE!=off off
list disabled=
list TYPE=FS20 STATE
+ list i:TYPE=FS20 STATE
Notes:
diff --git a/fhem/docs/commandref_frame_DE.html b/fhem/docs/commandref_frame_DE.html
index bb7ceebd4..73f026e59 100644
--- a/fhem/docs/commandref_frame_DE.html
+++ b/fhem/docs/commandref_frame_DE.html
@@ -319,7 +319,10 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.
- ein regulärer Ausdruck
- ein NAME=WERT Ausdruck, wo NAME ein "Internal" Wert wie TYPE ist, ein
Reading-Name oder ein Attribut. WERT ist ein regulärer Ausdruck.
- Um die Bedingung zu negieren, sollte NAME!=WERT verwendet werden.
+ Um die Bedingung zu negieren, muss NAME!=WERT verwendet werden.
+ Um die Suche einzugrenzen, kann man als Praefix i: für internal
+ Werte, r: für Reading-Namen und a: für Attribute verwenden,
+ siehe das Beispiel unten.
- Falls die Spezifikation von :FILTER=NAME=WERT gefolgt wird,
dann wird die zuvor gefundene Liste durch diesen neuen Ausdruck
@@ -335,6 +338,7 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.
set room=kitchen:FILTER=STATE!=off off
list disabled=
list TYPE=FS20 STATE
+ list i:TYPE=FS20 STATE
Bemerkungen:
diff --git a/fhem/fhem.pl b/fhem/fhem.pl
index 705aa0745..7e30a6a17 100755
--- a/fhem/fhem.pl
+++ b/fhem/fhem.pl
@@ -1092,6 +1092,11 @@ devspec2array($;$)
}
($n,$op,$re) = ($1,"eval","") if($dName =~ m/^{(.*)}$/);
+ my $fType="";
+ if($n =~ m/^(.:)(.*$)/) {
+ $fType = $1;
+ $n = $2;
+ }
@res=();
foreach my $d (@names) {
next if($attr{$d} && $attr{$d}{ignore});
@@ -1107,12 +1112,13 @@ devspec2array($;$)
Log 1, "Error: $d has no TYPE";
next;
}
- my $val = $hash->{$n};
- if(!defined($val)) {
+ my $val;
+ $val = $hash->{$n} if(!$fType || $fType eq "i:");
+ if(!defined($val) && (!$fType || $fType eq "r:")) {
my $r = $hash->{READINGS};
$val = $r->{$n}{VAL} if($r && $r->{$n});
}
- if(!defined($val)) {
+ if(!defined($val) && (!$fType || $fType eq "a:")) {
$val = $attr{$d}{$n} if($attr{$d});
}
$val="" if(!defined($val));