Raspberry Pi als Temperaturmessstation
Die Temperatur in einem Haus kann manchmal eine verzwickte Sache sein. Mal wird es nicht warm, mal hat man kühle Ecken oder man möchte einfach nur die Steuerung der Heizung optimieren bzw. die Raumtemperatur über einen längeren Zeitraum im Auge behalten. Das ist nicht immer besonders einfach, denn man muss öfter die Temperatur messen und Listen führen. Doch als Unterstützung kann der Raspberry Pi die Überwachung der Raumtemperatur übernehmen. Dadurch erspart man sich einiges an Arbeit und die Werte werden gespeichert, auch wenn man nicht daheim ist.
Der Raspberry Pi ist hierbei wie gemacht als Zentrale für die Temperatursteuerung. Dank seiner Erweiterbarkeit kann er zudem neue – weiterführende – Aufgaben übernehmen, die daran anknüpfen. Weiterhin ist er stromsparend und für diese Aufgabe nicht überdimensioniert wie ein großer Rechner. Das macht ihn zum perfekten Server für das Vorhaben.
Vor kurzer Zeit stellte ich mir die Frage, wie ich die Daten der Steckdosen an einer FritzBox nutzen kann, um das Zuhause ein wenig smarter zu gestalten. Da wir inzwischen an mehreren Stellen diese Dosen einsetzen kam ich auf die Idee, dass man die Temperatur an diesen Stellen messen kann. Mit den gewonnenen Daten erstellt man eine Übersicht über die Temperatur in der Wohnung. Der Raspberry Pi hatte schon eine Weile keine Aufgabe mehr und so beschloss ich, diesen für meine Aufgabe einzusetzen.
Durch mein Intranet bin ich in Sachen PHP einigermaßen fit und nutze diese Sprache um die Skripte zu schreiben. Auf dem Raspberry Pi läuft ein Webserver, der eine Oberfläche mit den Messdaten zur Verfügung stellt. Wie man diese gestaltet, kann man durch diese selbst erstellte Lösung frei bestimmen. Er baut eine Verbindung zur FritzBox auf und holt sich jede Stunde neue Messdaten von den einzelnen Aktoren (so nennt AVM die Dosen). Nützlich ist hierbei, dass die FritzBox für Entwickler bereits Schnittstellen bietet und man dadurch vieles an Arbeit sparen kann. Denn durch einen einzigen Aufruf erhält man bereits alle Temperaturwerte aller Sensoren inklusive des Namens. Letzteres ist auch der Trick, wie der Raspberry Pi keine eigene Datenbank mit den Namen der Aktoren benötigt. Wird nun in der FritzBox ein Aktor umbenannt, so erscheint der neue Name beim nächsten Abrufen der Daten durch den RasPi. Einfacher geht es fast nicht mehr.
Die Daten, welche der Pi über ein PHP-Skript abruft, sollte er nun säuberlich in eine Datenbank einpflegen. Dadurch kann man nach geraumer Zeit einen guten Eindruck darüber gewinnen, wie sich die Temperatur verhält. Hierbei reicht eine einfache MySQL-Datenbank mit verschiedenen Tabellen.
Die grundlegende Tabelle habe ich Messdaten genannt. Sie hat vier Spalten: ID (int), Zeitstempel (Timestamp) [automatisch von der DB gesetzt], Temperatur (int) und Sensor (Varchar).
Man könnte natürlich den Speicherverbrauch etwas runterschrauben, indem man für die Sensoren eine eigene Tabelle anlegt und in der Messdaten-Tabelle den Datensatz mit einem Fremdschlüssel verknüpft. Ich habe es mir hier jedoch so einfach wie möglich gemacht und hatte bisher keinen Bedarf dazu Speicher zu sparen. Theoretisch wäre der Raspberry jetzt schon in der Lage zu arbeiten. Doch ich habe die Lösung noch etwas mehr verfeinert.
Kleiner Tipp: Daten, die sich nicht mehr ändern, muss man nicht jedes Mal neu berechnen.
Lediglich Daten, die sich von Zeit zu Zeit ändern, sollte man neu berechnen lassen.
Damit ich also später Rechenzeit sparen kann – insbesondere wenn die Datenbank mal groß wird – lasse ich den Raspberry Pi jede Nacht (nach 0 Uhr) den Durchschnitt des vergangenen Tages sowie der Sensoren berechnen und schreibe diese Daten in eigene Tabellen. Ruft man nun die Daten über die Weboberfläche ab, so sind sie schneller verfügbar.
Im Grunde war das auch schon das ganze Kunstwerk. Die Skripte, welche zum Abrufen und Verarbeiten dienen, lasse ich per Cronjob ausführen. Möchte ich nun öfter Daten erheben, so ändere ich einfach nur das Intervall des Cronjobs.
Die Schwierigkeit bei dieser Nutzung des Raspberry Pi liegt – meiner Meinung nach – lediglich an der Authentifizierung an der FritzBox. AVM hat seine Produkte gegen missbräuchliche Nutzung geschützt, was es einem Entwickler nicht gerade einfach macht. Ich kann jedoch versichern, dass man sich lediglich einmal richtig einarbeiten muss. Danach läuft es wie von selbst.
Zu beachten gilt weiterhin, dass am Raspberry CURL installiert sein muss. Sonst kann er keine Verbindung aufbauen.
Schlusswort
Als Entwickler muss man das Rad nicht ständig neu erfinden. Manchmal genügt es, wenn man bereits vorhandene Dinge in Einklang bringt. Über den Raspberry Pi kann man viele verschiedene Geräte miteinander kommunizieren lassen, auch wenn sie keine gemeinsamen Schnittstellen besitzen.
Einfach gesagt übersetzt der Pi die Sprache von Gerät A in die Sprache von Gerät B. Ein gutes Beispiel wäre es, wenn Gerät A nur XML unterstützt, Gerät B aber JSON verlangt. Mit ein wenig Aufwand lässt sich da viel erreichen.
Natürlich kann man die Lösung nach seinen eigenen Vorstellungen erweitern. Man könnte den Temperaturserver umschreiben, so dass er über eine REST-Schnittstelle seine Daten zur Verfügung stellt. Auch könnte man eine App oder Java-Anwendung schreiben, die einem die Daten anzeigt. Oder man lässt sich die Daten des Servers über PHP grafisch darstellen. Ein passender Link hierfür findet sich in den Verweisen.
Smarte Grüße und viel Spaß beim Programmieren
Verweise
schattenbaum.net: PHP und mySQL – Umfrageergebnis grafisch darstellen
jpgraph.net: JpGraph – Most powerful PHP-driven charts
avm.de: Entwicklungssupport
ip-phone-forum.de: Fritz!Box API für PHP (inkl. Login-Sessions)
2 Kommentare
Amazon Echo Show - Lohnt sich der Aufpreis? - Hobbyblogging · 25. März 2019 um 18:01
[…] So hat er auf seinem Startbildschirm ein Hintergrundbild sowie die aktuelle Uhrzeit und die Außentemperatur. Man wird direkt auf den ersten Blick mit wichtigen Informationen […]
Smarthome: Warum vieles unmöglich ist · 22. Februar 2018 um 00:33
[…] eines Haushalts sehr. Also habe auch ich der mit Vernetzung begonnen. Mein Raspberry Pi, der Temperaturdaten sammelt und auswertet, hat so bereits 10.000 Datensätze zur Raumtemperatur erfasst. Dass man bei […]