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.

4 Antworten auf „Maximale und minimale Temperatur heute und gestern“

  1. Hey, ich finde die Lösung wirklich klasse und nutze sie gerne.
    Gibt es Aussichten darauf, dass der Aktor HmIP-STHO in Zukunft auch unterstützt wird?

    Ich habe keine große Wetterstation draußen, sondern nur den STHO. Wäre natürlich klasse, wenn der in einer zukünftigen Version auch unterstützt wird.

    Viele Grüße
    Sebastian

  2. Hallo,
    das elegante Skript funktioniert bei mir tadellos.
    Folgende ergänzende Frage: Meine Wetterstation rastet aus mir unerklärlichen Gründen gelegentlich aus und meldet 80 Grad. Das versaut natürlich den Maximalwert. Lässt sich eine Schleife einbauen, die nur Temperaturen auswertet von unter 80 Grad? Das würde mir sehr helfen.
    Danke
    mbay

    1. Dazu nur folgende Zeile ändern:
      Statt
      if ((ist_temp > max_temp) || (max_temp == -100))
      Schreibst Du
      if (((ist_temp > max_temp) && (ist_temp < 80)) || (max_temp == -100))

Schreibe einen Kommentar

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