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) ||