Minimum und Maximum

Höchste und niedrigste Temperatur für heute und gestern beim Kombisensor anzeigen

Wie bereits erwähnt, schreibe ich die Werte meiner Umweltsensoren in eine Datenbank, um daraus dann eine umfangreiche Wetterstation zu erstellen.

Man kann aber auch mit den Bordmitteln der CCU zumindest eine rudimentäre Wetterstation für den Kombisensor (oder andere Sensoren) einrichten, die Minimal- und Maximalwerte für zwei Tage anzeigt.

Variablen in HomeMatic-Scripten

Die CCU hatte früher ein Limit von maximal 200 Variablen, das mit Firmware-Version 2.29.18 aufgehoben wurde. Dieses Limit bezog sich auf alle Variablen, die in allen Scripten verwendet werden. Gemeint sind Variablen, die direkt im Script definiert werden: object x; object y; var z;

Wenn Scripte nicht mehr funktionieren und bei der Prüfung unerklärliche Syntax-Fehler auftreten, sollte versuchsweise dieses Programm wieder gelöscht oder deaktiviert werden – oder, noch besser, auf die aktuelle Firmware-Version aktualisiert werden.

Benennung von Systemvariablen

Prinzipiell kann man Systemvariablen – so wie allen Objekten in der CCU – beliebige Namen geben, also z. B. auch Umlaute und Sonderzeichen verwenden. Ich empfehle jedoch, sich auf reguläre Buchstaben (a-z, A-Z) zu beschränken: Bei Umlauten und Sonderzeichen besteht die Gefahr, dass Systemvariablen in Scripten nicht überall gefunden werden.

Systemvariable

Die Ausgangslage sieht so aus:

Die Daten des Kombisensors werden angezeigt – aber mehr auch nicht. Ich möchte an dieser Stelle zusätzlich Minimal- und Maximalwerte anzeigen lassen.

Dazu lege ich zunächst fünf Systemvariablen an:

Die Systemvariablen ordne ich dem Kombisensor zu.

Die Reihenfolge kann man ganz leicht festlegen: Jedes Mal, wenn eine Systemvariable zur Änderung aufgerufen und dann mit OK gespeichert wird, wird sie ganz ans Ende verschoben. Wenn ich also zuerst die Dummy-Variable noch einmal speichere, dann Temperatur heute min, dann Temperatur gestern min usw., bekomme ich diese Anzeige:

Als Wert steht überall -40. Das gilt es, zu ändern.

Täglicher Reset

Die gesamte Programmlogik verschwindet in einem einzelnen Programm in der WebUI. Der erste Teil wird über das Zeitmodul getriggert und löst täglich um Mitternacht ein Script aus.

Auch wenn ich an anderer Stelle meinen Unmut über das Zeitmodul geäußert habe: Für so eine simple Aufgabe ist es durchaus geeignet, arbeitet zuverlässig und kollidiert auch nicht mit dem später folgenden zweiten Programmteil.

Das Script, welches täglich aufgerufen wird, ist folgendes:

! HomeMatic-Script
! MINIMUM UND MAXIMUM
! http://www.christian-luetgens.de/homematic/programmierung/garten/minmax/Minimax.htm

object o_temp_max_heute = dom.GetObject ("Temperatur heute max");
object o_temp_max_gestern = dom.GetObject ("Temperatur gestern max");
o_temp_max_gestern.State (o_temp_max_heute.Value());
o_temp_max_heute.State(-40);

object o_temp_min_heute = dom.GetObject ("Temperatur heute min");
object o_temp_min_gestern = dom.GetObject ("Temperatur gestern min");
o_temp_min_gestern.State (o_temp_min_heute.Value());
o_temp_min_heute.State (80);

!  Ende des Scripts

Zunächst werden die beiden Systemvariablen für die Maximaltemperatur anhand ihres Namens gesucht. Wer sie nicht Temperatur heute max und Temperatur gestern max genannt hat, muss an dieser Stelle das Script anpassen.

