kann persistence nicht einrichten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
rebell21
Beiträge: 125
Registriert: 23. Aug 2024 09:34
Answers: 0

kann persistence nicht einrichten

Beitrag von rebell21 »

ich habe versucht, die Temperaturdaten dauerhaft in eine Mariadb zu speichern. Ich habe die JDBC Mariadb als Persistence Add on installiert.
Dann einen JDBC Treiber in der Verzeichnis $OPENHAB_HOME/addons kopiert. Dann die default persistence von RRD4j auf JDBC MariaDB umgeschaltet
Trotzdem sehe ich im frontail log jede Menge Fehlermeldungen der Form

Code: Alles auswählen



2025-01-23 18:35:38.552 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!

2025-01-23 18:35:38.554 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!

2025-01-23 18:35:38.557 [WARN ] [jdbc.internal.JdbcPersistenceService] - JDBC::query: database not connected, query aborted for item 'HeizungViessmann_Outside_Temperature'

2025-01-23 18:35:38.559 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!

2025-01-23 18:35:38.561 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!

2025-01-23 18:35:38.562 [WARN ] [jdbc.internal.JdbcPersistenceService] - JDBC::query: database not connected, query aborted for item 'HeizungViessmann_Outside_Temperature'

2025-01-23 18:35:38.564 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!

2025-01-23 18:35:38.567 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!

2025-01-23 18:35:38.569 [WARN ] [jdbc.internal.JdbcPersistenceService] - JDBC::query: database not connected, query aborted for item 'HeizungViessmann_Outside_Temperature'



Ich habe mariadb-java-client-3.5.1.jar im Verzeichnis $OPENHAB_HOME/addons und den service neu gestartet. Außerdem gibt es eine Datei jdbc.persist in /etc/openhab/persistence

Wo muss ich welchen JDBC Treiber hinkopieren ?

Anmerkung : die default RRD4j persistence (konfiguriert mit rr4j.persist) funktioniert. Ich kann den Zeitverlauf von Temmperaturen sehen.

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: kann persistence nicht einrichten

Beitrag von udo1toni »

Was denn für ein Treiber? Du musst nichts extra einrichten!

Du musst MariaDB (den Server) installieren (irgendwo), in MariaDB eine Datenbank für openHAB anlegen, mit einem passenden User, der volle Rechte auf diese Datenbank hat, dann in openHAB das JDBC-MariaDB Addon installieren und konfigurieren (User, Passwort, Datenbankname, IP-Adresse und Port unter denen MariaDB erreichbar ist).

MariaDB lässt default nur localhost Zugriffe auf die Engine zu, falls MariaDB also auf einem anderen Rechner läuft als openHAB, musst Du außerdem noch die Konfiguration von MariaDB anpassen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

rebell21
Beiträge: 125
Registriert: 23. Aug 2024 09:34
Answers: 0

Re: kann persistence nicht einrichten

Beitrag von rebell21 »

das habe ich so gemacht
1. mariadb installiert und Datenbank openhab mit create database openhab erzeugt

2. user openhab mit create user 'openhab'@'%' identified by 'password';

3. grant all privileges on openhab.* to 'openhab' @'%'

4. flush privileges;

5. mit "mysql -u openhab -p -h x.x.x.x" kann openhab erfolgreich connecten von remote

6. JDBC persistenz installiert in openhab und konfiguriert mit "jdbc:mariadb://x.x.x.x:3306/openhab" und user/password

7. default persistence auf JDBC umgeschaltet

8. Datei jdbc.persist in /etc/openhab/persistence angelegt

Diese funktioniert auch, immerhin will openhab das dort genannte item 'Temperatur_Terrasse_Actual_Temperature' in der mariadb speichern.


geht aber nicht. In frontail sehe ich die Fehlermeldung

Code: Alles auswählen


2025-01-24 23:57:22.217 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!
2025-01-24 23:57:22.218 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!
2025-01-24 23:57:22.218 [WARN ] [jdbc.internal.JdbcPersistenceService] - JDBC::query: database not connected, query aborted for item 'Temperatur_Terrasse_Actual_Temperature'
2025-01-24 23:57:22.218 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!
2025-01-24 23:57:22.218 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!
2025-01-24 23:57:22.218 [WARN ] [jdbc.internal.JdbcPersistenceService] - JDBC::query: database not connected, query aborted for item 'Temperatur_Terrasse_Actual_Temperature'
2025-01-24 23:57:22.218 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!
2025-01-24 23:57:22.219 [WARN ] [persistence.jdbc.internal.JdbcMapper] - JDBC::openConnection: no driver available!
2025-01-24 23:57:22.219 [WARN ] [jdbc.internal.JdbcPersistenceService] - JDBC::query: database not connected, query aborted for item 'Temperatur_Terrasse_Actual_Temperature'

Wo muss ich den fehlenden jdbc-Treiber herholen und wo dann hinkopieren ?
Was muss ich noch konfigurieren ? Neustart des openhab services ?
Zuletzt geändert von rebell21 am 25. Jan 2025 09:32, insgesamt 1-mal geändert.

