Die Daten des Kombisensors lassen sich mit wenigen Scriptzeilen sammeln
Der Kombisensor ist eine der eher fehleranfälligen HomeMatic-Komponenten. In diesem Beispiel war ich beim dritten in 13 Jahren, wobei dieser sogar relativ lange gehalten hat.
Nichtsdestotrotz ist er eine gute Datenquelle, um ein paar Werte in die PHP-DB zu schreiben. Bei der Gelegenheit stelle ich fest, dass auch der dritte jetzt langsam das Zeitliche segnet.
Inzwischen verrichtet ein HomeMatic IP Wettersensor Plus HmIP-SWO-PL die Arbeit, was einige tiefgreifende Anpassungen bei verschiedenen Programmen erfordert hat. Aber das ist ein anderes Thema.
Den Anfang macht das Naheliegendste: Ich schreibe jedes Mal, wenn der Kombisensor seine Messwerte aktualisiert, die Temperatur über die PHP-DB in die Datenbank.
Das WebUI-Programm ist erwartungsgemäß kurz: Wenn Carport.Kombisensor seine Temperatur aktualisiert, wird ein Script ausgeführt. Sofern die Temperatur nicht unter -40 °C sinkt, läuft das Script bei jeder Aktualisierung.
Ich habe noch eine Verzögerung von zwei Sekunden eingebaut, weil ich im zweiten Programm auch die Regenmenge erfassen werde. Damit sich die beiden Aktualisierungsbefehle im CUx-Daemon nicht in die Quere kommen, bekommen sie hier unterschiedliche Verzögerungen.
Das Script ist simpel:
gesamtes Script markieren / kopieren
! HomeMatic-Script ! WETTERDATEN SAMMELN ! http://www.christian-luetgens.de/homematic/phpdb/werte/Werte_sammeln.htm dom.GetObject ("PHP-DB Table").State ("Temperatur"); dom.GetObject ("PHP-DB Value").State (dom.GetObject ("$src$").Value()); ! Ende des Scripts
PHP-DB Table wird auf „Temperatur“ gesetzt – das ist der Name der Tabelle, in der die Daten gespeichert werden. Danach setze ich PHP-DB Value auf den aktuellen Wert des Kombisensors: $src$ wird automatisch mit dem Datenpunkt gefüllt, der das WebUI-Programm auslöst, in meinem Fall also die Temperatur meines Kombisensors.
Durch das Setzen von PHP-DB Value wird dann mein PHP-DB-Framework ausgelöst und der Wert in die Datenbank geschrieben.
Zur Abfrage wähle ich diesmal die tageweise Gruppierung.
http://luetgens.bplaced.net/homematic/html.php?table=Temperatur&grid=day&limit=30&select=newest
In der Tabelle sieht man sofort das Problem.
Wie man sieht, meldet mein Kombisensor regelmäßig 80 °C als Außentemperatur. Das ist im Januar in Geesthacht eher unüblich. Da geht wohl entweder gerade der dritte Kombisensor oder das Weltklima kaputt.
Nichtsdestotrotz kann man erkennen, was man mit der Tabelle anfangen kann:
Dank der 80°C sind alle Werte bis zum 15.01. in meiner Tabelle unbrauchbar. Nun gut, wenigstens kann man sofort das Problem erkennen und schon mal die nächste Bestellung bei einem der bekannten Versandhändler planen.
Die Regenmenge lässt sich genauso erfassen wie die Temperatur. Nur bei der Auswertung gibt es ein paar Kleinigkeiten zu beachten.
Wie angekündigt, lasse ich dieses Programm mit weiterer Verzögerung senden, so dass zunächst die Temperatur und dann die Regenmenge in die Datenbank geschrieben wird.
Das ließe sich natürlich auch in einem WebUI-Programm zusammenfassen, bei dem dann zwei Scripte mit unterschiedlicher Verzögerung ausgeführt werden, aber zwecks Übersichtlichkeit halte ich die beiden Programme hier mal getrennt.
Das Script ist nahezu identisch mit dem vorherigen:
gesamtes Script markieren / kopieren
! HomeMatic-Script ! WETTERDATEN SAMMELN ! http://www.christian-luetgens.de/homematic/phpdb/werte/Werte_sammeln.htm dom.GetObject ("PHP-DB Table").State ("Regen"); dom.GetObject ("PHP-DB Value").State (dom.GetObject ("$src$").Value()); ! Ende des Scripts
Auch hier werden PHP-DB Table und PHP-DB Value mit dem Namen der Tabelle und dem Wert aus dem Kombisensor gefüllt – diesmal die Regenmenge.
Bei der Auswertung stellt man dann fest, dass die Regenmenge als fortlaufender Wert vom Kombisensor zurückgeliefert wird: Wenn der Wert x zurückgemeldet wurde und es danach y Millimeter geregnet hat, wird der Wert x+y gemeldet.
Solche Rückmeldungen gibt es öfter bei der HomeMatic, deshalb habe ich hierfür eine eigene Auswertungsspalte gebastelt.
http://luetgens.bplaced.net/homematic/html.php?table=Regen&grid=day&limit=30&select=newest
Wie man sieht, bringen die Minimal-, Maximal- und Durchschnittswerte hier gar nichts. Auch die Summe ist erwartungsgemäß nutzlos.
In der Spalte sum_diff werden dann aber die Differenzen zwischen zwei Messwerten addiert und liefern so die Regenmenge: am 09.01. 4,41 Millimeter, am 10.01. 2,94 Millimeter und so weiter. Damit lässt sich dann ganz gut verfolgen, wie viel es pro Tag (oder auch pro Stunde oder pro Monat) geregnet hat.