Seite 1 von 1

MySQL mit OopenHAB verbinden Windows 11

Verfasst: 6. Mär 2023 17:22
von Maverick-811
Hallo Zusammen,

ich möchte mal Fragen, ob hier eine/einer unter Windows 11
eine Datenbank (MySQL) mit ObenHab am laufen hat?

Ich komme einfach nicht weiter und würde mich freuen, wenn mir jemand eine kleine Anleitung geben könnte.

Vielen Dank im Voraus
Horst

Re: MySQL mit OopenHAB verbinden Windows 11

Verfasst: 7. Mär 2023 02:29
von udo1toni
An welcher Stelle steckst Du denn fest?

Re: MySQL mit OopenHAB verbinden Windows 11

Verfasst: 7. Mär 2023 10:53
von Maverick-811
Guten Morgen,

ich habe unter Windows 11 die openHab Version 3.4.1 installiert und ca. 10 verschiedene shelly Geräte und ca. 15 ESP8266 Messstellen die Temperatur, Luftfeuchtigkeit und Spannungs/Leistungs Werte übermitteln. Das läuft.

Die nächste Steigerung wäre jetzt die Messwerte in eine Datenbank für die grafische Darstellung zu speichern.

Da ich bereits ein NAS mit MySQL habe, möchte ich die Daten dort ablegen.

Ich habe dort eine Datenbank „openhab_db“ mit Kollation „latin1_german1_ci“ erstellt.
Keine Tabelle!!! (siehe unten)

Ich habe JDBC Persistence MySQL installiert.
Unter Settings habe ich Persistence auf „JDBC“ gesetzt.

Ich habe mit VSC Dateien erstellt und in die Ordner gespeichert.

File: jdbc.cfg Ordner: C:\openhab\conf\services

mysql:url=jdbc:mysql://192.168.178.33:3306/open_db (IP Adresse von NAS Server)
mysql:user=Horst
mysql:password=xxxx
sqltype.NUMBER = DOUBLE


File: jdbc.persist Ordner: C:\openhab\conf\persistence

Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
default = everyChange
}
Items {
ESP8266102Temp : strategy = everyChange, restoreOnStartup
}

File: Batterie_Temp_Humi.items Ordner: C:\openhab\conf\items

Number ESP8266102Temp "Esp8266 102 temp" {channel="mqtt:topic:a02032baab:bf33df1320:ESP8266102Temp"}

(und weitere Items)

File: jdbc.items Ordner: C:\openhab\conf\items

Group gRestoreOnStartup "Restore Items on Startup"

Da weiß ich nicht, ob das Richtig ist!!!


Nach dem Neustart von openHAB sind in „JDBC Persistence Service“ eingetragen:

Datenbank-URL: jdbc:mysql://192.168.178.33:3306/openhab_db (Datenbank)
Benutzername: Horst (ist auch in MySQL als User mit den Zugangs Rechten)
Password: xxxxxxx (das Passwort in MySQL)
Items Manage Table: Items (Schreibweise wie im Text darunter)
Tabellenname-Präfix: item (Schreibweise wie im Text darunter)
Tabellenname für Real-Name Generierung: Deaktivieren
Groß-/Kleinschreibung für Tabellennamen: Aktivieren
Tabellenname neu aufbauen: Aktivieren

Was ist noch zu tun?
Muss ich in der Datenbank noch eine Tabelle anlegen oder macht das openHab und wenn Ja, welche Einstellungen muss ich noch machen?

Leider gibt es keine Anleitung für Windows-Nutzer und ich bin noch Neuling.
Ich hoffe, Ihr könnt mir weiterhelfen.

Gruß
Horst

Re: MySQL mit OopenHAB verbinden Windows 11

Verfasst: 7. Mär 2023 13:17
von udo1toni
Ah. Als erstes:

Prüfe bitte unbedingt, ob Du tatsächlich MySQL verwendest, oder vielleicht doch die weitgehend kompatible MariaDB (das ist der Open Source Fork von MySQL, welcher inzwischen meist verwendet wird).

Unter openHAB3.4 kannst Du die Datenbankverbindung direkt über die UI konfigurieren
Main UI->Administration->Einstellungen->Other Services (rechte Spalte unten)->JDBC Persistence Service
Natürlich steht der Weg über die Konfigurationsdatei weiterhin zur Verfügung, ich bin mir gerade nicht sicher, ob openHAB hier tatsächlich in die cfg-Datei schreibt, oder wie im Rest der Textkonfiguration den Inhalt der Datei nach userdata/config/org/openhab/ kopiert. Dann könntest Du Bei Konfiguration über die jdbc.cfg über die UI keine dauerhaften Änderungen mehr vornehmen (nach einem Neustart sind Änderungen über die UI wieder verschwunden).

