If-condition: Unterschied zwischen den Versionen
| Zeile 12: | Zeile 12: | ||
| == komplexere if-Bedingung == | == komplexere if-Bedingung == | ||
| Achtung Klammersetzung! Hiermit wird das komplette Verhalten beeinflusst! | |||
|   <nowiki>define a2 at *00:01:00 { if ($wday == 3) || ($wday == 4)  { fhem("set LICHT off") } }</nowiki> |   <nowiki>define a2 at *00:01:00 { if ($wday == 3) || ($wday == 4)  { fhem("set LICHT off") } }</nowiki> | ||
| Zeile 18: | Zeile 20: | ||
|   <nowiki>define a2 at *00:01:00 { if ($wday == 3) && ($hour > 18 || $hour < 5)  { fhem("set LICHT off") } }</nowiki> |   <nowiki>define a2 at *00:01:00 { if ($wday == 3) && ($hour > 18 || $hour < 5)  { fhem("set LICHT off") } }</nowiki> | ||
| * mit den zwei "&" wird ein "und" formuliert. (Also nur Mittwochs UND Später als 18:00 ODER früher als 5:00  schalten) | * mit den zwei "&" wird ein "und" formuliert. (Also nur Mittwochs UND Später als 18:00 ODER früher als 5:00  schalten) | ||
|  <nowiki>define a2 at *00:01:00 { if ($wday == 3) && ($hour > 18) || ($hour < 5)  { fhem("set LICHT off") } }</nowiki> | |||
| * !!!Achtung: Dieser Befehl schaltet Mittwochs ab 18:00 und jeden Tag! vor 5:00 !!!! | |||
| == If-Else-Bedingung == | == If-Else-Bedingung == | ||
Version vom 14. Oktober 2013, 12:56 Uhr
Hier entsteht eine Erklärung über die richtige Benutzung von IF-Bedingungen
If-Abfragen können Bedingungen prüfen und abhängig davon Befehle ausführen. Die Syntax und die Verwendung sollen an möglichst vielen Beispielen erläutert werden.
einfache If-Bedingung
define einschalten at +*00:15 { if ( "1" eq "1" ) { fhem("set Funkschalter on") }}
- Die äusseren geschweiften Klammern sagen fhem, dass innerhalb PERL-Befehle ausgeführt werden.
- Das Wort if leitet die Bedingung ein.
- In den runden Klammern steht die Bedingung
- In den folgenden geschweifen Klammern steht ebenfalls Perl-Code, der ausgeführt wird, falls die Bedingung zutrifft.
- Der Perlcode besteht nun wiederum aus der anweisung, einen fhem-Befehl auszuführen. Dieser wird zwischen die runden Klammern in Anführungsstriche gesetzt.
komplexere if-Bedingung
Achtung Klammersetzung! Hiermit wird das komplette Verhalten beeinflusst!
define a2 at *00:01:00 { if ($wday == 3) || ($wday == 4)  { fhem("set LICHT off") } }
- mit den zwei senkrechten Strichen wird ein "oder" formuliert. (Also nur Mittwoch ODER Donnerstag schalten)
define a2 at *00:01:00 { if ($wday == 3) && ($hour > 18 || $hour < 5)  { fhem("set LICHT off") } }
- mit den zwei "&" wird ein "und" formuliert. (Also nur Mittwochs UND Später als 18:00 ODER früher als 5:00 schalten)
define a2 at *00:01:00 { if ($wday == 3) && ($hour > 18) || ($hour < 5)  { fhem("set LICHT off") } }
- !!!Achtung: Dieser Befehl schaltet Mittwochs ab 18:00 und jeden Tag! vor 5:00 !!!!
If-Else-Bedingung
define einschalten at +*00:15 { if ( "1" eq "1" ) { fhem("set Funkschalter on") } else { fhem("set funkschalter off")}
wenn mehrere Bedingungen ausgeführt werden sollen:
define einschalten at +*00:15 { if ( "1" eq "1" ) { fhem("set Funkschalter on;; set FHT80B desired-temp 21") }
Die beiden Bedingungen müssen nun mit zwei Semikola getrennt werden, da PERL vor der Übergabe an FHEM den Befehl übersetzt und dabei das eine Semikolon entfernt.