Nach langer Zeit Stillstand im Blog nochmal ein kleines Snippet. Problemstellung war, Daten vom Raspberry aus meinem lokalen Netz auf den Webspace von Strato zu bekommen. Ich wollte die aktuelle Temperatur und Luftfeuchte die meine Homematic-Sensoren regelmäßig in der lokalen Datenbank auf dem Raspberry speichern auch hier im Blog anzeigen.
Nichts leichter als das dachte ich, und richtete eine Datenbankverbindung zur MySQL-Datenbank auf dem Strato-Webspace auf dem Raspberry ein. Leider unterbindet Strato den Zugriff auf die Datenbanken wenn dieser nicht vom Strato-Webspace geschieht. Das ist unschön da ich mir was anderes einfallen lassen musste, aber bzgl. der Sicherheit geht das in Ordnung.
Der nun vorgestellte zweite Ansatz ist eine zweigeteilte Lösung mit einer Komponente auf dem Strato-Webserver (PHP-Script) und einem Aufruf dieses Scriptes auf dem Raspberry mittels Shell-Script etc. oder wie in meinem Beispiel mittels PHP-Script welches regelmäßig per Cron aufgerufen wird. Das ist die simpelste Art eines „Webservices“ ohne REST und SOAP und für meine Zwecke völlig ausreichend.
Serverkomponente
Der PHP-Teil auf dem Webspace sieht folgendermaßen aus: Nach der Prüfung eines übergebenen Hashwertes werden die beiden ebenfalls in der URL übergebenen Messwerte (Außentemperatur und Luftfeuchte) auf Vorhandensein geprüft. Hier können und sollten natürlich noch weitere Prüfungen vorgenommen werden ob diese Werte z.B. numerisch sind etc. Da dieses Script auf dem Webspace liegt und durch jeden aufgerufen werden kann, dient der Hashwert als Passwort für den Aufruf.
Ist mit den übergebenen Argumenten alles in Ordnung, werden die Messwerte mittels Prepared-Statement in die auf dem Strato-Webserver angelegte Datenbank-Tabelle „temperaturfuehler“ gespeichert.
Da ich die Messwerte in einer lokalen Datenbank schon historisiere, wird in der Tabelle im Webspace nur eine Zeile mittels „UPDATE“ aktualisiert. Hier muss darauf geachtet werden, dass mindestens einmal vor dem ersten Update ein „INSERT“ in dieser Tabelle vorgenommen werden muss. Das hatte ich über die MySQL-Admin-Oberfläche von Strato gemacht.
//insert.php //Einstellungen aus externer Datei einlesen require_once 'config.php'; //Uebergebenen Hashwert pruefen if (isset($_GET["hashwert"]) && $_GET["hashwert"]==HASHWERT) { //Temperatur- und Luftfeuchtedaten speichern if (isset($_GET["temperatur"]) && isset($_GET["luftfeuchte"])) { try { $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE); $stmt = $mysqli->prepare("UPDATE temperaturfuehler SET temperatur=?,luftfeuchte=?"); $stmt->bind_param("dd",number_format($_GET["temperatur"],1),number_format($_GET["luftfeuchte"],1)); $stmt->execute(); $stmt->close(); } catch (Exception $e) { echo 'Fehler: ', $e->getMessage(), "\n"; } } } else { //echo "Fehler: Hashwert falsch\n"; } ?>
Hier die im obigen Script eingebundene Datei mit den Einstellungen:
//config.php define('DB_USER', ""); define('DB_PASSWORD', " "); define('DB_DATABASE', " "); define('DB_SERVER', " "); define('HASHWERT', " "); ?>
Lokale Komponente
Jetzt zu dem Teil der auf dem Raspberry lokal läuft. Hier wird obiges Script einfach z.B. per GET aus einem weiteren PHP- oder Shell-Script etc. mit den entsprechenden Argumenten aufgerufen. Wichtig ist, dass die Namen der übergebenen Argumente mit denen aus dem insert.php Script übereinstimmen.
exec("GET \"http://www.deine_url.de/beliebiger_pfad/insert.php?temperatur=$temp&luftfeuchte=$luft&hashwert=der_hashwert_der_beim_get_uebergeben_werden_muss\"");
Obiges Script und der Aufruf können natürlich um beliebig viele Übergabeparameter erweitert werden. Die so an die Strato-Datenbank übergebenen Werte können dann z.B. im WordPress mittels PHP-Plugin aus der Datenbank abgefragt und angezeigt werden. Hier im Blog ist das oben rechts zu sehen.
Gruß
Chris