mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-26 10:34:52 +00:00
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
This commit is contained in:
parent
d1ec8f88b4
commit
924f8b07b4
@ -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
|
||||
|
@ -711,6 +711,7 @@ The following local attributes are used by a wider range of devices:
|
||||
Cancels a named <a href="#sleep">sleep</a>.
|
||||
|
||||
</ul>
|
||||
<!-- cancel end -->
|
||||
|
||||
<a name="define"></a>
|
||||
<h3>define</h3>
|
||||
@ -741,6 +742,7 @@ The following local attributes are used by a wider range of devices:
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
<!-- define end -->
|
||||
|
||||
<a name="defmod"></a>
|
||||
<h3>defmod</h3>
|
||||
@ -757,6 +759,7 @@ The following local attributes are used by a wider range of devices:
|
||||
definition still exists.
|
||||
<br>
|
||||
</ul>
|
||||
<!-- defmod end -->
|
||||
|
||||
|
||||
<a name="delete"></a>
|
||||
@ -775,6 +778,7 @@ The following local attributes are used by a wider range of devices:
|
||||
</ul>
|
||||
<br>
|
||||
</ul>
|
||||
<!-- delete end -->
|
||||
|
||||
<a name="deleteattr"></a>
|
||||
<h3>deleteattr</h3>
|
||||
@ -795,6 +799,7 @@ The following local attributes are used by a wider range of devices:
|
||||
</ul>
|
||||
<br>
|
||||
</ul>
|
||||
<!-- deleteattr end -->
|
||||
|
||||
<a name="deletereading"></a>
|
||||
<h3>deletereading</h3>
|
||||
@ -815,6 +820,7 @@ The following local attributes are used by a wider range of devices:
|
||||
</ul>
|
||||
<br>
|
||||
</ul>
|
||||
<!-- deletereading end -->
|
||||
|
||||
<a name="displayattr"></a>
|
||||
<h3>displayattr</h3>
|
||||
@ -841,6 +847,7 @@ The following local attributes are used by a wider range of devices:
|
||||
</ul>
|
||||
<br>
|
||||
</ul>
|
||||
<!-- displayattr end -->
|
||||
|
||||
<a name="get"></a>
|
||||
<h3>get</h3>
|
||||
@ -860,6 +867,7 @@ The following local attributes are used by a wider range of devices:
|
||||
<br>
|
||||
|
||||
</ul>
|
||||
<!-- get end -->
|
||||
|
||||
|
||||
<a name="include"></a>
|
||||
@ -871,6 +879,7 @@ The following local attributes are used by a wider range of devices:
|
||||
Note: only experts should use this command.
|
||||
<br>
|
||||
</ul>
|
||||
<!-- include end -->
|
||||
|
||||
<a name="inform"></a>
|
||||
<h3>inform</h3>
|
||||
@ -886,6 +895,7 @@ The following local attributes are used by a wider range of devices:
|
||||
|
||||
<br>
|
||||
</ul>
|
||||
<!-- inform end -->
|
||||
|
||||
<a name="list"></a>
|
||||
<h3>list</h3>
|
||||
@ -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.
|
||||
</ul>
|
||||
<!-- list end -->
|
||||
|
||||
<a name="modify"></a>
|
||||
<h3>modify</h3>
|
||||
@ -979,6 +990,7 @@ The following local attributes are used by a wider range of devices:
|
||||
<code>modify lampon 19:00 set lamp on-for-timer 16</code><br>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- modify end -->
|
||||
|
||||
<a name="quit"></a>
|
||||
<h3>quit</h3>
|
||||
@ -993,6 +1005,7 @@ The following local attributes are used by a wider range of devices:
|
||||
<code>quit</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- quit end -->
|
||||
|
||||
<a name="reload"></a>
|
||||
<h3>reload</h3>
|
||||
@ -1007,6 +1020,7 @@ The following local attributes are used by a wider range of devices:
|
||||
<code>reload 99_PRIV</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- reload end -->
|
||||
|
||||
<a name="rename"></a>
|
||||
<h3>rename</h3>
|
||||
@ -1022,6 +1036,7 @@ The following local attributes are used by a wider range of devices:
|
||||
<code>rename FHT_1234 fht.kitchen</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- rename end -->
|
||||
|
||||
<a name="rereadcfg"></a>
|
||||
<h3>rereadcfg</h3>
|
||||
@ -1042,6 +1057,7 @@ The following local attributes are used by a wider range of devices:
|
||||
<code>rereadcfg</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- rereadcfg end -->
|
||||
|
||||
<a name="save"></a>
|
||||
<h3>save</h3>
|
||||
@ -1065,6 +1081,7 @@ The following local attributes are used by a wider range of devices:
|
||||
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- save end -->
|
||||
|
||||
<a name="set"></a>
|
||||
<h3>set</h3>
|
||||
@ -1166,6 +1183,7 @@ The following local attributes are used by a wider range of devices:
|
||||
</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- set end -->
|
||||
|
||||
<a name="setdefaultattr"></a>
|
||||
<h3>setdefaultattr</h3>
|
||||
@ -1194,6 +1212,7 @@ The following local attributes are used by a wider range of devices:
|
||||
<li>There is no way to delete a single default-attribute from the list</li>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- setdefaultattr end -->
|
||||
|
||||
<a name="setreading"></a>
|
||||
<h3>setreading</h3>
|
||||
@ -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.
|
||||
</ul>
|
||||
<!-- setreading end -->
|
||||
|
||||
<a name="setstate"></a>
|
||||
<h3>setstate</h3>
|
||||
@ -1231,6 +1251,7 @@ The following local attributes are used by a wider range of devices:
|
||||
setstate lamp on
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- setstate end -->
|
||||
|
||||
<a name="shutdown"></a>
|
||||
<h3>shutdown</h3>
|
||||
@ -1249,6 +1270,7 @@ The following local attributes are used by a wider range of devices:
|
||||
<code>shutdown 1</code><br>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- shutdown end -->
|
||||
|
||||
<a name="sleep"></a>
|
||||
<h3>sleep</h3>
|
||||
@ -1278,6 +1300,7 @@ The following local attributes are used by a wider range of devices:
|
||||
it issues a WARNING in the FHEM log.
|
||||
<br>
|
||||
</ul>
|
||||
<!-- sleep end -->
|
||||
|
||||
<a name="trigger"></a>
|
||||
<h3>trigger</h3>
|
||||
@ -1294,6 +1317,7 @@ The following local attributes are used by a wider range of devices:
|
||||
<code>trigger btn3 on</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- trigger end -->
|
||||
|
||||
<!-- commands end - diese Zeile nicht entfernen! -->
|
||||
|
||||
|
@ -718,6 +718,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
zu löschen.</li>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- attr end -->
|
||||
|
||||
<a name="cancel"></a>
|
||||
<h3>cancel</h3>
|
||||
@ -727,6 +728,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
Entfernt ein benanntes <a href="#sleep">sleep</a>.
|
||||
|
||||
</ul>
|
||||
<!-- cancel end -->
|
||||
|
||||
<a name="define"></a>
|
||||
<h3>define</h3>
|
||||
@ -758,6 +760,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
</li><br>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- define end -->
|
||||
|
||||
<a name="defmod"></a>
|
||||
<h3>defmod</h3>
|
||||
@ -775,6 +778,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
führen, da mdOff noch existiert.
|
||||
<br>
|
||||
</ul>
|
||||
<!-- defmod end -->
|
||||
|
||||
|
||||
<a name="delete"></a>
|
||||
@ -796,6 +800,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
</ul>
|
||||
<br>
|
||||
</ul>
|
||||
<!-- delete end -->
|
||||
|
||||
<a name="deleteattr"></a>
|
||||
<h3>deleteattr</h3>
|
||||
@ -817,6 +822,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
</ul>
|
||||
<br>
|
||||
</ul>
|
||||
<!-- deleteattr end -->
|
||||
|
||||
<a name="deletereading"></a>
|
||||
<h3>deletereading</h3>
|
||||
@ -841,6 +847,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
</ul>
|
||||
<br>
|
||||
</ul>
|
||||
<!-- deletereading end -->
|
||||
|
||||
<a name="displayattr"></a>
|
||||
<h3>displayattr</h3>
|
||||
@ -869,6 +876,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
</ul>
|
||||
<br>
|
||||
</ul>
|
||||
<!-- displayattr end -->
|
||||
|
||||
<a name="get"></a>
|
||||
<h3>get</h3>
|
||||
@ -886,6 +894,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
<br>
|
||||
|
||||
</ul>
|
||||
<!-- get end -->
|
||||
|
||||
|
||||
<a name="getstate"></a>
|
||||
@ -909,6 +918,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
<br>
|
||||
|
||||
</ul>
|
||||
<!-- getstate end -->
|
||||
|
||||
|
||||
<a name="include"></a>
|
||||
@ -921,6 +931,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
Befehl. Dieses Befehl sollte nur von Experten verwendet werden.
|
||||
<br>
|
||||
</ul>
|
||||
<!-- include end -->
|
||||
|
||||
<a name="inform"></a>
|
||||
<h3>inform</h3>
|
||||
@ -937,6 +948,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
|
||||
<br>
|
||||
</ul>
|
||||
<!-- inform -->
|
||||
|
||||
<a name="list"></a>
|
||||
<h3>list</h3>
|
||||
@ -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.
|
||||
</ul>
|
||||
<!-- list end -->
|
||||
|
||||
|
||||
<a name="modify"></a>
|
||||
@ -1035,6 +1048,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
<code>modify lampon 19:00 set lamp on-for-timer 16</code><br>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- modify end -->
|
||||
|
||||
<a name="quit"></a>
|
||||
<h3>quit</h3>
|
||||
@ -1051,6 +1065,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
<code>quit</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- quit end -->
|
||||
|
||||
|
||||
<a name="reload"></a>
|
||||
@ -1066,6 +1081,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
<code>reload 99_PRIV</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- reload end -->
|
||||
|
||||
<a name="rename"></a>
|
||||
<h3>rename</h3>
|
||||
@ -1082,6 +1098,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
<code>rename FHT_1234 fht.kitchen</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- rename end -->
|
||||
|
||||
|
||||
<a name="rereadcfg"></a>
|
||||
@ -1104,6 +1121,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
<code>rereadcfg</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- rereadcfg end -->
|
||||
|
||||
<a name="save"></a>
|
||||
<h3>save</h3>
|
||||
@ -1129,6 +1147,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- save end -->
|
||||
|
||||
|
||||
<a name="set"></a>
|
||||
@ -1240,6 +1259,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
</ul>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- set end -->
|
||||
|
||||
<a name="setdefaultattr"></a>
|
||||
<h3>setdefaultattr</h3>
|
||||
@ -1270,6 +1290,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
tu löschen.</li>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- setdefaultattr end -->
|
||||
|
||||
|
||||
<a name="setreading"></a>
|
||||
@ -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.
|
||||
</ul>
|
||||
<!-- setreading end -->
|
||||
|
||||
<a name="setstate"></a>
|
||||
<h3>setstate</h3>
|
||||
@ -1311,6 +1333,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
setstate lampe An
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- setstate end -->
|
||||
|
||||
|
||||
<a name="shutdown"></a>
|
||||
@ -1330,24 +1353,7 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
|
||||
<code>shutdown 1</code>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
<a name="trigger"></a>
|
||||
<h3>trigger</h3>
|
||||
<ul>
|
||||
<code>trigger <devspec> <event></code>
|
||||
<br><br>
|
||||
Generiert das Ereignis <event>, was z.Bsp. ein <a
|
||||
href="#notify">notify</a> anstoßen kann, oder den FileLog zum
|
||||
protokollieren dieser Zeile bewegen kann.<br>
|
||||
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||
für Details der <devspec>.<br>
|
||||
<br>
|
||||
Beispiel:
|
||||
<ul>
|
||||
<code>trigger btn3 on</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- shutdown end -->
|
||||
|
||||
<a name="sleep"></a>
|
||||
<h3>sleep</h3>
|
||||
@ -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.
|
||||
</ul>
|
||||
<!-- sleep end -->
|
||||
|
||||
<a name="trigger"></a>
|
||||
<h3>trigger</h3>
|
||||
<ul>
|
||||
<code>trigger <devspec> <event></code>
|
||||
<br><br>
|
||||
Generiert das Ereignis <event>, was z.Bsp. ein <a
|
||||
href="#notify">notify</a> anstoßen kann, oder den FileLog zum
|
||||
protokollieren dieser Zeile bewegen kann.<br>
|
||||
Siehe den Abschnitt über <a href="#devspec">Geräte-Spezifikation</a>
|
||||
für Details der <devspec>.<br>
|
||||
<br>
|
||||
Beispiel:
|
||||
<ul>
|
||||
<code>trigger btn3 on</code>
|
||||
</ul>
|
||||
</ul>
|
||||
<!-- trigger end -->
|
||||
|
||||
<!-- commands end - diese Zeile nicht entfernen! -->
|
||||
|
||||
|
||||
|
44
fhem/fhem.pl
44
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.";
|
||||
|
Loading…
x
Reference in New Issue
Block a user