WP Plugin für NetAtmo #2 – Messwerte via Geräteliste

By | 2015-10-12

Nachdem die Features vorerst mal klar sind, gehts schon mal an den wichtigsten Teil: Das Synch der Messwerte in die lokale MySQL Datenbank.

Dazu warf ich mal einen eingehenden Blick auf die API von NetAtmo. Dort gibt es – Gott sei Dank – auch eine PHP SDK. Ok, mal herunterladen und in den Plugin Ordner packen. Das Beispiel auf der Homepage ist auch hilfreich, kommt aber gleich mit dem SDK Download mit, braucht man also nicht sonderlich vorab beachten…

In dem Beispiel sieht man auch, wie man seine Messwerte nur anhand einer ID auslesen kann. Daher muss man zuvor seine zugeordneten Geräte auslesen. Meine Überlegung war: warum sollte ich bei jedem Synch die Geräteliste erneut abfragen, um an die Messwerte zu kommen? Meine Geräte werden sich eher selten ändern und falls ein neues hinzukommt, kann man auch mal manuell das Aktualisieren anstoßen…

D.h. ich muss meine Gerätedaten irgendwo speichern. WordPress bietet zwar eine gute Möglichkeit für Optionen und eigene Konfigurationen an, aber das ist nicht ganz so flexibel wie ich das gerne hätte. (Jetzt starten ich mal mit 4 Felder, aber vielleicht sind in 2 Monate schon weitere 3 notwendig?)

Also muss eine Tabelle für mein Plugin her, aber wie erstellen? Wie werden Updates der Tabellenstruktur mit neuen Versionen abgehandelt? Die Antwort darauf hat zum Glück auch schon WordPress für mich in Form der function dbDeltaWICHTIG: damit dbDelta funktioniert, muss jedes Feld in einer eigenen Zeile stehen!!

Nun denn, Create SQL erstellen …

CREATE TABLE ...devices (
id int NOT NULL AUTO_INCREMENT,
id_device varchar(55) NOT NULL COMMENT 'Base station ID',
id_module varchar(55) NOT NULL COMMENT 'Module ID',
last_refresh timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
module_type varchar(20) NOT NULL COMMENT 'Module Type such as: NAMain, NAModule1, ...',
meter_location varchar(15) DEFAULT 'outdoor' NOT NULL,
module_name varchar(55) NULL COMMENT 'Readable name of module',
date_setup timestamp NULL COMMENT 'UTC of setup',
coord_latitude float NULL COMMENT 'Coordinates: Latitude',
coord_longitude float NULL COMMENT 'Coordinates: Longitude',
owned BOOLEAN DEFAULT true NULL COMMENT 'Device owned by me or a favorite device',
UNIQUE KEY id (id);

CREATE TABLE ...devices_types (
			id int NOT NULL AUTO_INCREMENT,
			id_module varchar(55) NOT NULL COMMENT 'Module ID',
			module_meter_type varchar(55) NOT NULL COMMENT 'Such as Temperature, Noise, Humidity, ...',
			UNIQUE KEY id (id);

… und beim Plugin Activation Hook ausführen, Voila – Tabelle ist da. (natürlich einmal Plugin De- und dann wieder Aktivieren 🙂 ) (Hinsichtlich Normalisierung habe ich eine weitere Tabelle erstellt, das Prinzip ist aber natürlich das selbe!) Weiter gehts mit dem Befüllen dieser Tabelle mittels SDK Aufruf von getstationsdata.

Nun haben wir die Ausgangsbasis für das Synch der Messwerte: Eine Liste der Geräte in unserer eigenen Datenbank.

Dazu mehr im folgenden Post…