Wichtig wäre erst mal, dass Du für die neue Datenbank in MySQL einen eigenen User anlegst, üblicherweise openhab und ein Passwort Deiner Wahl.
Dieser User bekommt exakt die erweiterten Rechte für die Datenbank openhab_db (erweitert bedeutet, der User darf bis auf das Erteilen weiterer Berechtigungen alles, wobei man das sicher auch noch zusätzlich einschränken könnte, letztlich sind die Rechte aber exklusiv auf der einen Datenbank.
Da beim Anlegen des Users immer auch angegeben wird, von wo der User sich einloggen darf, kannst Du dort die IP Deines openHAB Systems hinterlegen.
Falls openHAB auf dem gleichen Rechner läuft, bitte dennoch die echte IP eintragen, nicht localhost oder 127.0.0.1.

Tabellenname neu aufbauen müsstest Du unbedingt deaktivieren, diese Funktion ist nur für die Umstellung der Tabellen. Es gibt zwei Varianten:

1. openHAB schaut in der Tabelle "Items" nach, welche Tabelle zum Item xy gehört, bekommt die Information, z.B. die Tabelle heißt Item1234, holt die Informationen aus Tabelle Item1234 (oder schreibt dorthin). Ist noch keine Tabelle vorhanden, erzeugt openHAB die Tabelle mit der niedrigsten Zahl, die höher als die höchste bereits vorhandene Zahl ist (sprich, wenn Du zwischendrin Tabellen löschst und auch den Eintrag in der Items Tabelle entfernst, wird openHAB diese Tabelle dennoch nicht mehr anlegen)
2. openHAB schreibt direkt die Tabellen mit dem Tabellennamen, der dem Itemnamen entspricht.

Die erste Form ist "sicher", die zweite Form kann Probleme bereiten, wenn die Itemnamen allzu exotisch sind. openHAB unterscheidet z.B. zwischen MeinItem und meinItem, bei MySQL bin ich mir nicht sicher, ob der Tabellenname tatsächlich Case Sensitive ist (Wobei es ja auch dafür einen Schalter gibt...). Auch die Länge des Tabellennamens ist vermutlich nicht beliebig, im Gegensatz zu Itemnamen. Da muss man halt genau hinschauen.
Tabellenname neu Aufbauen dient dazu, die Namen automatisiert von der einen Form in die andere Form umzustellen. Ursprünglich gab es nur die indirekte Adressierung, also über die Tabelle "Items", welche die Verknüpfung zwischen Itemnamen und Tabellennamen herstellt.
Welche der beiden Formen verwendet wird, bestimmt der Schalter Tabellenname für Real-Name Generierung


Die Konfiguration ist im Übrigen für alle Plattformen identisch, soweit es um die openHAB-Seite geht. MySQL gibt es auch als Programmpaket für Windows, das wäre dann eine andere Geschichte :)

Noch zu beachten: MySQL ist gewöhnlich so konfiguriert, dass es nur über einen Socket kommuniziert. Somit ist MySQL dann nicht über das Netzwerk erreichbar (obwohl ein Port angegeben ist). Du musst also zunächst sicherstellen, dass MySQL überhaupt auf Port 3306 lauscht.

Ich nutze für den Administrations-Zugriff HeidiSQL, wobei man auch dafür zunächst einen User erstellen muss, der überhaupt über Netzwerk alles darf :)

Re: MySQL mit OopenHAB verbinden Windows 11

Verfasst: 7. Mär 2023 15:41
von Maverick-811
Hallo udo1toni,

vielen Dank für die Informationen.
Ich werde morgen diese verarbeiten und berichten.

Vorab: ich benutze MySQL auf einem NSA325 von Zyxel

Bis bald
Horst

Re: MySQL mit OopenHAB verbinden Windows 11

Verfasst: 20. Mär 2023 17:34
von Maverick-811
Hallo,

ich kann es nicht glauben, die Datenbank funktioniert.

Ich möchte natürlich hier dokumentieren was schief gelaufen ist und warum es jetzt funktioniert.

Warum ging es nicht:
Ich habe meine Datenbank (MySQL auf meinem NSA-Server mit einer Datenbank openhab und User openhab) in meine bestehende Datenbank eingebaut. Das sollte auch so funktionieren.

Aber nachdem ich die Datenbank mit HeidiSQL überprüfen wollte, da kam eine Fehlermeldung

„Host „xxxxxxx“ is blocked because of many connection erreos; unblock with `mysqladmin flush-hosts`“

Mit viel Mühe habe ich den Fehler beseitigen können. Ich habe mich deshalb entschlossen,
eine Datenbank (MariaDB) auf einem anderen PC zu installieren.

Was habe ich getan:
1. Datenbank mit dem Namen „openhab“ angelegt.
2. User „openhab“ mit einem „Password“ und allen Rechten angelegt.
3. Eine Tabelle mit dem Namen „Items“ angelegt.

Openhab:
1. JDBC Persistence Service installiert und ausgewählt.
2. JDBC Persistence MariaDB installiert und diese Eingaben gemacht:
3. jdbc:mariadb://192.168.178.38:3306/openhab
4. Benutzername: „openhab“
5. Password: xxxx
6. Items Manage Table „Items“
7. Tabellennamen-Präfix „item“
8. Tabellenname neu aufbauen „Deaktivieren“

Die File „jdbc.persist“ mit meinen Items erweitert (siehe meinen Beitrag weiter oben)
In der File „jdbc.cfg“ die Änderungen eingetragen

„url=jdbc:mariadb://192.168.178.38:3306/openhab“
mysql:user=openhab
mysql:password=xxxx

Das war es. Speichern nicht vergessen und ein Restart.

In der Datenbank werden automatisch alle Items die in der „jdbc.persist“ gelistet sind unter der Tabelle „Items“ aufgelistet.
Es wird für jedes Item eine Tabelle mit einer Spalte angelegt, in der die Werte stehen.
Die Tabellen sind mit item und einer Ziffer gekennzeichnet.

Ich hoffe, ich habe nichts vergessen.

Gruß
Horst