From 3abd49a0c19522d116b78a50ccee6b484d774d06 Mon Sep 17 00:00:00 2001
From: rudolfkoenig <>
Date: Tue, 13 Feb 2018 21:19:52 +0000
Subject: [PATCH] fhem.pl: case insensitive devspec2array search patch from
Phill (Forum #84326)
git-svn-id: https://svn.fhem.de/fhem/trunk@16170 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/docs/commandref_frame.html | 6 ++++--
fhem/docs/commandref_frame_DE.html | 4 +++-
fhem/fhem.pl | 4 +++-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/fhem/docs/commandref_frame.html b/fhem/docs/commandref_frame.html
index 0314c4bef..9f384981a 100644
--- a/fhem/docs/commandref_frame.html
+++ b/fhem/docs/commandref_frame.html
@@ -270,8 +270,9 @@ A line ending with \ will be concatenated with the next one, so long lines
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. To restrict the search, use i: as prefix
- for internal values, r: for readings and a: for attributes. See the
- example below.
+ for internal values, r: for readings and a: for attributes.
+ See the example below.
+ Case sensitivity is being ignored using ~ or !~.
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.
@@ -284,6 +285,7 @@ A line ending with \ will be concatenated with the next one, so long lines
set room=kitchen:FILTER=STATE=on off
set room=kitchen:FILTER=STATE!=off off
list disabled=
+ list room~office
list TYPE=FS20 STATE
list i:TYPE=FS20 STATE
diff --git a/fhem/docs/commandref_frame_DE.html b/fhem/docs/commandref_frame_DE.html
index 0dda9218b..223546e55 100644
--- a/fhem/docs/commandref_frame_DE.html
+++ b/fhem/docs/commandref_frame_DE.html
@@ -264,7 +264,8 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.
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.
+ siehe das Beispiel unten. Groß-/Kleinschreibung wird durch die
+ Verwendung von ~ oder !~ ignoriert.
Falls die Spezifikation von :FILTER=NAME=WERT gefolgt wird,
dann wird die zuvor gefundene Liste durch diesen neuen Ausdruck
@@ -279,6 +280,7 @@ Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.
set room=kitchen:FILTER=STATE=on off
set room=kitchen:FILTER=STATE!=off off
list disabled=
+ list room~office
list TYPE=FS20 STATE
list i:TYPE=FS20 STATE
diff --git a/fhem/fhem.pl b/fhem/fhem.pl
index eb75d3be8..a2397cc7b 100755
--- a/fhem/fhem.pl
+++ b/fhem/fhem.pl
@@ -1204,7 +1204,7 @@ devspec2array($;$)
my @res;
foreach my $dName (split(":FILTER=", $l)) {
my ($n,$op,$re) = ("NAME","=",$dName);
- if($dName =~ m/^(.*?)(=|!=|<=|>=|<|>)(.*)$/) {
+ if($dName =~ m/^(.*?)(=|!=|~|!~|<=|>=|<|>)(.*)$/) {
($n,$op,$re) = ($1,$2,$3);
$isAttr = 1; # Compatibility: return "" instead of $name
}
@@ -1250,6 +1250,8 @@ devspec2array($;$)
eval { # a bad regexp is deadly
if(($op eq "=" && $val =~ m/$lre/s) ||
($op eq "!=" && $val !~ m/$lre/s) ||
+ ($op eq "~" && $val =~ m/$lre/is) ||
+ ($op eq "!~" && $val !~ m/$lre/is) ||
($op eq "<" && $valReNum && $val < $re) ||
($op eq ">" && $valReNum && $val > $re) ||
($op eq "<=" && $valReNum && $val <= $re) ||