Kurze Einführung in PHP-DB

Was es mit Nagel, Hammer und Datenbank-Logging auf LAMP-Servern auf sich hat

Es gibt mittlerweile sehr viele Möglichkeiten, HomeMatic-Daten in Datenbanken zu speichern. Bei einigen Lösungen erfolgt die Speicherung auf der CCU selbst, bei anderen extern, manches geht per Push und anderes – wie mein altes Add-on DB-Access – muss regelmäßig die Daten absaugen.

Benennung von Systemvariablen

Prinzipiell kann man Systemvariablen – so wie allen Objekten in der CCU – beliebige Namen geben, also z. B. auch Umlaute und Sonderzeichen verwenden. Ich empfehle jedoch, sich auf reguläre Buchstaben (a-z, A-Z) zu beschränken: Bei Umlauten und Sonderzeichen besteht die Gefahr, dass Systemvariablen in Scripten nicht überall gefunden werden.

Das Problem

Bei einem Freund, dem ich meine alte CCU 1 angedreht habe, stand ich nun vor folgendem Problem: Die Verbrauchsdaten seiner damals neuen Warmwasser-Wärmepumpe sollten protokolliert werden, um Fehlfunktionen zu identifizieren.

Für die Erfassung des Momentanverbrauchs bot sich ein HomeMatic Funk-Schaltaktor mit Leistungsmessung HM-ES-PMSw1-Pl an, der von der alten Firmware der CCU 1 noch unterstützt wird. Datenspeicherung auf der Zentrale war allerdings ausgeschlossen – hier mussten wir eine andere Lösung finden.

Die Lösung

Wenn man nur einen Hammer hat, sieht bekanntlich jedes Problem aus wie ein Nagel.

Der Hammer war in diesem Fall – neben CCU 1 und Schaltaktor – ein vorhandener Webspace mit PHP- und MySQL-Unterstützung. Der Nagel ist eine kleine Sammlung von PHP-Scripten, mit denen die CCU ihre Daten in die MySQL-Datenbank schreiben und mit denen man sie anschließend rudimentär wieder auslesen kann.

Das Paket ist nur ein simpler Einstieg, um auf die Schnelle ein paar Daten zu speichern. Wer mehr möchte, kann es leicht erweitern – PHP-Kenntnisse vorausgesetzt. Wer viel mehr möchte, müsste freilich andere Lösungen suchen.

Konzept

Das Konzept ist relativ einfach: Auf dem LAMP-Server gibt es ein PHP-Script, das die CCU aus HomeMatic-Scripten heraus per wget ansprechen und dort Daten speichern kann. Weitere PHP-Scripte können im Browser aufgerufen werden, um die protokollierten Daten auszulesen.

LAMP-Server

LAMP ist ein gängiges Akronym für „Linux Apache MySQL PHP“ und bechreibt einen typischen Webserver. Auf dem Server laufen ein paar Scripte, mit denen per URL Einzelwerte in eine Tabelle einer Datenbank geschrieben werden.

Die Werte werden mit Timestamps versehen. Wird eine Tabelle angegeben, die noch nicht existiert, so wird sie einfach angelegt.

Dieser Teil ist auf der Seite PHP-Paket für den Webspace beschrieben.

CCU

Auf der CCU laufen ganz normale WebUI-Programme, die per Script die passenden URLs auf dem LAMP-Server aufrufen und so Daten in die Datenbank schreiben können.

Ich habe es ein wenig abstrahiert, so dass in den jeweiligen Scripten einfach nur Werte in Systemvariablen geschrieben werden müssen.

Dieses neueste Mini-Framework findet man auf der Seite Daten-Push mit der WebUI.

CuX-Daemon

Auch wenn es theoretisch möglich ist, alles komplett ohne Zusatzsoftware auf der CCU zu realisieren: Für den Aufruf der PHP-Scripte wird wget auf der CCU gestartet. Daher empfehle ich hier dringender denn je die Installation des CuX-Daemons.

Wie die CCU reagiert, wenn die PHP-Seiten aus irgendeinem Grunde nicht erreichbar sind, ist nicht unbedingt vorherzusagen. Mit system.Exec() statt des CuX-Daemons kann man jedoch fest davon ausgehen, dass die CCU schon im laufenden Betrieb hängen wird, ganz zu schweigen von der erwartbaren Instabilität nach einiger Laufzeit.

Allgemeine Informationen zu diesem Thema auf der Seite Ersatz für system.Exec().

Bei meinem Freund war passender Webspace bereits vorhanden, deswegen haben wir diesen einfach genutzt. Man kann aber auch einen eigenen Server betreiben (was ich für die Entwicklung gemacht habe), kostenlosen Webspace nutzen (für diese Dokumentation greife ich auf bplaced zurück) oder einen Vertrag bei einem Webhoster abschließen.

Wichtig ist PHP-Unterstützung mit einer MySQL-Datenbank. Anderes wäre sicher machbar, wenn die hier vorgestellte Lösung entsprechend angepasst wird, aber meine kurze Anleitung deckt genau diesen einen Anwendungsfall ab.

Datenabruf

Für die ultimative Anwendungserfahrung gibt es noch ein paar weitere Scripte im Paket: Eine topgeile Index-Seite, auf der eine Kurzanleitung für das Paket steht, und einige Scripte, um die erfassten Daten abzurufen und anzuzeigen.

Man kann natürlich mit den Daten noch viel mehr machen – graphisch aufbereiten, statistisch auswerten, überall einbinden … Für das Problem, schnell ein paar Daten zu sammeln und dann einen Report über den Tagesverbrauch abzurufen oder die Daten als CSV-Datei in Excel zu importieren reicht die Minimal-Ausstattung aber schon.

Navigation