HMIP Wetterstation – Regenmenge Gestern ermitteln
Wer eine Homatic-IP Wetterstation besitzt erhält eine Vielzahl von Wetterdaten. Diese lassen sich hervorragend mit einem Datenbanktool als Zeitreihen erfassen und visualisieren. Da ich Openhab benutze, ist bei mir aktuell RRD4J für die Persistence die erste Wahl. Um diese Daten nutzen und speichern zu können muss man allerdings die Eigenschäften dieser Kanäle ansprechen Wenn man in der CCU den Status der Wetterstation anzeigen lässt, werden einige dieser verfügbaren Daten ausgegeben.
Interssant sind die Daten zur Sonnenscheindauer von „Gestern“ und zur „Regenmenge Gestern“. Wer diese Wert nämlich in den Eigenschaften des Wetterstation Gerätes (Objekt in Openhab) sucht, wird diese nicht finden.
Versteckte Programme und Variablen
Bei diesen Werten handelt es sich um versteckte Systemvariablen, die nicht so einfach angezeigt werden können. Diese versteckten Systemvariablen werden durch systeminterne Programme erzeugt, die auf der CCU3 unter „Programme und Verknüpfung“ aufgerufen werden können. Dazu klickt man nach dem Öffnen diese Menüpunktes unten auf den Button „Systeminterne Programme einblenden“ und schon werden diese in der Liste der Programme angezeigt. Sie besitzen i.d.R. kryptische Namen, so dass es Sinn macht, in diese hereinzuschauen, um das richtige Programm zu finden. Für die beiden oben genannten Werte ist das folgenden Programme das Richtige (wird mit einer Wetterstation automatisch installiert):
In diesem werden die internen Systemvariablen für die Sonnescheindauer und den Regen Gestern gesetzt. Es fällt hier bereits auf, dass dieses Programm immer nur morgens um 7:00 Uhr ausgelöst wird. Es ist nicht klar, warum diese Zeit vorgegeben wurde, da doch der Vortag i.d.R. um 0:00 Uhr aufhört und der neue Tag beginnt.
Ich werde daher im nächsten Schritt diese Uhrzeit auf 0:05 Uhr ändern und gleichzeitig das Programm so erweitern, dass die Regenmenge des Vortages in eine sichtbare Systemvariable geschrieben wird, die auch von anderen Programmen aufgerufen werden kann.
Systemvariable erzeugen
Dazu erzeug ich als erstes eine neue (sichtbare) Systemvariable, in der die Regenmenge des Vortages abgespeichert werden soll.
Über Einstellungen / Systemvariable kann durch Drücken auf den Button „Neu“ eine neue Systemvariable wie folgt angelegt werden:
Programm modifzieren
Nun kann wieder das interne Programm „prgDailySunshineRainCounter_6513“ aufgerufen und durch einen Klick auf der Scriptzeile der Editor mit dem Programmscript geöffnet werden. Dieses ergänze ich insgesamt um zwei Zeilen. In der ersten Zeile wird ein Objekt für die neue Systemvariable erzeugt, in der zweiten Zeile wird diesem Objekt der Wert der internen Systemvariablen mit der Regenmenge von gestern als Status zugewiesen.
Hallo und vielen Dank für die Mühe und die Lust für derartige Hilfestellungen! Ich habe noch eine Bitte für einen weiteren Tipp. Die Systemvariablen „Regen heute“ und „Regen gestern“ existieren nach dem Einbinden der Wetterstation ( Homematic IP-Pro ), werden aber nicht mit Daten gefüttert. Im Status der Geräte werden die Werte angezeigt nur nicht bei den benannten Variablen. Regen gestern habe ich mit dem Skript hier hinbekommen. Den aktuellen Regenwert von heute würde ich auch gerne noch zuweisen. Kann mir dafür auch jemand einen Tipp geben an welcher Stelle in welchem Skript eine Wertezuweisung erfolgen muß? Vielen Dank und Gruß, Toralf
Hallo,
Die heutige Regenmenge wird in dem von der Wetterstation automatisch angelegtem systeminternen Programm „prgRainCounter_6513_<< Seriennummer Wetterstation >>:1“ in die Systemvariable „svHmIPRainCounterToday_6513“ geschrieben. Die systeminternen Programme kannst Du über den Button ganz unten bei den Programmen „Systeminterne Programme einblenden“ sichtbar machen.
Du kannst also nun in diesem systeminternen Programm einfach Zeilen einfügen, um das Update der systeminternen Variablen in eine eigenen Systemvariable zu speichern. Der Vorteil der Speicherung in einer eigenen Variable ist, dass diese anschließend in der WebUI sichtbar ist.
Alternativ schreibst Du ein kleines Programm, welches immer dann ausgelöst wird, wenn die „Regenmenge“ der Wetterstation (Kanal 1) eine Aktualisierung erfährt. Dann rufts Du in dem Programm ein Script auf, in dem Du die oben genannte Systemvariable ausliest und in eine eigene Variable schreibst.
Beste Grüße
Dieter
Hallo und vielen für die tolle Anleitung. Ich hätte aber noch einen kleinen Hinweis der Licht ins Dunkle bringt, warum das Programm jeden Tag um 7:00 Uhr gestartet wird und nicht wie erwartet um 0:01 Uhr. Das ist einfach historisch bedingt. Früher wurden die Regenmengen manuell mittels entsprechender Messbehälter abgelesen und Protokolliert. Da diese Institute nicht rund um die Uhr besetzt waren, wurden diese Werte mit Beginn der Arbeitszeit also gegen 7:00 Uhr abgelesen. Soweit ich das weiß, wird das teilweise heute auch noch so gemacht, um die Ergebnisse, welche die Automatikmessungen liefern zu überprüfen. Hierdurch hat sich wohl 7:00 Uhr als Standartzeit für die Messung entwickelt und es kann sein, dass man mit einem anderen Zeitpunkt als Grundlage doch erheblich von den Regenmengenangaben der verschiedenen Wetterinstitute abweicht, wenn man einen anderen Zeitpunkt wählt. (Bitte berichtigt mich, falls ich da falsch liege)
Viele Grüße
Karsten
Hallo Karsten,
Vielen Dank für die Information, die das Rätsel auflöst.
Ich empfehle mittlerweile, die Niederschlagsmengen kontinuierlich in Influxdb zu protokollieren, so dass man beliebige Vergleichszeiträume selber erstellen kann.
Viele Grüße
Dieter
wie muss das für „REGENHEUTE“ konkret aussehen?
VG
Hier empfehle ich folgende Vorgehensweise, da sich die Regenmenge bei Regen ja permanent ändern kann:
Zuerst wird wieder eine Systemvariable angelegt z.B. „REGENHEUTE“.
Dann suchst Du in den versteckten Programmen eine Programm , das wie folgt beginnt:
„prgRainCounter_… (bei mir heißt diese prgRainCounter_6513_…“). Die 4 Ziffern sind wichtig, denn daraus ergibt sich die versteckte Systemvariable, die ich benötige, nämlich: svHmIPRainCounterToday_6513. Wenn die Ziffern bei Dir gleich sind, dann brauchst Du im folgenden Script nichts anzupassen.
Dann erstellst Du ein Programm, welche als Auslöser die Regenmenge der Wetterstation nimmt, die bei Werten >1mm ein Ereignis auslöst.
Als Aktivität erstellst Du ein Script mit folgendem Inhalt:
object oSysVarRainCountToday = dom.GetObject(‚REGENHEUTE‘);
object oSysVarCounterToday = dom.GetObject(’svHmIPRainCounterToday_6513′);
oSysVarRainCountToday.State(oSysVarCounterToday.Value());
Nun sollte bei einer Änderung der Regenmenge, diese sofort in Deine Variable geschrieben werden.
Gruß
Dieter
Vielen Dank, habe ich soweit angelegt. Wie kommt die Variable wieder auf null? Also wenn es nicht regnet? Habe ich einen Denkfehler oder muss ich noch ein Programm dafür anlegen?
Wir lesen so nur die Variable aus, die auch in der Statusinformation des Wettersensors angezeigt wird. Die Änderung der Werte übernehmen die systeminternen Programme, die wir dann auf die eigene Variable übertragen. Auf Null wird die Variable auch nur beim Wechsel auf den nächsten Tag gesetzt, bis dahin wird alles aufsummiert.