• „5G ja, aber mit geblockten Frequenzbereichen für die Industrie“ 13. Dezember 2018
    Wenige Wochen ist die Entscheidung der Frequenzvergabe für den 5G-Mobilfunk nun her, doch der mediale Rummel um das Thema scheint nicht abzuebben. Braucht man 5G für die Industrie oder reichen nicht auch andere, traditionelle oder bewährte Kommunikationsverfahren? Auch auf der SPS IPC Drives 2018 in Nürnberg war das ein Thema.
Know-how für alle

FHEM if

 

Das in FHEM verwendete if-Statement kan in einer einfachen if-Bedingung so angewendet werden
define einschalten at +*00:15 { if ( "1" eq "1" ) { fhem("set Funkschalter on") }}

Erklärung:
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

(Perl-Vergleichsoperatoren sind für Zeichen(ketten)- und Zahlenvergleiche unterschiedlich!)

In den folgenden geschweifen Klammern steht ebenfalls Perl-Code, der ausgeführt wird, falls die Bedingung zutrifft.
Der Perl-Code besteht nun wiederum aus der Anweisung, einen FHEM-Befehl auszuführen. Dieser wird zwischen die runden Klammern in Anführungsstriche gesetzt.

 

Die if-Bedingung kann auch in komplexen Strukturen eingesetzt werden, eta so:
mit den zwei senkrechten Strichen wird ein „oder“ formuliert (also nur Mittwoch ODER Donnerstag schalten):

define a2 at *00:01:00 { if (($wday == 3) || ($wday == 4)) { fhem("set LICHT off") } }

mit den zwei „&“ wird ein „und“ formuliert (also nur mittwochs UND auch dann nur zwischen 18:00 und 5:00 Uhr schalten):

define a2 at *00:01:00 { if (($wday == 3) && (($hour >= 18 || $hour < 5))) { fhem("set LICHT off") } }

Änderung der Logik durch andere Klammersetzung:

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 außerdem jeden Tag vor 5:00
Die 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.

Ein weiteres Beispiel:
Einfache if Abfrage / if Bedingung mit FHEM

FHEM stellt den aktuellen Wochentag in der Variable $wday zur Verfügung, es gibt aber noch viel mehr Variablen zur Zeit-Berechnung: Diese haben wir in diesem Artikel aufgeführt. Mit der $wday Variable lässt sich bestimmen, ob heute Montag, Dienstag, Mittwoch oder aber Wochenende ist. Die Zählung beginnt bei „0“, was Sonntag entspricht:

Sonntag: $wday = 0
Montag: $wday = 1
Dienstag: $wday = 2
Mittwoch: $wday = 3
Donnerstag: $wday = 4
Freitag: $wday = 5
Samstag: $wday = 6

» Tipp: Diese vordefinierten Variablen stehen in FHEM zur Verfügung

FHEM Aktor nur an einem bestimmten Tag schalten

Mit der Abfrage der Variable „$wday“ erhält man so den aktuellen Tag, den man in einer if Abfrage nutzen kann, um einen FHEM Aktor ein- oder auszuschalten. Um also eine Lampe nur Montags zu schalten, hilft dieser define-Befehl:

define LampeSZ at *08:15:00 { if($wday == 1) { fhem("set SCHLAFZIMMER on") }}

Damit wird der FHEM-Befehl „set SCHLAFZIMMER on“ zum Schalten einer Schlafzimmer-Lampe ausgeführt, wenn es Montag, 08:15 Uhr ist.

 

Sport's by Runnerinn

Trek Bike TrekkInn FR

Tennis Smashinn

Count per Day
  • 87Besucher heute: