Seite 1 von 1

JDBC::query: unable to get item for itemName

Verfasst: 15. Mär 2023 08:36
von harry_wr
Hi,
habe den Persidenceservice umgestellt auf JDBC mit einer MariaDB. Hat auch alles gut geklappt bis auf ein paar Errorlogs zu Items, die es gar nicht mehr gibt! Habe auch die JSONDB Dateien (/var/lib/openhab/jsondb/*) geprüft. Da stehen die Items nicht mehr mit drin. Wo könnte diese Registierung noch enthalten sein?
Kann man die alten Werte aus den rrd Datein zu den Items auch irgenwie in die neu MariaDB migrieren?

Gruß
Harry

Re: JDBC::query: unable to get item for itemName

Verfasst: 15. Mär 2023 18:55
von udo1toni
Willkommen im openHAB Forum!

Die JDBC Persistence erzeugt automatisch für jedes zu persistierende Item eine Tabelle in der verlinkten Datenbank. Der Fehler ist etwas vage, besser wäre, einmal die betreffenden Logzeilen komplett zu sehen (bitte als Code einfügen, nicht als normalen Text, keinesfalls als Bild).

Hast Du eine neue Datenbank erzeugt?

Bezüglich Datenübernahme aus der rrd4j: das ist eher schwierig, weil rrd ganz anders arbeitet als eine "gewöhnliche" SQL Datenbank. Es gibt natürlich Tools, mit denen Du die rrd Dateien öffnen kannst. Du kannst dann die Werte auch herauskopieren und in eine bestehende Tabelle einer anderen Datenbank einfügen. DAs Problem ist aber, dass rrd4j verschiedene "Behälter" hat, in denen die Daten landen. Je älter die Daten, desto gröber die zeitliche Auflösung. Das bedeutet: rrd4j errechnet für einen alten Block Daten mit hoher zeitlicher Auflösung den Durchschnittswert und speichert ihn im Behälter mit der nächstgröberen zeitlichen Auflösung ab. Anschließend wird der Block gelöscht (bzw. mit neuen Daten überschrieben)
Auf diese Weise bleibt die Dateigröße immer gleich, aber je älter die Daten sind, desto ungenauer ist die Darstellung.
In MariaDB (oder anderen gleichartigen Datenbanken) ist dieses Verhalten nicht vorgesehen, man könnte es natürlich mit entsprechenden Stored Procedures nachrüsten, aber die Datenbank wäre damit vermutlich ganz gut beschäftigt, weil halt nicht dafür ausgelegt. Packst Du nun solche Daten in die Datenbank rein, so wird es zumindest ein unerwartetes Verhalten geben.

Re: JDBC::query: unable to get item for itemName

Verfasst: 16. Mär 2023 10:19
von harry_wr
Hi Udo,
danke für die Antwort! Ja ich habe eine komplett neue Datenbank angelegt und einen speziellen openhab User mit vollen Rechten zugeordnet. Funktioniert auch einwandfrei mit allen existierenden Items!
Hier der LOG von den fehlenden:

Code: Alles auswählen

2023-03-16 07:42:25.152 [ERROR] [jdbc.internal.JdbcPersistenceService] - JDBC::query: unable to get item for itemName: 'PowefoxaktuelleWerte_Einspeisung'. Ignore and give up!

2023-03-16 07:42:25.203 [ERROR] [jdbc.internal.JdbcPersistenceService] - JDBC::query: unable to get item for itemName: 'Zaehler_aktuellerVerbrauch'. Ignore and give up!

2023-03-16 07:42:25.460 [ERROR] [jdbc.internal.JdbcPersistenceService] - JDBC::query: unable to get item for itemName: 'PowefoxaktuelleWerte_Einspeisung'. Ignore and give up!

2023-03-16 07:42:25.511 [ERROR] [jdbc.internal.JdbcPersistenceService] - JDBC::query: unable to get item for itemName: 'Zaehler_aktuellerVerbrauch'. Ignore and give up!
wie bereits beschrieben, gibt es diese Items eigentlich nicht mehr!
Gruß
Harry

Re: JDBC::query: unable to get item for itemName

Verfasst: 16. Mär 2023 11:58
von udo1toni
Ich nehme an, die Meldung kommt immer mal wieder?

Du kannst schauen, ob es in den Tiefen der Konfiguration noch Leichen gibt.
Der "einfachste" Weg:

Code: Alles auswählen

find /etc/openhab/ -exec grep -i 'PowefoxaktuelleWerte_Einspeisung' /dev/null {} \;
find /var/lib/openhab/ -exec grep -i 'PowefoxaktuelleWerte_Einspeisung' /dev/null {} \;
find /etc/openhab/ -exec grep -i 'Zaehler_aktuellerVerbrauch' /dev/null {} \;
find /var/lib/openhab/ -exec grep -i 'Zaehler_aktuellerVerbrauch' /dev/null {} \;
Falls es irgendwo in der Konfiguration eine Datei gibt, in der die Itemnamen vorkommen, wird die bash Dir so die Dateinamen ausgeben.
Wenn Du fündig wirst, musst Du weiter schauen, um welche Dateien es sich handelt und die Überreste (im Zweifel sehr vorsichtig) entfernen.
Sofern die Reste nicht im /etc/-Zweig liegen, musst Du dazu vor dem Speichern der Dateien unbedingt openHAB beenden, weil nur im /etc/-Zweig eine Überwachung der Dateien stattfindet.
Da es sich dabei ganz schnell um eine Operation am offenen Herzen handelt, solltest Du die betreffenden Dateien unbedingt zuerst sichern, bevor Du etwas daran änderst. :)

Re: JDBC::query: unable to get item for itemName

Verfasst: 16. Mär 2023 14:05
von harry_wr
super! Hat mir sehr geholfen! Habe noch Leichen in den Dateien:
/var/lib/openhab/jsondb/uicomponents_ui_page.json
/var/lib/openhab/jsondb/org.openhab.core.thing.link.ItemChannelLink.json

Vorgehen:
  • 1. Stop von openhab
    2. Dateien bearbeitet
    3. Startvon openhab
Hat alle wunderbar geklappt! Fehlermeldung ist jetzt nicht mehr vorhanden :!:

Danke Dir!!!!

Re: JDBC::query: unable to get item for itemName

Verfasst: 16. Mär 2023 16:51
von udo1toni
Prima :)