Daten in einer PostgreSQL Datenbank speichern

Mit dem verlinked connect-Gateway lassen sich sehr leicht Daten aus unterschiedlichen Quellen verarbeiten. Ebenso verhält es sich, wenn Daten weitergeleitet werden sollen. In diesem Beitrag betrachten wir den häufigen Anwendungsfall, dass die Daten in einer Datenbank gespeichert werden sollen. In diesem Beispiel wählen wir eine PostgreSQL.
Inhaltsverzeichnis
Ausgangslage
Die PostgreSQL ist einer sehr verbreitete Open-Source Datenbank. Also relationale SQL-Datenbank, die auch große Datenmengen aufnehmen und verarbeiten kann, ist sie ideal zum Speichern von einigen Temperaturwerten. Mehr zur Technologie erfahren Sie hier.
Die Daten, die wir in der Datenbank speichern wollen, liegen im Dataspace des connect-Gateway vor. Für diesen Zweck haben wir einige Temperaturwerte über einige ZigBee Sensoren via MQTT ermittelt.
Für unser Beispiel erfassen wir die Temperaturen im heimischen Keller. Hierfür hat man in der Regel eine größere Anzahl von Temperaturwerten, die man korreliert, d.h. mit dem selben Zeitstempel abspeichern möchte. Wir beschränken uns auf zwei Temperaturwerte.
Konfiguration für PostgreSQL
Zunächst legen wir für die Temperatur im Wasch- und Vorratskeller folgende Datapoints
fest.
<datapoints> <datapoint> <path>/home/waschkeller/temperatur</path> <type>decimal</type> </datapoint> <datapoint> <path>/home/vorratskeller/temperatur</path> <type>decimal</type> </datapoint> </datapoints>
Die Temperaturen werden unabhängig voneinander zyklisch übermittelt. Wir wollen aber jedesmal, wenn wir einen neuen Wert für einen der Temperaturwerte bekommen, beide Temperaturwerte mit dem aktuellen Zeitstempel in die PostgreSQL speichern.
Endpoint
Wir haben eine PostgreSQL auf einem Server installiert. Um die Daten dorthin zu schreiben, legen wir in der Konfiguration des connect-Gateway zunächst einen Endpoint
für die Datenbank fest.
<endpoint> <name>Datenbank</name>
Als relationale SQL-Datenbank unterstützen wir auch die PostgreSQL im connect-Gateway über das JDBC
Protocol
Plugin.
<protocol plugin="JDBC"> <name>PostgreSQL</name>
In den Parameters
zum JDBC Protocol legen wir die Verbindungsparameter fest. Hier wird unter anderem der Datenbanktreiber festgelegt, sowie die URL zum Verbindungsaufbau. Außerdem legen wir fest, dass wir uns mit der Datenbank “smarthome” verbinden wollen.
<parameters> <param key="jdbc_driver">org.postgresql.Driver</param> <param key="jdbc_url">jdbc:postgresql://server:5432/smarthome</param> <param key="user">connect_gateway</param> <param key="password">secret</param> </parameters>
Trigger
Als Zyklus für die Speicherung legen wir fest, dass immer ein Datensatz geschrieben werden soll, wenn sich ein Temperaturwert geändert hat. Also legen wir einen passiven Trigger
an. Dieser stößt alle Consumer
des Endpoints
an, wenn sich ein referenzierter Datapoint
ändert.
<trigger> <passive /> </trigger>
Consumer
Im Consumer wird der eigentliche SQL-Befehl hinterlegt, mit dem die Daten in die Datenbanktabelle raumtemp
geschrieben werden. Über Platzhalter und Typangaben kann der SQL-Befehl für jeden Datenbanktyp ausgestaltet werden.
<consumer> <name>raumtemperaturen</name> <parameters> <param key="query">INSERT INTO raumtemp (waschkeller, vorratskeller) VALUES (?, ?)</param> <param key="parameter_types">DATAPOINT?,DATAPOINT?</param> </parameters>
Abschließend werde die zu schreibenden Datapoints noch in der Reihenfolge aufgeführt, in der sie im SQL-Befehl eingefügt werden sollen.
<datapoint path="/home/waschkeller/temperatur" /> <datapoint path="/home/vorratskeller/temperatur" />
Zusammenfassung
Die ermittelten Werte zyklisch in einer Datenbank zu speichern ist wohl der häufigste Anwendungsfall im (Industrial) Internet-of-Things. Mit dem connect-Gateway können wir diese Speicherung sehr fein steuern. So können wir beliebige Datenbank-Schemata abbilden und uns an bestehende Strukturen anpassen.
Neben einer PostgreSQL Datenbank unterstützt das connect-Gateway alle gängigen Datenbanken wie MS SQL-Server, MySQL, MariaDB, Oracle, DB2 und viele mehr. Falls eine bestimmte Datenbank noch nicht unterstützt wird, lässt sie sich mit dem entsprechenden JDBC-Treiber als Plugin sehr leicht nachrüsten.