Xspone.com

Hausautomation Sensordaten in Datenbank schreiben

Sensordaten in MySQL Datenbank schreiben

Veröffentlicht am 3.01.2020 in ,

Nachdem ich in jedem Raum einen Xiaomi Aqara Temperature Humidity Sensor platziert habe und die mittels Conbee auslese kann ich die aktuellen Werte nun an meiner Hausautomation anzeigen. Schön wäre es aber wenn ich die Werte in einer Datenbank speichern könnte.

Rein zufällig läuft bei mir ein QNAP NAS und rein zufällig läuft darauf eine MySQL Datenbank 🙂 Sicher, man könnte das alles auch auf dem Raspberry laufen lassen, aber der läuft noch immer auf einer SD Karte und da möchte ich nicht zu viele Schreibzugriffe haben. Dazu kommt noch, dass ich auch eine Software benötige um das ganze dann auszuwerten und die braucht dann doch etwas mehr Leistung.

Datenbank auf QNAP NAS vorbereiten

MySQL ist normal so konfiguriert, dass nur localhost auf die Datenbank zugreifen kann. Ich möchte nun aber die Sensordaten von meinem Raspberry in die Datenbank schreiben, also muss die Datenbank im Netzwerk freigegeben werden.

Auf einem QNAP NAS macht man das unter Einstellungen -> Anwendungen -> SQL Server

QNAP Datenbank in Netzwerk freigeben.
Datenbank auf QNAP für externen Zugriff freigeben

Falls ihr noch kein Root Passwort vergeben habt, wäre das jetzt ein uter Zeitpunkt, denn das benötigen wir gleich.

Datenbank für Sensordaten anlegen

Im nächsten Schritt benötige ich ein Tool um eine Datenbank, in der die Sensordaten gespeichert werden, anzulegen. Dafür installiere ich "PHPMyAdmin" das als Standard App bei QNAP dabei ist und im App Center installiert werden kann.

PHPmyAdmin in QNAP installieren
PHPMyAdmin installieren

Im nächsten Schritt können wir uns an der Datenbank anmelden. Dazu starten wir PHPmyAdmin und melden uns mit dem User root und dem passenden Passwort an.

Nun müssen wir eine neue Datenbank sowie einen User anlegen. Am einfachsten geht das, wenn ein neuer User angelegt wird, da hier automatisch eine neue Datenbank erstellt werden kann.

Datenbank für Hausautomation Sensordaten anlegen.
Neuen Datenbank User inklusive Datenbank anlegen.

Nachdem die Datenbank angelegt ist können wir darin eine Tabelle für die Sensoren anlegen.

Sensordaten in Datenbanktabelle für Hausautomation
Tabelle für Sensordaten

Ich habe hier folgende Felder definiert.

FeldnameTypBeschreibung
IDInt (AI)Datensatz ID, Primary Key Autoincrement
SensorVarchar(50)Name des Sensors
Wertdecimal(10,2)Wert des Sensors
DatenartEnumEnum für die Datenart (Temperatur, Druck,..)
TimestamptimestampNaja, Zeitstempel eben

Ich weiß, die Tabelle ist nicht normalisiert, aber... egal, ist einfacher so 😉

Wer zu faul ist das selbst anzulegen, hier ist der Datenbankexport.

Sensordaten in die Datenbank schreiben

Wie ich bereits einmal erwähnt habe, verwende ich für meine Hausautomation hauptsächlich Node-Red weshalb ich die Daten auch von dort in die Datenbank schreibe.

In Node-Red wird node-red-node-mysql benötigt.

Node-Red MySQL Node

Das Ganze sieht dann bei mir so aus.

Sensordaten aus Node-Red in Datenbank schreiben
Sensordaten aus Node-Red in Datenbank schreiben

Ganz Links sind die Verbindungen zu Phoscon der die ZigBee Daten empfängt und an Node-Red weiterleitet. Bei mir ist das so konfiguriert.

Konfiguration Phoscon in Node-Red
Konfiguration Phoscon in Node-Red

Als Payload gebe ich nur die Temperatur weiter, der Rest wird nicht benötigt.

Im folgenden Funktionsbaustein werden die Werte dann in Echtwerte umgerechnet. Die Aquara Sensoren geben für die Temperatur z.B 2150 aus anstatt 21,5. Und anschliessend wird der SQL String für die Datenbank erstellt und an den MySQL Connector weitergeleitet.

temp = Math.round((msg.payload/100)*10)/10;
msg.topic = "INSERT INTO `sensoren` (`ID`, `Sensor`, `Wert`, `Datenart`,
`Timestamp`) VALUES (NULL, 'Kinderzimmer', '"+temp+"', 'Temperatur',
CURRENT_TIMESTAMP);";
return msg;

So, das wars, jetzt sollten die Sensordaten in die Datenbank geschrieben werden.

Sensordaten aus Hausautomatisierung in der Datenbank
Sensordaten in der Datenbank

Was jetzt noch fehlt ist ein Tool um diese Daten auswerten zu können. Dazu werde ich Grafana verwenden, aber das wird ein eigener Beitrag.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

searchhome