openHAB 2: Items persistent in MariaDB speichern
openHab bietet eine Vielzahl an Möglichkeiten, wie wir unser Smarthome konfigurieren und verwalten können. In der letzten Anleitung habe ich euch die Einrichtung der MariaDB mit openHAB auf einer Synology Diskstation gezeigt. Somit sind wir bereit, Sensordaten persistent in der Datenbank abzuspeichern und im späteren Verlauf darauf zurückzugreifen. Falls Ihr noch keine Datenbank verwendet, solltet ihr vorab folgendes Tutorial überfliegen: openHAB 2: MariaDB Persistence mit Synology NAS
Grundsätzlich lassen sich alle Daten der openHAB-Items in einer Datenbank abspeichern. Ob es allerdings sinnvoll ist, den Status eines Lichtschalters über einen längeren Zeitraum zu speichern, ist jedem selbst überlassen. Ein sinnvolles Szenario erscheint mir die Aufzeichnung des Stromverbrauchs. Dadurch lässt sich im späteren Verlauf der durchschnittliche Verbrauch über einen angegebenen Zeitraum berechnen. In diesem Tutorial beziehe ich mich auf die smarte Steckdose TP HS110. Eine Anleitung zur Erstkonfiguration findest du hier: openHAB 2: smarte Steckdose – TP-Link HS110.
Konfiguration
Das Configfile muss im Verzeichnis /conf/persistence mit der Endung „.persist“ angelegt werden. In meinem Beispiel heißt die Datei „jdbc.persist“ und besteht immer aus den zwei folgenden Sektionen:
Persistence Triggers
Der Persistence Trigger wird in der Sektion „Strategies{ }“ konfiguriert und gibt an, wann der Stand eines Items in die Datenbank geschrieben werden soll. openHAB kommt bereits mit vordefinierten Triggers im Gepäck:
- everyChange: sollte das Item seinen Wert ändern, wird ein Eintrag erstellt.
- everyUpdate: sobald das Item ein Update erhält, wird ein Eintrag erstellt. Der Unterschied zum „everyChange“ liegt darin, dass sich der Wert des Items nicht zwangsläufig ändern muss.
- restoreOnStartup: der letzte verfügbare Wert wird beispielsweise nach einem Neustart von openHAB geladen.
Falls einem diese Trigger nicht ausreichen, lassen sich auch weitere sogenannte „Cron Persistence Triggers“ definieren. Diese lassen die Sensoredaten nach einer beliebigen Zeitspanne (zum Beispiel alle 15 Minuten) erfassen und abspeichern:
- every15Minutes: „0 */15 * ? * *“
Die Intervalle lassen sich frei definieren. Mithilfe des Cron-Generators kann man auch ohne Hintergrundkenntnisse Werte definieren.
Items
Items{ } ist die zweite wichtige Sektion der Config. In diesem Bereich werden alle persistenten Items und die dazugehörigen Persistence Triggers aufgelistet. Im Beispiel der TP-Link HS110 möchte ich alle 15 Minuten den momentanen Wert des Stromverbrauchs speichern. Damit kann ich im Nachgang mithilfe von Rules einen guten Mittelwert über den stündlichen/täglichen/monatlichen Stromverbrauch dieser Steckdose ermitteln. Der Itemname „Socket01_power“ muss natürlich zuvor in der „.items“ Config angelegt werden (siehe: openHAB 2: smarte Steckdose – TP-Link HS110).
Nachfolgend ein Konfigurationsbeispiel:
Strategies { everyMinute : "0 * * * * ?" every15Minutes : "0 */15 * ? * *" everyHour : "0 0 * * * ?" everyDay : "0 0 0 * * ?" default = everyChange } Items { Socket01_power : strategy = every15Minutes, restoreOnStartup }
Die Strategies{} und Items{} lassen sich beliebig erweiten und ausbauen.
Abschluss
Nachdem die Config gespeichert wurde, sollte natürlich auch noch ein Blick in das Logfile riskiert werden. Wenn dort das File erfolgreich reloaded wurde und kein Fehler auftaucht, war die Konfiguration erfolgreich. Abschließend kann das erfolgreich angelegte Item + bereits übermittelte Sensordaten auch via phpmyAdmin in der SQL-Datenbank angeschaut werden.
So sollte man im „items“ table einen neuen Eintrag mit dem Itemnamen auffinden können:
Desweiteren dürften, je nach gewählter Strategie, bereits die ersten Sensoredaten auftauchen:
Moin Kevin,
vielen Dank für die sehr ausführliche Anleitung! Habe ich alles genau so gemacht.
Die Datenbank wird in der MariaDB angelegt, die Konnektion zu openHAB ist o.k.
und auch die Tabelle, wo eine Spalte „items angelegt“ wird, ist da.
Jedoch werden keine Daten in die Tabelle geschrieben. Auch die Datei, wo die
„ITEMS“, die zyklisch die Daten in die Tabelle schreiben sollen, habe ich genau wie
hier beschrieben angelegt. Muß ich noch etwas besonderes bei der Datenbank beachten?
Vielen Dank für Deine Antwort im Voraus.
Hallo, wie kann man eigentlich den letzten eingetragen Wert in seiner Sitemap anzeigen lassen?
Danke
Viele Grüße
Micke