rebell21
Beiträge: 125
Registriert: 23. Aug 2024 09:34
Answers: 0

Re: kann persistence nicht einrichten

Beitrag von rebell21 »

funktioniert !!!

nach einem Neustart des Services tauchen jetzt in der Datenbank items auf und eine Tabelle Namens "item0001". Dort sind Werte
Danke geht !!!

rebell21
Beiträge: 125
Registriert: 23. Aug 2024 09:34
Answers: 0

Re: kann persistence nicht einrichten

Beitrag von rebell21 »

es funktioniert. Aber : Ich kann die Zeitintervalle nicht korrekt einstellen. Im Moment speichert openhab die Werte jede Sekunde. Ich versuche eine andere strategy zu definieren.

Aber openhab lehnt meine cron Strings als fehlerhaft ab. Ich versuche eine Speicherung jede Minute und habe dafür den CRON String "* * * * *" als strategy definiert (unix kompatibel)

Code: Alles auswählen


Strategies {
       every30Seconds:     "*/5 * * * * ? *"
       everyMinute:  "* * * * *"
}

Das quittiert openhab mit folgender Fehlermeldung.

Code: Alles auswählen


2025-01-25 10:29:56.195 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'jdbc.persist'

2025-01-25 10:29:56.206 [ERROR] [ore.common.registry.AbstractProvider] - Could not inform the listener 'org.openhab.core.persistence.internal.PersistenceServiceConfigurationRegistryImpl@21f932c0' about the 'UPDATED' event!: Invalid cron expression, too little fields. 6 or 7 (with year) expected but was: '* * * * *'

Welchen Cron String erwartet openhab für "jede Minute"

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: kann persistence nicht einrichten

Beitrag von udo1toni »

Ja, da hat openHAB Recht, die Cron Ausdrücke sind falsch. :)

Der wichtigste Punkt hier: openHAB nutzt Quartz cron. Im Unterschied zum "normalen" cron, welches z.B. im GNU/Linux System eingesetzt wird, ist Quartz cron sekundengenau.
Und weil es sekundengenau ist, muss man die Sekunden auch angeben :)
Der Aufbau des Quratz cron Ausdrucks ähnelt in weiten Teilen dem des normalen cron Ausdruck, mit zwei wesentlichen Unterschieden, nämlich eben der Sekunde und dann noch dem ?.

Code: Alles auswählen

Strategies {
//                    s    m h D M W Y
    every30Seconds:  "5/30 * * * * ? *"
       everyMinute:  "2    * * ? * *"
// s - Sekunde
// m - Minute
// h - Stunde
// D - Tag (des Monats)
// M - Monat
// W - Wochentag
// Y - Jahr (optional, kann entfallen)
// * - Wert egal
// ? - Wert egal (entweder Tag oder Wochentag, muss verpflichtend exakt einmal vorkommen!
}
Es gibt noch diverse weitere Funktionen, mit denen man z.B. gezielt den letzten Tag des Monat, den 3. Montag im Monat usw. ansprechen kann, die schenke ich mir hier mal.
Der cron Ausdruck "every30Seconds" löst alle 30 Sekunden aus, und zwar in Sekunde 5 und 35 (natürlich kannst Du hier auch eine 0 rein schreiben, geht nur darum, zu erklären, wie was zusammenhängt). Der cron Ausdruck "everyMinute" löst einmal pro Minute aus, und zwar zur 2. Sekunde der Minute.
Es ist übrigens durchaus eine gute Strategie, cron Ausdrücke zu verteilen, also nicht drölfzig Time Ereignisse zur vollen Minute zu starten.
Noch mal zum ?: Wie geschrieben ist dieses verpflichtend in jedem cron Ausdruck anzugeben, entweder als Wochentag oder als Tag des Monats. Man kann also keine cron Rule schreiben, die nur am Freitag dem 13. auslöst :)
Als Feldtrenner dient das Leerzeichen, wobei mehrere aufeinander folgende Leerzeichen als ein Leerzeichen betrachtet werden (siehe everyMinute)
Als Werte sind für das jeweilige Feld passende Zahlen erlaubt, man kann Wertebereiche angeben (z.B. 1-12), mehrere diskrete Werte (5,20,35,50), oder auch eine Kombination aus beidem (0-5,17-39), wichtig ist nur, dass kein Leerzeichen verwendet wird :) denn das ist ja der Feldtrenner.
Im Fall des Monats und des Wochentags sind zusätzlich noch die englischen Abkürzungen erlaubt.
Die Wochentage sind von 1=MON -> Montag bis 7=SUN -> Sonntag nummeriert. Will man also etwas Samstag bis Dienstag geschehen lassen, wäre der korrekte Ausdruck 1-2,6-7, nicht 6-2 (und natürlich könnte man auch ebenso gut 1,2,6,7 schreiben)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

rebell21
Beiträge: 125
Registriert: 23. Aug 2024 09:34
Answers: 0

Re: kann persistence nicht einrichten

Beitrag von rebell21 »

super danke, nun funktioniert es. Ich war vom Unix Cron ausgegangen

Antworten