Maximale und minimale Temperatur heute und gestern

Kürzlich wurde der Wunsch an mich herangetragen, die heutige und die gestrige Maximal- und Minimaltemperatur in Systemvariablen zu speichern.

Für mich war bei der Lösung entscheidend, dass diese ohne Modifikationen des Skriptes überall sofort eingesetzt werden kann.
Dafür eignet sich die $src$ Variable der Zentrale eigentlich ziemlich gut, da diese ja den Programmauslöser und somit den Temperatursensor beinhaltet.
Um Mitternacht müssen die Werte von „heute“ in „gestern“ kopiert werden, weshalb ich das Programm zusätzlich noch durch das Zeitmodul täglich um 0 Uhr aufrufe. Das schöne am Zeitmodul ist, dass es eben unter diesem Namen ebenfalls in $src$ auftaucht.

Als erstes müssen also vier Systemvariablen vom Typ Zahl mit Wertebereich -100 bis 100 erstellt werden.
Diese werden wir folgt benannt (Schreibweise bitte korrekt übernehmen):

Max_Temp_gestern
Min_Temp_gestern
Max_Temp_heute
Min_Temp_heute

Systemvariablen für minimale und maximale Temperatur

Dann legt man ein Programm an, dass einmal auf den Temperatursensor (in meinem Fall ein Wandthermostat) bei Temperatur größer -30 °C auf Aktualisierung triggert oder täglich um 00:00 Uhr vom Zeitmodul ausgelöst wird.

Programm für minimale und maximale Temperatur

In den Dann-Zweig fügt man das folgendes Skript zur sofortigen Ausführung ein:

!Trigger auslesen
object trigger = dom.GetObject("$src$");

!Gespeicherte Max- und Min-Temp für heute auslesen
var max_temp = dom.GetObject("Max_Temp_heute").Value();
var min_temp = dom.GetObject("Min_Temp_heute").Value();

if(trigger)
{
   string tname = trigger.Name();
   if (tname != "Zeitmodul") 
   {
      !Auslesen der Werte aus Temperaturfühler
      var ist_temp = dom.GetObject(trigger).Value();
   
      if ((ist_temp > max_temp) || (max_temp == -100)) { dom.GetObject("Max_Temp_heute").State(ist_temp); }
      if ((ist_temp < min_temp) || (max_temp == -100)) { dom.GetObject("Min_Temp_heute").State(ist_temp); }
   }
   else {
      dom.GetObject("Max_Temp_gestern").State(max_temp);
      dom.GetObject("Min_Temp_gestern").State(min_temp);
      dom.GetObject("Max_Temp_heute").State(-100);
   }
}

Das war auch schon alles.
Wird das Programm durch den Temperatursensor getriggert, wird der aktuelle Wert mit der gespeicherten Minimal- und Maximaltemperatur verglichen und wenn einer der Werte unter- bzw. überschritten wurde, wird der aktuelle Wert dafür eingesetzt.
Wird das Programm durch das Zeitmodul getriggert, werden die gespeicherten Werte in die Variablen für gestern kopiert und die Max_Temp_heute Variable mit -100 befüllt.
Das sorgt dafür, dass beim nächsten Triggern durch den Temperatursensor die aktuelle Temperatur in Max_Temp_heute und Min_Temp_heute geschrieben wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.