From 3d294bff04d84faeee48a2f26a0cf13800770600 Mon Sep 17 00:00:00 2001
From: rudolfkoenig <>
Date: Wed, 15 Apr 2015 13:21:04 +0000
Subject: [PATCH] fhem.pl: add defmod command (Forum #36265)
git-svn-id: https://svn.fhem.de/fhem/trunk@8440 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/docs/commandref_frame.html | 19 +++++++++++++++-
fhem/docs/commandref_frame_DE.html | 35 ++++++++++++++++++++++--------
fhem/fhem.pl | 23 ++++++++++++++++++--
3 files changed, 65 insertions(+), 12 deletions(-)
diff --git a/fhem/docs/commandref_frame.html b/fhem/docs/commandref_frame.html
index a00f780cb..bd4790e1d 100644
--- a/fhem/docs/commandref_frame.html
+++ b/fhem/docs/commandref_frame.html
@@ -43,6 +43,7 @@
copy
createlog
define
+ defmod
delete
deleteattr
deletereading
@@ -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)".
- Use "define <name> ?" to get a list of possible types.
After definition, the global event "DEFINED" will be generated, see the
notify section for details.
@@ -720,6 +720,23 @@ The following local attributes are used by a wider range of devices:
+
+
defmod
+
+ defmod <name> <type> <type-specific>
+
+ 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
+
+ define mdNtfy notify motionDetector defmod mdOff at +00:10 set lamp off
+
+ 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.
+
+
+
+
delete
diff --git a/fhem/docs/commandref_frame_DE.html b/fhem/docs/commandref_frame_DE.html
index 2e65b6a63..2d1755d13 100644
--- a/fhem/docs/commandref_frame_DE.html
+++ b/fhem/docs/commandref_frame_DE.html
@@ -734,17 +734,34 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
define <name> <type> <type-specific>
- Definiert ein Gerät. Sie müssen Geräte einrichten um sie zu beeinflussen (z.B.
- das Kommando set on/off auszuführen). Gleichfalls ist das Logfile besser
- lesbar wenn es z.B.
- "lamp off" anstatt "Device 5673, Button 00, Code 00 (off)" als Text enthält.
- Geben Sie an der Befehlszeile "define <name> ?" ein, um eine Liste der
- verfügbaren "types" zu erhalten.
- Nach der Durchführung das globale Ereignis "MODIFIED" wird generiert.
+
+ Definiert ein Gerät. Sie müssen Geräte einrichten um sie zu
+ beeinflussen (z.B. das Kommando set on/off auszuführen). Gleichfalls
+ ist das Logfile besser lesbar wenn es z.B. "lamp off" anstatt "Device 5673,
+ Button 00, Code 00 (off)" als Text enthält.
+
+ Nach der Durchführung wird das globale Ereignis "DEFINED" generiert.
- Jedes Gerät besitzt unterschiedliche hinzufügbare Argumente per Definition,
- lesen Sie sich bitte die zu dem jeweiligen Gerät gehörenden Abschnitte durch.
+ Je nach Typ benötigt man unterscheidliche Argumente, lesen Sie sich
+ bitte die zu dem jeweiligen Gerät gehörenden Abschnitte durch.
+
+
+
+
+defmod
+
+ defmod <name> <type> <type-specific>
+
+ Definiert ein Gerät, oder ändert es, falls es exisitiert. Um
+ z.Bsp. eine Lampe 10 Minuten nach der letzten Meldung eines Bewegungsmelders
+ abzuschalten, könnte man folgendes definieren:
+
+ define mdNtfy notify motionDetector defmod mdOff at +00:10 set lamp off
+
+ Falls man statt defmod ein define verwenden würde, dann würde eine
+ Meldung innerhalb von 10 Minuten nach der letzten Meldung zu einem Fehler
+ führen, da mdOff noch existiert.
diff --git a/fhem/fhem.pl b/fhem/fhem.pl
index 891495dba..5ed954ffb 100755
--- a/fhem/fhem.pl
+++ b/fhem/fhem.pl
@@ -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=>" [],set attribute for "},
"createlog"=> { ModuleName => "autocreate" },
"define" => { Fn=>"CommandDefine",
- Hlp=>" ,define a device/at/notify entity" },
+ Hlp=>" ,define a device" },
+ "defmod" => { Fn=>"CommandDefMod",
+ Hlp=>" ,define or modify a device" },
"deleteattr" => { Fn=>"CommandDeleteAttr",
Hlp=>" [],delete attribute for " },
"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 "
+ 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