From 924f8b07b40d7fe1615a7903d3686214ed97551b Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sun, 6 Aug 2017 11:59:03 +0000 Subject: [PATCH] fhem.pl: search cmds via lowercase/abbrev in modules (Forum #75007) git-svn-id: https://svn.fhem.de/fhem/trunk@14854 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/docs/commandref_frame.html | 24 ++++++++++++ fhem/docs/commandref_frame_DE.html | 62 +++++++++++++++++++++--------- fhem/fhem.pl | 44 +++++++++++++-------- 4 files changed, 96 insertions(+), 35 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index c0c41a874..c61a9653f 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - changed: fhem.pl: search cmds via lowercase/abbrev in modules (Forum #75007) - changed: 14_CUL_TCM97001: Add rain/wind Sensor - changed: 10_IT: Add FreeTec update documentation - changed: configDB: store files base64 encoded, Forum:#74302 diff --git a/fhem/docs/commandref_frame.html b/fhem/docs/commandref_frame.html index 1fe66b4dc..381a78084 100644 --- a/fhem/docs/commandref_frame.html +++ b/fhem/docs/commandref_frame.html @@ -711,6 +711,7 @@ The following local attributes are used by a wider range of devices: Cancels a named sleep. +

define

@@ -741,6 +742,7 @@ The following local attributes are used by a wider range of devices: +

defmod

@@ -757,6 +759,7 @@ The following local attributes are used by a wider range of devices: definition still exists.
+ @@ -775,6 +778,7 @@ The following local attributes are used by a wider range of devices:
+

deleteattr

@@ -795,6 +799,7 @@ The following local attributes are used by a wider range of devices:
+

deletereading

@@ -815,6 +820,7 @@ The following local attributes are used by a wider range of devices:
+

displayattr

@@ -841,6 +847,7 @@ The following local attributes are used by a wider range of devices:
+

get

@@ -860,6 +867,7 @@ The following local attributes are used by a wider range of devices:
+ @@ -871,6 +879,7 @@ The following local attributes are used by a wider range of devices: Note: only experts should use this command.
+

inform

@@ -886,6 +895,7 @@ The following local attributes are used by a wider range of devices:
+

list

@@ -958,6 +968,7 @@ The following local attributes are used by a wider range of devices: device itself, together with the definition of probably associated devices. Note: the algorithm to select associated devices is known to be imperfect. +

modify

@@ -979,6 +990,7 @@ The following local attributes are used by a wider range of devices: modify lampon 19:00 set lamp on-for-timer 16
+

quit

@@ -993,6 +1005,7 @@ The following local attributes are used by a wider range of devices: quit +

reload

@@ -1007,6 +1020,7 @@ The following local attributes are used by a wider range of devices: reload 99_PRIV +

rename

@@ -1022,6 +1036,7 @@ The following local attributes are used by a wider range of devices: rename FHT_1234 fht.kitchen +

rereadcfg

@@ -1042,6 +1057,7 @@ The following local attributes are used by a wider range of devices: rereadcfg +

save

@@ -1065,6 +1081,7 @@ The following local attributes are used by a wider range of devices: +

set

@@ -1166,6 +1183,7 @@ The following local attributes are used by a wider range of devices: +

setdefaultattr

@@ -1194,6 +1212,7 @@ The following local attributes are used by a wider range of devices:
  • There is no way to delete a single default-attribute from the list
  • +

    setreading

    @@ -1212,6 +1231,7 @@ The following local attributes are used by a wider range of devices: Note: setreading won't generate an event for device X, if it is called from a notify for device X. Use "sleep 0.1; setreading X Y Z" in this case. +

    setstate

    @@ -1231,6 +1251,7 @@ The following local attributes are used by a wider range of devices: setstate lamp on +

    shutdown

    @@ -1249,6 +1270,7 @@ The following local attributes are used by a wider range of devices: shutdown 1
    +

    sleep

    @@ -1278,6 +1300,7 @@ The following local attributes are used by a wider range of devices: it issues a WARNING in the FHEM log.
    +

    trigger

    @@ -1294,6 +1317,7 @@ The following local attributes are used by a wider range of devices: trigger btn3 on + diff --git a/fhem/docs/commandref_frame_DE.html b/fhem/docs/commandref_frame_DE.html index a032a4438..ee0526d39 100644 --- a/fhem/docs/commandref_frame_DE.html +++ b/fhem/docs/commandref_frame_DE.html @@ -718,6 +718,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: zu löschen. +

    cancel

    @@ -727,6 +728,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: Entfernt ein benanntes sleep. +

    define

    @@ -758,6 +760,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
    +

    defmod

    @@ -775,6 +778,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: führen, da mdOff noch existiert.
    + @@ -796,6 +800,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
    +

    deleteattr

    @@ -817,6 +822,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
    +

    deletereading

    @@ -841,6 +847,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
    +

    displayattr

    @@ -869,6 +876,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
    +

    get

    @@ -886,6 +894,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
    + @@ -909,6 +918,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
    + @@ -921,6 +931,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: Befehl. Dieses Befehl sollte nur von Experten verwendet werden.
    +

    inform

    @@ -937,6 +948,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
    +

    list

    @@ -1009,6 +1021,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: alle von diesem Gerät vermutlich benögten Geräte. Achtung: die Bestimmung dieser Liste ist ungenau. + @@ -1035,6 +1048,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: modify lampon 19:00 set lamp on-for-timer 16
    +

    quit

    @@ -1051,6 +1065,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: quit + @@ -1066,6 +1081,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: reload 99_PRIV +

    rename

    @@ -1082,6 +1098,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: rename FHT_1234 fht.kitchen + @@ -1104,6 +1121,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: rereadcfg +

    save

    @@ -1129,6 +1147,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: + @@ -1240,6 +1259,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: +

    setdefaultattr

    @@ -1270,6 +1290,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: tu löschen. + @@ -1294,6 +1315,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: aus einem notify für Gerät X aufgerufen wurde. In so einem Fall könnte man auf "sleep 0.1; setreading X Y Z" ausweichen. +

    setstate

    @@ -1311,6 +1333,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: setstate lampe An + @@ -1330,24 +1353,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: shutdown 1 - - - -

    trigger

    - +

    sleep

    @@ -1381,6 +1387,26 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet: blockiert. Das ist unerwünscht, und im FHEM-Log wird eine Warnung protokolliert. + + + +

    trigger

    + + + diff --git a/fhem/fhem.pl b/fhem/fhem.pl index 1e4bdf11b..ca98bcb99 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -1120,36 +1120,46 @@ AnalyzeCommand($$;$) my ($fn, $param) = split("[ \t][ \t]*", $cmd, 2); return undef if(!$fn); + ############# # Search for abbreviation - if(!defined($cmds{$fn})) { - foreach my $f (sort keys %cmds) { - if(length($f) > length($fn) && lc(substr($f,0,length($fn))) eq lc($fn)) { - Log 5, "$fn => $f"; - $fn = $f; - last; + sub + getAbbr($$) + { + my ($fn,$h) = @_; + my $lcfn = lc($fn); + my $fnlen = length($fn); + return $fn if(defined($h->{$fn})); + foreach my $f (sort keys %{$h}) { + if(length($f) >= $fnlen && lc(substr($f,0,$fnlen)) eq $lcfn) { + Log 5, "AnalyzeCommand: trying $f for $fn"; + return $f; } } + return undef; } + + my $lfn = getAbbr($fn,\%cmds); + $fn = $lfn if($lfn); $fn = $cmds{$fn}{ReplacedBy} if(defined($cmds{$fn}) && defined($cmds{$fn}{ReplacedBy})); - return "Forbidden command $fn." if($cl && !Authorized($cl,"cmd",$fn)); - ############# - # autoload commands. - my $lcfn = lc($fn); - $fn = $lcfn if(defined($cmds{$lcfn})); - if(!defined($cmds{$fn}) || !defined($cmds{$fn}{Fn})) { + # autoload command with ModuleName + if(!$cmds{$fn} || !defined($cmds{$fn}{Fn})) { my $modName; - map { $modName = $_ if($lcfn eq lc($_)); } keys %modules; - $modName = $cmds{$lcfn}{ModuleName} - if($cmds{$lcfn} && $cmds{$lcfn}{ModuleName}); + $modName = $cmds{$fn}{ModuleName} if($cmds{$fn} && $cmds{$fn}{ModuleName}); + $modName = getAbbr($fn,\%modules) if(!$modName); + LoadModule($modName) if($modName); - $fn = $lcfn if($cmds{$lcfn}); - return "Unknown command $fn, try help." if(!$cmds{$fn} || !$cmds{$fn}{Fn}); + my $lfn = getAbbr($fn,\%cmds); + $fn = $lfn if($lfn); } + return "Unknown command $fn, try help." if(!$cmds{$fn} || !$cmds{$fn}{Fn}); + + return "Forbidden command $fn." if($cl && !Authorized($cl,"cmd",$fn)); + if($cl && $cmds{$fn}{ClientFilter} && $cl->{TYPE} !~ m/$cmds{$fn}{ClientFilter}/) { return "This command ($fn) is not valid for this input channel.";