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
-
- trigger <devspec> <event>
-
- Generiert das Ereignis <event>, was z.Bsp. ein notify anstoßen kann, oder den FileLog zum
- protokollieren dieser Zeile bewegen kann.
- Siehe den Abschnitt über Geräte-Spezifikation
- für Details der <devspec>.
-
- Beispiel:
-
-
+
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
+
+ trigger <devspec> <event>
+
+ Generiert das Ereignis <event>, was z.Bsp. ein notify anstoßen kann, oder den FileLog zum
+ protokollieren dieser Zeile bewegen kann.
+ Siehe den Abschnitt über Geräte-Spezifikation
+ für Details der <devspec>.
+
+ Beispiel:
+
+
+
+
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.";