Die Namen der Systemvariablen müssen natürlich exakt eingegeben werden, sonst bricht das Script während der Ausführung kommentarlos ab.

Dann wird der Wert für die heutige Maximaltemperatur in die Variable von gestern geschrieben und der Wert in der Variable von heute auf -40 zurückgesetzt. Richtig gelesen: Der Maximalwert wird auf die Minimaltemperatur gesetzt.

Schließlich wird dieselbe Funktion für die Minimaltemperatur durchgeführt.

Daten aktualisieren

Der zweite Teil des WebUI-Programms wird immer ausgeführt, wenn der Kombisensor eine neue Temperatur übermittelt.

Größer als -40 °C sollte es in unseren Breitengraden immer sein – zumal der Sensor ja eh keine kleineren Werte als -40 °C übermitteln kann.

Bei Aktualisierung auslösen sorgt dafür, dass auch nach dem Tageswechsel innerhalb weniger Minuten ein frischer Wert in die Variablen geschrieben wird – dazu später mehr.

Das Script, welches hier ausgeführt wird, ist dieses:

! HomeMatic-Script
! MINIMUM UND MAXIMUM
! http://www.christian-luetgens.de/homematic/programmierung/garten/minmax/Minimax.htm

object o_kombisensor = dom.GetObject ("Carport.Kombisensor");
object o_temp_min = dom.GetObject ("Temperatur heute min");
object o_temp_max = dom.GetObject ("Temperatur heute max");

object o_dp = o_kombisensor.DPByHssDP ("TEMPERATURE");
if (o_dp.Value() > o_temp_max.Value()) {
  o_temp_max.State (o_dp.Value());
}
if (o_dp.Value() < o_temp_min.Value()) {
  o_temp_min.State (o_dp.Value());
}

!  Ende des Scripts

Zunächst werden die Objekte in der CCU gesucht: Der Kombisensor natürlich sowie die Minimal- und Maximalwerte von heute. Auch hier gilt: Wenn die Bezeichnungen in der WebUI abweichen, müssen sie im Script geändert werden.

Danach wird der Datenpunkt für die Temperatur aus dem Kombisensor ausgelesen. Welche Datenpunkte es gibt und wie sie heißen, steht in der Script-Dokumentation von eQ-3. Damit kann man das Script auch leicht für andere Werte wie Helligkeit oder Windgeschwindigkeit anpassen.

Dann wird der Maximalwert gesetzt: Ist der aktuelle Wert höher als der bisherige Maximalwert, wird die Variable aktualisiert. Nach dem täglichen Zurücksetzen steht der Wert bei -40, wird also in jeden Fall gesetzt. Es sei denn, es ist kälter als -40 °C, aber dann haben wir eh ganz andere Sorgen.

Schließlich das analoge Spiel beim Minimalwert.

Programm initialisieren

Die Minimal- und Maximalwerte stehen noch alle bei -40 °C, darum sollte man zunächst das Programm ein oder zwei Mal auslösen. Tut man das nicht, funktioniert der Minimalwert erst nach dem nächsten Tageswechsel.

Durch die manuelle Auslösung wird entsprechend der Logik von WebUI-Programmen immer der erste Wenn … -Teil des Programms ausgeführt.

Nach der zweiten Auslösung sollte es zunächst so aussehen:

Wenn die Werte nicht auf -40/+80 zurückgesetzt wurden, stimmt mit dem ersten Script etwas nicht.

Nach 2-3 Minuten meldet sich der Kombisensor bei der CCU und überträgt aktuelle Temperaturwerte. Wenn das passiert, wird wieder das Programm ausgelöst und das zweite Script ausgeführt.

Die aktuelle Temperatur wird für heute eingetragen. Wenn sie sich im weiteren Verlauf ändert, werden die Minimal- und Maximalwerte entsprechend angepasst und driften auseinander.

Navigation