If-condition: Unterschied zwischen den Versionen

Aus FHEMWiki
Zeile 25: Zeile 25:


== If-Else-Bedingung ==
== If-Else-Bedingung ==
  <nowiki>define einschalten at +*00:15 { if ( &quot;1&quot; eq &quot;1&quot; ) { fhem(&quot;set Funkschalter on&quot;) } else { fhem(&quot;set funkschalter off&quot;)}</nowiki>
  <nowiki>define einschalten at +*00:15 {if(Value("Variable") eq "on") { fhem(&quot;set Funkschalter on&quot;) } else { fhem(&quot;set funkschalter off&quot;)}}</nowiki>
wenn mehrere Bedingungen ausgeführt werden sollen:
wenn mehrere Bedingungen ausgeführt werden sollen:


  <nowiki>define einschalten at +*00:15 { if ( &quot;1&quot; eq &quot;1&quot; ) { fhem(&quot;set Funkschalter on;; set FHT80B desired-temp 21&quot;) }</nowiki>
  <nowiki>define einschalten at +*00:15 {if(Value("Variable") eq "on") { fhem(&quot;set Funkschalter on;; set FHT80B desired-temp 21&quot;) }}</nowiki>
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.
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.


[[Kategorie:HOWTOS]]
[[Kategorie:HOWTOS]]

Version vom 26. Januar 2014, 22:30 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(Value("Variable") eq "on") { fhem("set Funkschalter on") } else { fhem("set funkschalter off")}}

wenn mehrere Bedingungen ausgeführt werden sollen:

define einschalten at +*00:15  {if(Value("Variable") eq "on") { 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.