9009 Zeichen
Score aktualisiert
100%
Code: b6b1951188804d22b042abccc25ec6ac
Token in Entwicklung nicht aktualisiert
img-Tag in Entwicklung deaktiviert
Der erste Teil der PHP-Datenbank ist das Script-Paket auf dem Webserver. Ich gebe hier
einige Hinweise zur Einrichtung – einschließlich einiger Hinweise zum Webspace. Das Thema
ist allerdings etwas komplexer, daher kann ich hier keine einfache
Schritt-für-Schritt-Anleitung liefern.
Webserver vorbereiten
Als erstes gilt es, den Webspace vorzubereiten. Was wir brauchen, ist folgendes:
- Webspace über HTTP oder HTTPS erreichbar
- PHP-Unterstützung
- MySQL-Datenbank mit Berechtigung, über PHP Tabellen zu erstellen
Diese Voraussetzungen sind praktisch Standard sowohl für kostenlosen als auch für
kostenpflichtigen Webspace. Unterschiede gibt es häufig im Funktionsumfang: kostenloser
Webspace fügt automatisch Werbung ein oder stellt nur Unterverzeichnisse oder Subdomains
zur Verfügung, während kostenpflichtige Angebote in der Regel werbefrei sind und das
Registrieren eigener Domains erlauben.
Für die Entwicklung des Script-Paketes habe ich eine eigene Subdomain im LAN
eingerichtet und die PHP-Datenbank auf einem Ubuntu-Webserver in den Tiefen meines Kellers
laufen lassen. Das ist natürlich optimal, weil ich damit volle Kontrolle über alles
habe.
Bei meinem Freund, der Auslöser für dieses Projekt war, gibt es kostenpflichtigen
Webspace. Wir konnten die PHP-Scripte in ein Unterverzeichnis legen und über seine
vorhandene Domain zugreifen. Auch das eine praktikable Lösung.
Bei kostenlosen Angeboten mit Werbung ist es etwas fraglich, ob das Script-Paket
funktioniert. Hier müsste man im Einzelfall ausprobieren, was geht und was nicht.
Praktisches Beispiel
Für dieses Tutorial – und, zugegeben, aus Neugierde – habe ich mir kostenlosen
Webspace bei bplaced zugelegt. Das ist etwas weniger optimal, weil anscheinend kein TLS
zur Verfügung steht (oder ich die entsprechenden Optionen nicht gefunden habe). Aber es
ist ausreichend und läuft bisher tadellos.
- Zunächst habe ich eine Subdomain registriert – in gewohnter Einfallslosigkeit http://luetgens.bplaced.net. (Wer die Links für
meinen Webspace anklickt und nur Fehlermeldungen und Passwortabfragen bekommt, der
erfährt weiter unten, warum.)
- Über die Web-Konfigurationsoberfläche von bplaced habe ich eine MySQL-Datenbank
eingerichtet, auf die meine PHP-Scripte Zugriff haben, und mir das entsprechende Passwort
und den Datenbanknamen notiert.
- Datenbanknamen und Zugangsdaten habe ich in die Konfigurationsdatei
/config/config.php des Script-Paketes eingetragen.
- Das Script-Paket samt angepasster config.php habe ich per FTP ins
Unterverzeichnis /www/homematic im Webspace kopiert.
Die Sammlung ist damit unter http://luetgens.bplaced.net/homematic
erreichbar.
Werte speichern und abrufen
Wenn die Seite nach der Installation der Scripte aufgerufen wird, erscheint eine kurze
Hilfe zur Syntax der REST-API. Wurden bereits Werte eingetragen, können einige Reports
für die vorhandenen Tabellen abgerufen werden.
Die PHP-Dateien, die für Ein- und Ausgabe zuständig sind, sind die folgenden:
Mit set.php können Werte in die Datenbank geschrieben werden. Das ist in der
Regel der erste Schritt, um die Funktionsfähigkeit zu prüfen.
Als Parameter müssen Tabellenname und Wert angegeben werden. Ist die Tabelle noch
nicht vorhanden, wird sie angelegt.
In meinem Fall würde also
http://luetgens.bplaced.net/homematic/set.php?table=test1&value=15
eine neue Tabelle test1 anlegen und den Wert 15 speichern.
Vorhandene Datenbank-Einträge können im HTML-Format oder als .csv-Datei ausgegeben
werden. HTML sieht halbwegs übersichtlich im Browser aus, .csv lässt sich zum Beispiel
in Excel importieren und auswerten.
Notwendiger Parameter ist auch hier der Tabellenname. Weitere Optionen zur Auswertung
sind unten beschrieben – und natürlich auf der Indexseite.
Sicherheit
Mit der aktuellen Konfiguration kann jeder in den Daten rumfummeln und alles abrufen,
was die Datenbank hergibt. Das geht so natürlich nicht.
Je nach Webspace und eingesetzter CCU-Firmware gibt es verschiedene Möglichkeiten, den
Zugriff abzusichern.
Verschlüsselung für die Verbindung sollte eigentlich immer aktiv sein. Leider bieten
nicht alle Webspace-Anbieter dies an, die Konfiguration ist problematisch oder der
Webmaster (z. B. ich) hat wichtige Gründe, die dagegen sprechen (z. B. kein Bock).
wget auf der CCU prüft die Zertifikate freilich ohnehin nicht, womit die
Hälfte der Transportverschlüsselung so oder so wieder perdu ist. Deshalb ist es auch
nicht dramatisch, wenn die Verschlüsselung ausbleibt. Man muss aber unbedingt im
Hinterkopf behalten, dass dann Daten unverschlüsselt durch das Internet geschickt werden.
Wenn TLS aktiviert wird, dann muss die URL für den Zugriff auf https
geändert werden.
Wenn möglich, sollte die Anmeldung mit Username und Passwort für das Verzeichnis
aktiviert werden, in dem das Script-Paket liegt.
Zusammen mit TLS-Verschlüsselung ist das die sicherste Variante, um auf die Schnelle
den Zugriff abzusichern. Ohne TLS klafft hier die offensichtliche Lücke, dass Username
und Passwort unverschlüsselt übertragen werden.
Der ganz große Haken bei der Sache ist, dass das wget auf der CCU 1 keine
HTTP-Authentifizierung unterstützt. Damit fällt diese Sicherungsmaßnahme auf der CCU 1
also aus. Ab CCU 2 läuft es.
Als Minimal-Option besteht die Möglichkeit, einen Token in der config.php
einzutragen. Dieser muss dann für alle Scripte des Paketes als Parameter übergeben
werden, damit Daten angezeigt werden. Ohne Token gibt es nur eine Fehlermeldung.
Wenn als Token „geheim“ eingetragen ist, muss also dieser Token bei jedem
Aufruf übergeben werden. Beispiel:
http://luetgens.bplaced.net/homematic/set.php?table=test1&value=15&token=geheim
Weil der Token Teil der URL ist, kann ohne TLS jeder, der den Datenverkehr abhört,
auch den Token im Klartext lesen und verwenden.
Viele Sicherheitseinstellungen werden über .htaccess konfiguriert. Dabei
handelt es sich um Dateien, die wie alle anderen auch einfach auf dem Webserver
gespeichert werden und bestimmte Optionen für Verzeichnisse und Dateien vorgeben, z. B.
zur Anzeige von Verzeichnisinhalten, zum Zugriffsschutz oder zur Passwortabfrage.
Im Script-Paket liegt bereits eine passende .htaccess-Datei für das
/config-Unterverzeichnis. Wenn der Webspace .htaccess in dieser Form
unterstützt, kann niemand auf die Datei mit den Konfigurationsdaten in diesem Verzeichnis
zugreifen.
Für das gesamte Script-Paket muss bei Bedarf eine passende .htaccess-Datei
angelegt werden, die den Zugriff regelt – oder die Einstellung kann über die
Weboberfläche des Providers oder Konfigurationsdateien des Webservers vorgenommen werden.
Für meinen bplaced-Webspace habe ich ein wenig mit .htaccess-Dateien
rumgefummelt, um das Verzeichnis mit Passwörtern abzusichern. TLS habe ich wie
beschrieben nicht eingerichtet: Es handelt sich nur um eine Demo-Datenbank ohne
schützenswerte Daten. Falls da jemand einbricht, findet er nichts und kann auch nichts
kaputtmachen.
Ein „Einbruch“ in den Webspace hat keine Auswirkung auf die Sicherheit der
CCU: Nur, weil jemand in meine Demo-Datenbank kommt, hat er noch lange keine Zugangsdaten
für die HomeMatic.
Reports und Datenaufbereitung
Wie oben bereits angedeutet, bietet das Script-Paket einige rudimentäre
Möglichkeiten, die erfassten Daten auszulesen.
Die erste grundsätzliche Entscheidung besteht darin, ob die Daten als html oder als
kommaseparierte Werte ausgegeben werden sollen. Ersteres eignet sich besser für eine
schnelle Übersicht im Browser (und sieht dort auch übersichtlicher aus), letzteres ist
ideal, um die Daten in anderen Programmen weiterzuverarbeiten.
Mit grid lassen sich Daten gruppieren: month, day, hour,
5min und raw. Bei grid=day wird für jeden Tag eine Zeile
ausgegeben, bei grid=hour für jede Stunde usw. Bei grid=raw werden die
Werte nicht gruppiert.
Die Anzahl der Zeilen, die ausgegeben werden, kann (und sollte) beschränkt werden.
limit=24&grid=hour gibt z. B. einen Report über 24 Stunden aus, wobei jede Zeile
eine Stunde ist.
Wer in alten Daten kramen möchte, kann mit select=oldest die ältesten Werte
einer Tabelle ausgeben statt der neuesten.
Die einzelnen Zeilen eines Reports bieten – außer bei grid=raw – noch eine
Reihe statistischer Auswertungen. Auf der Beispiel-Seite
ist beschrieben, wofür diese Spalten nützlich sein können.
Wenn es nur darum geht, auf die Schnelle ein paar Werte zu protokollieren, sind diese
Möglichkeiten vielleicht schon ausreichend. Anderenfalls kann man natürlich alles aus
der Datenbank rausholen, was drinsteckt – zum Beispiel zur Visualisierung auf einer
Webseite oder ähnliches.
PHP-Dateien
Das Paket mit den PHP-Dateien gibt es hier zum Download:
PHP-DB
Es kann – nach Anpassung der Konfigurationsdatei und ggf. der vorhandenen .htaccess-Dateien
– auf den Webserver hochgeladen werden und ist der komplette Server-Teil des Frameworks.
Falls jemand irgendwelche privaten Passwörter darin findet, die ich nicht bereinigt
habe, bitte kurz Bescheid geben …