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.
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
Falls ihr noch kein Root Passwort vergeben habt, wäre das jetzt ein uter Zeitpunkt, denn das benötigen wir gleich.
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.
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.
Nachdem die Datenbank angelegt ist können wir darin eine Tabelle für die Sensoren anlegen.
Ich habe hier folgende Felder definiert.
Feldname | Typ | Beschreibung |
---|---|---|
ID | Int (AI) | Datensatz ID, Primary Key Autoincrement |
Sensor | Varchar(50) | Name des Sensors |
Wert | decimal(10,2) | Wert des Sensors |
Datenart | Enum | Enum für die Datenart (Temperatur, Druck,..) |
Timestamp | timestamp | Naja, 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.
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.
Das Ganze sieht dann bei mir so aus.
Ganz Links sind die Verbindungen zu Phoscon der die ZigBee Daten empfängt und an Node-Red weiterleitet. Bei mir ist das so konfiguriert.
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.
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.
Neueste Kommentare