2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 06:39:11 +00:00

fhem.pl: add defmod command (Forum #36265)

git-svn-id: https://svn.fhem.de/fhem/trunk@8440 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2015-04-15 13:21:04 +00:00
parent 86f3b188c2
commit 3d294bff04
3 changed files with 65 additions and 12 deletions

View File

@ -43,6 +43,7 @@
<a href="#copy">copy</a> &nbsp;
<a href="#createlog">createlog</a> &nbsp;
<a href="#define">define</a> &nbsp;
<a href="#defmod">defmod</a> &nbsp;
<a href="#delete">delete</a> &nbsp;
<a href="#deleteattr">deleteattr</a> &nbsp;
<a href="#deletereading">deletereading</a> &nbsp;
@ -710,7 +711,6 @@ The following local attributes are used by a wider range of devices:
Define a device. You need devices if you want to manipulate them (e.g.
set on/off), and the logfile is also more readable if it contains e.g.
"lamp off" instead of "Device 5673, Button 00, Code 00 (off)". <br>
Use "define &lt;name&gt; ?" to get a list of possible types.<br>
After definition, the global event "DEFINED" will be generated, see the
notify section for details.<br>
<br><br>
@ -720,6 +720,23 @@ The following local attributes are used by a wider range of devices:
<br>
</ul>
<a name="defmod"></a>
<h3>defmod</h3>
<ul>
<code>defmod &lt;name&gt; &lt;type&gt; &lt;type-specific&gt;</code><br>
<br>
Define a device or modify it, if it already exists. E.g. to switch off a lamp
10 Minutes after the last message from the motion detector, you may use
<ul><code>
define mdNtfy notify motionDetector defmod mdOff at +00:10 set lamp off
</code></ul>
Using define here for the mdOff will generate an error if the motion detector
triggers within the 10 minutes after the first event, as the mdOff at
definition still exists.
<br>
</ul>
<a name="delete"></a>
<h3>delete</h3>
<ul>

View File

@ -734,17 +734,34 @@ Die folgenden lokalen Attribute werden von mehreren Ger&auml;ten verwendet:
<ul>
<code>define &lt;name&gt; &lt;type&gt; &lt;type-specific&gt;</code><br>
<br>
Definiert ein Ger&auml;t. Sie m&uuml;ssen Ger&auml;te einrichten um sie zu beeinflussen (z.B.
das Kommando set on/off auszuf&uuml;hren). Gleichfalls ist das Logfile besser
lesbar wenn es z.B.
"lamp off" anstatt "Device 5673, Button 00, Code 00 (off)" als Text enth&auml;lt. <br>
Geben Sie an der Befehlszeile "define &lt;name&gt; ?" ein, um eine Liste der
verf&uuml;gbaren &quot;types&quot; zu erhalten.<br>
Nach der Durchf&uuml;hrung das globale Ereignis "MODIFIED" wird generiert.
Definiert ein Ger&auml;t. Sie m&uuml;ssen Ger&auml;te einrichten um sie zu
beeinflussen (z.B. das Kommando set on/off auszuf&uuml;hren). Gleichfalls
ist das Logfile besser lesbar wenn es z.B. "lamp off" anstatt "Device 5673,
Button 00, Code 00 (off)" als Text enth&auml;lt. <br>
Nach der Durchf&uuml;hrung wird das globale Ereignis "DEFINED" generiert.
<br><br>
Jedes Ger&auml;t besitzt unterschiedliche hinzuf&uuml;gbare Argumente per Definition,
lesen Sie sich bitte die zu dem jeweiligen Ger&auml;t geh&ouml;renden Abschnitte durch.<br>
Je nach Typ ben&ouml;tigt man unterscheidliche Argumente, lesen Sie sich
bitte die zu dem jeweiligen Ger&auml;t geh&ouml;renden Abschnitte durch.
<br>
</ul>
<a name="defmod"></a>
<h3>defmod</h3>
<ul>
<code>defmod &lt;name&gt; &lt;type&gt; &lt;type-specific&gt;</code><br>
<br>
Definiert ein Ger&auml;t, oder &auml;ndert es, falls es exisitiert. Um
z.Bsp. eine Lampe 10 Minuten nach der letzten Meldung eines Bewegungsmelders
abzuschalten, k&ouml;nnte man folgendes definieren:
<ul><code>
define mdNtfy notify motionDetector defmod mdOff at +00:10 set lamp off
</code></ul>
Falls man statt defmod ein define verwenden w&uuml;rde, dann w&uuml;rde eine
Meldung innerhalb von 10 Minuten nach der letzten Meldung zu einem Fehler
f&uuml;hren, da mdOff noch existiert.
<br>
</ul>

View File

@ -129,6 +129,7 @@ sub utf8ToLatin1($);
sub CommandAttr($$);
sub CommandDefaultAttr($$);
sub CommandDefine($$);
sub CommandDefMod($$);
sub CommandDelete($$);
sub CommandDeleteAttr($$);
sub CommandDeleteReading($$);
@ -268,7 +269,9 @@ $readingFnAttributes = "event-on-change-reading event-on-update-reading ".
Hlp=>"<devspec> <attrname> [<attrval>],set attribute for <devspec>"},
"createlog"=> { ModuleName => "autocreate" },
"define" => { Fn=>"CommandDefine",
Hlp=>"<name> <type> <options>,define a device/at/notify entity" },
Hlp=>"<name> <type> <options>,define a device" },
"defmod" => { Fn=>"CommandDefMod",
Hlp=>"<name> <type> <options>,define or modify a device" },
"deleteattr" => { Fn=>"CommandDeleteAttr",
Hlp=>"<devspec> [<attrname>],delete attribute for <devspec>" },
"deletereading" => { Fn=>"CommandDeleteReading",
@ -1553,7 +1556,7 @@ sub
CommandDefine($$)
{
my ($cl, $def) = @_;
my @a = split("[ \t][ \t]*", $def, 3);
my @a = split("[ \t]+", $def, 3);
my $ignoreErr;
# used by RSS in fhem.cfg.demo, with no GD installed
@ -1650,6 +1653,22 @@ CommandModify($$)
return $ret;
}
#####################################
sub
CommandDefMod($$)
{
my ($cl, $def) = @_;
my @a = split("[ \t]+", $def, 3);
return "Usage: defmod <name> <type> <type dependent arguments>"
if(int(@a) < 2);
if($defs{$a[0]}) {
$def = $a[2] ? "$a[0] $a[2]" : $a[0];
return CommandModify($cl, $def);
} else {
return CommandDefine($cl, $def);
}
}
#############
# internal
sub