MySQL Datenbankanbindung für OpenHAB


Um Daten permanent speichern zu können, braucht OpenHAB ein Datenbank-Binding. Die Installation ist recht unkompliziert. Im ersten Schritt muss eine Datenbank im MySQL Server erzeugt werden.

create database openhab_db;

Nun muss ein Benutzer mit den entsprechnenden Rechten eingerichtet werden, der nur auf diese Datenbank zugreifen darf.

CREATE USER 'openhab_user'@'127.0.0.1' IDENTIFIED BY 'GeHeImEs PaSsWoRt';
GRANT alter,create,select,insert,update ON openhab_db.* TO 'openhab_user'@'127.0.0.1' IDENTIFIED BY 'GeHeImEs PaSsWoRt';

Der Benutzer „openhab_user“ darf die Tabellen in der Datenbank erstellen und ändern. Zusätzlich darf der Benutzer die Tabellen auslesen, beschreiben und den Inhalt ändern. Jetzt kann das MySQL-Binding installiert werden.

apt-get install openhab-addon-persistence-mysql

In der „openhab.cfg“ muss nun die grundlegende Konfiguration vorgenommen werden.

# mysql Datenbank
mysql:url=jdbc:mysql://127.0.0.1/openhab_db
mysql:user=openhab_user
mysql:password=GeHeImEs PaSsWoRt
mysql:reconnectCnt=1
mysql:waitTimeout=300

Der Wert „waitTimeout=300“ ist relativ wichtig. Ist der Timeout zu klein, baut OpenHAB die Verbindung zur Datenbank zu schnell ab und erzeugt eine Fehlermeldung in Logfile.

[.p.m.i.MysqlPersistenceService] - mySQL: Connection is not valid!
[.p.m.i.MysqlPersistenceService] - mySQL: Error count exceeded 1. Disconnecting database.

Wenn diese Fehlermeldung im Logfile auftaucht,dann ist der Timeout-Wert zu klein gewählt. Als nächstes muss die Speicherstrategie konfiguriert werden. Dies geschieht in der Datei „/etc/openhab/configurations/persistence/mysql.persist“.

Strategies {
        everyMinute     : "0 * * * * ?"
        everyHour       : "0 0 * * * ?"
        everyDay        : "0 0 0 * * ?"

        // If no strategy is specified for an item entry below, the default list will be used.
        default =
}

Ich habe hier die Strategie einmal pro Minute, einmal pro Stunde und eimal pro Tag definiert. Den Default-Eintrag habe ich leer gelassen, da HABmin sonst bei jedem angelegten Item diesen Wert heranziehen würde. Das heißt, wenn man nicht aufpasst wird jedes erzeugte Item in der Datenbank gespeichert.

Zum Schluss müssen noch die Items ausgewählt werden die gespeichert werden sollen. Dies geschieht in der gleichen Datei.

Items {
        Aussentemperatur : strategy = everyMinute
}

Nach dem Neustart des OpenHAB Services steht die Verbindung zur Datenbank zur Verfügung und das Item „Aussentemperatur“ wird jede Minute in der MySQL gespeichert. Das Binding erzeugt in der Datenbank eine Tabelle mit dem Namen „Items“. Diese Tabelle beinhaltet die Zuordnung einer ID zu dem Namen des Items.

mysql-binding2Zusätzlich werden für jedes Item, das gespeichert wird, eine Tabelle nach dem Schema „itemX“ angelegt. Das „X“ beinhaltet dann die ID aus der Item-Tabelle.

mysql-binding3Links:

MySQL-Persistence im OpenHAB Wiki


Schreibe einen Kommentar