AT um eine Temperaturabhängige Nachtabsenkung zu realisieren: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 48: | Zeile 48: | ||
if ($var1 gt $var2)...</nowiki> | if ($var1 gt $var2)...</nowiki> | ||
Für weitere Beispiele bietet es sich an auch mal einen Blick in die ''fhem.pl ''zu werfen. | Für weitere Beispiele bietet es sich an auch mal einen Blick in die ''fhem.pl ''zu werfen. | ||
[[Kategorie:Code Snippets]] |
Version vom 11. Mai 2013, 23:10 Uhr
Für die Grundlegende Funktion von ATbitte einen Blick in die Commandref werfen
Zielvorgabe:
Jeden Tag um 22:30 soll die Temperatur auf 17° abgesenkt werden (hier das FHEM-Gerät "wz_Heizung") wenn die Temperatur vorher über 17° eingestellt war - war die Temperatur vorher niedriger eingestellt war soll nichts passieren.
Der Befehl für die fhem.cfg lautet dazu wie folgt:
Einzeiler:
define wz_HeizungNachtabsenkung at 22:30:00 {if(ReadingsVal('wz_Heizung', 'desired-temp', 0) > 17.0) {fhem("set wz_Heizung desired-temp 17.0")} }
Mehrzeiler:
define wz_HeizungNachtabsenkung at 22:30:00 {\ if(ReadingsVal('wz_Heizung', 'desired-temp', 0) > 17.0) {\ fhem("set wz_Heizung desired-temp 17.0")\ }\ }
Im Detail:
- define wz_HeizungNachtabsenkung => lege ein neues Objekt wz_HeizungNachtabsenkung und ...
- at *22:30:00 => ... prüfe täglich um 22:30 Uhr ...
- if(ReadingsVal('wz_Heizung', 'desired-temp', 0) > 17.0 => ... ob (ReadingsVal -> lese Werte) ...
('wz_Heizung', 'desired-temp', 0)=> ... ob am Gerät wz_Heizungder Wert desired-temp...
> 17.0=> ... größer als 17.0 ist, wenn ja dann ... - fhem("set wz_Heizung desired-temp 17.0") => ... soll FHEM am Gerät wz_Heizung den Wert desired-temp auf 17.0° setzen.
Anmerkung zu ReadingsVal:
ReadingsVal(<DeviceName>, <ReadingsName>, <Defaultwert>)
Damit wird das entsprechende Reading am entsprechenden Device ausgelesen. Gibt es das Reading nicht, wird Defaultwert zurückgegeben.
Man kann Prozedurergebnisse (wie dieses von ReadingsVal) und Variablen bei Vergleichen natürlich mischen, und muss diese Ergebnisse nicht unbedingt in Variablen zwischenspeichern. Das tut man meistens nur, wenn das Ermitteln viel Zeit in Anspruch nimmt und man diesen mehrfach benötigt, oder der Wert durch Überschreiben verloren geht.
Perl hat als Besonderheit, dass man einer Variablen nicht ansieht, ob sie eine Zahl oder einen String enthält. Das sind alles sogenannte Skalare (im Gegensatz zu Arrays oder Hashlisten). Um bei einem Vergleich aber die durchaus unterschiedlichen Ergebnisse erzwingen zu können, gibt es eben unterschiedliche Operatoren dafür:
<, >, <=, >=, ==, != sind numerische Operatoren lt, gt, le, ge, eq, ne sind die entsprechenden Stringvergleichsoperatoren
Beispiel:
my $var1 = '10'; my $var2 = '2'; # Ergibt true: if ($var1 > $var2)... # Ergibt false: if ($var1 gt $var2)...
Für weitere Beispiele bietet es sich an auch mal einen Blick in die fhem.pl zu werfen.