From 2cc60609d62264fe8ce8beb60f0fa7862a2592d9 Mon Sep 17 00:00:00 2001 From: damian-s <> Date: Sat, 1 Nov 2014 19:12:51 +0000 Subject: [PATCH] 98_IF.pm: changed docu git-svn-id: https://svn.fhem.de/fhem/trunk@6855 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_IF.pm | 103 +++++++++++++++------------------------------ 1 file changed, 35 insertions(+), 68 deletions(-) diff --git a/fhem/FHEM/98_IF.pm b/fhem/FHEM/98_IF.pm index 20c0ede56..8147b0e48 100644 --- a/fhem/FHEM/98_IF.pm +++ b/fhem/FHEM/98_IF.pm @@ -452,76 +452,19 @@ CommandIF($$)
Es werden <FHEM-Kommandos1> ausgeführt, wenn <Bedingung> erfüllt ist, sonst werden <FHEM-Kommanodos2> ausgeführt.

- Beim IF-Befehl handelt es sich um einen FHEM-Befehl. Der Befehl kann überall dort genutzt werden, wo FHEM-Befehle vorkommen dürfen. - Im Gegensatz zu Perl-if bleibt man auf der FHEM-Ebene und muss nicht auf die Perl-Ebene, um FHEM-Befehle mit Hilfe der fhem-Funktion auszuführen.
+ Beim IF-Befehl (IF in Großbuchstaben) handelt es sich um einen FHEM-Befehl. Der Befehl kann überall dort genutzt werden, wo FHEM-Befehle vorkommen dürfen. + Im Gegensatz zu Perl-if (if in Kleinbuchstaben) bleibt man auf der FHEM-Ebene und muss nicht auf die Perl-Ebene, um FHEM-Befehle mit Hilfe der fhem-Funktion auszuführen.

- IF ist kein eigenständig arbeitendes Modul, sondern ein FHEM-Befehl, der nur in Kombination mit anderen Modulen, wie z. B. notify oder at, sinnvoll eingesetzt werden kann.
+ IF ist kein eigenständig arbeitendes Modul, sondern ein FHEM-Befehl, der nur in Kombination mit anderen Modulen, wie z. B. notify oder at, sinnvoll eingesetzt werden kann. Es gibt inzwischen ein neueres DOIF-Modul, welches auf der Syntax vom IF-Befehl aufbaut. Es arbeitet im Gegensatz zu IF als Modul selbstständig ereignis- und zeitgesteuert ohne notify bzw. at. Damit lassen sich viele Problemlösungen eleganter, jeweils mit einem einzigen Modul, realisieren.

- In der Bedingung des IF-Befehls wird die vollständige Syntax des Perl-if unterstützt. Mögliche Operatoren sind u. a.:
+ In der Bedingung des IF-Befehls wird die vollständige Syntax des Perl-if unterstützt. Stati und Readings von Devices werden in eckigen Klammern angegeben.

-
    - ++ -- Inkrementieren, Dekrementieren
    - ** Potenzierung
    - ! ~ logische und bitweise Negation
    - =~ !~ Bindung an Seite reguläre Ausdrücke
    - * / % x Multiplikation, Division, Modulo-Operation, Zeichenkettenwiederholung
    - + - . Addition, Subtraktion, Zeichenkettenaddition
    - < <= > >= lt le gt ge Vergleich größer/kleiner
    - == != eq ne Gleichheit/Ungleichheit
    - & bitweises UND
    - | ^ bitweises ODER - inklusiv/exklusiv
    - && logisches UND
    - || logisches ODER
    - not logische Negation
    - and logisches UND
    - or xor logisches ODER (inklusiv/exklusiv)
    -
-
-Features:
-
- -
-
- Die Syntax für die Nutzung von Readings oder Internals (ein Internal wird durch ein & gekennzeichnet)
-
- [<device>:<reading>:<format>|[<regulärer Ausdruck>]] - bzw. [<device>:&<internal>:<format>|[<regulärer Ausdruck>]]
-
- <format> und [<regulärer Ausdruck>] sind Filteroptionen, sie können optional genutzt werden.
-
- Mögliche Formatangaben für <format> sind:
-
- 'd' zum Filtern von positiven und negatien Dezimalzahlen. [<device>:<reading>:d] entspricht [<device>:<reading>:[(-?\d+(\.\d+)?)]]
-
- Wenn nur der Status eines Devices genutzt werden soll, dann kann auch nur das Device angeben werden:
-
- [<device>] entspricht [<device>:&STATE]

Beispiele:

- IF in Kombination mit at-Modul, Readingangabe in der Bedingung:
+ IF in Kombination mit at-Modul, Readingangabe [<Device>:<Reading>] in der Bedingung:

define check at +00:10 IF ([outdoor:humidity] > 70) (set switch1 off) ELSE (set switch1 on)

@@ -529,7 +472,7 @@ CommandIF($$)
define check at +00:10 IF ([outdoor] eq "open") (set switch1 on)

- entspricht mit Angabe des Internals:
+ entspricht mit Angabe des Internals mit &:

define check at +00:10 IF ([outdoor:&STATE] eq "open") (set switch1 on)

@@ -539,7 +482,7 @@ CommandIF($$)
Geschachtelte Angabe von mehreren IF-Befehlen kann in mehreren Zeilen mit Einrückungen zwecks übersichtlicher Darstellung über FHEM-Weboberfläche in der DEF-Eingabe eingegeben werden.
- Die erste Zeile "define test notify lamp " muss mit einem Leerzeichen enden, bevor die Zeile mit Enter umgebrochen wird - das ist eine Eigenschaft von FHEM und nicht von IF:
+ Die erste Zeile "define test notify lamp " muss mit einem Leerzeichen enden, bevor die Zeile mit Enter umgebrochen wird - das ist eine Eigenschaft von notify und nicht von IF:

define test notify lamp
IF ([lamp] eq "on") (
@@ -577,7 +520,6 @@ CommandIF($$) (set switch on)

- Filtern nach Zahlen im Reading "temperature":

define settemp at 22:00 IF ([tempsens:temperature:d] >= 10) (set heating on)
@@ -586,9 +528,9 @@ CommandIF($$)
define activity notify move IF ([move:&STATE:[(on|off)]] eq "on" and $we) (set lamp off)

- Beispiel für die Nutzung von Readings im dann-Fall:
+ Beispiel für die Nutzung des Status eines Devices im Ausführungsteil. Hier: "lamp1" wird mit dem Status von "lamp2" geschaltet:

- define temp at 18:00 IF ([outdoor:temperature] > 10) (set lampe [dummy])
+ define temp at 18:00 IF ([outdoor:temperature] > 10) (set lamp1 [lamp2])

Falls bei einem FHEM-Befehl ein Perl-Ausdruck mit Readings zuvor ausgewertet werden soll, so muss er in geschweifte und runde Klammern gesetzt werden.
Beispiel: Wenn um 18:00 Uhr die Außentemperatur höher ist als 10 Grad, dann wird die Solltemperatur um 1 Grad erhöht.
@@ -623,6 +565,31 @@ CommandIF($$) Kombination von Perl und FHEM-Befehlen ($NAME sowie $EVENT können ebenso benutzt werden):

define mail notify door:open IF ([alarm] eq "on")({system("wmail $NAME:$EVENT")},set alarm_signal on)
- +
+ Der IF-Befehl dient in erster Linie zur Vereinfachung der Schreibweise in Kombination mit anderen FHEM-Modulen wie at, notify oder DOIF. + Intern wird der IF-Befehl zur Ausführung in einen Perl if-Befehl umgesetzt. Das soll anhand von Beispielen verdeutlicht werden:
+
+ IF ([switch] eq "off") (set lamp on)
+
+ entspricht:
+
+ {if (Value('switch') eq "off"){fhem('set lamp on')}}
+
+
+ IF ([living_room:temperature] > 12) (set lamp on, set lamp2 off)
+
+ entspricht:
+
+ {if (ReadingVal('living_room','temperature','') > 12) {fhem('set lamp on');;fhem('set lamp2 off')}}
+
+
+ IF ([bathroom:humidity] > 70) (set led red) ELSE (set led green)
+
+ entspricht:
+
+ {if (ReadingsVal('bathroom','humidity','') > 70) {fhem('set led red')} else {fhem('set led green')}}
+
+
+ =end html_DE =cut