Seite 1 von 2
[SOLVED] Probleme mit historischen Daten
Verfasst: 12. Jul 2020 11:25
von LenaSophia
Hallo zusammen,
ich hoffe ihr könnt mir weiter helfen. Ich kommt nicht so wie gedacht an meine Historischen Daten. Persistiert wird (unter anderem) die Hellikeite von meinem Wettersensor:
Code: Alles auswählen
WettersensorPlus_ILLUMINATION : strategy = everyMinute, restoreOnStartup
Für jede Minute sehe ich auch Daten in der SQL. Das funktioniert somit.
Nun möchte ich die Werte der letzten Minuten abfragen und (erst mal) im Log ausgeben. Dabei verwende ich folgenden Code für die Abfrage des Items:
Code: Alles auswählen
WettersensorPlus_ILLUMINATION.historicState(now.minusMinutes(5)).state)
Nun ist es so, dass ich bei jedem Wert zwischen 1 und 60 immer den gleichen Wert zurück bekomme und erst mit Minuten-Angaben ab 61 die Werte aus der Datenbank bekomme.
Was könnte ich falsch machen, dass ich die Werte der ersten Stunde nicht abgefragt werden können? Hat jemand eine Idee für mich...?
DANKE!
Re: Probleme mit historischen Daten
Verfasst: 12. Jul 2020 11:47
von thomas_w
Zwie Fragen:
Mit welcher Data Persistence (SQL-Datenbank?) speicherst Du die Daten?
Gibt es eine Tabellenstruktur, wenn es sich um eine SQL-Datenbank handelt und wie sieht die aus?
Grüße
Thomas
Re: Probleme mit historischen Daten
Verfasst: 12. Jul 2020 11:59
von LenaSophia
Ich hab eine MySQL-Datenbank dafür angelegt, um das Standard Persistence-Addon "MYSQL Persistence /persistence-mysql - 1.14.0" von OpenHab nutzen zu können.
In der Datenbank gibt es zunächst eine Tabelle "ITEM". Hier enthalten ist jeweils eine ItemID und der Name des Items.
Dann gibt es pro ItemID eine Tabelle in der jeweils Uhrzeit und Wert des persistierten Items vorhanden ist.
Re: Probleme mit historischen Daten
Verfasst: 12. Jul 2020 12:25
von thomas_w
Also nur für mein Verständnis zwei mySQL Tabellen in der Art:
Code: Alles auswählen
CREATE TABLE item (
item_id INT NOT NULL PRIMARY KEY,
item_name VARCHAR(50) NOT NULL
);
CREATE TABLE item_log (
item_log_timestamp DATETIME NOT NULL PRIMARY KEY,
item_id INT NOT NULL,
item_log_value VARCHAR(50) NOT NULL
);
Grüße
Thomas
Re: Probleme mit historischen Daten
Verfasst: 12. Jul 2020 14:02
von LenaSophia
Die Tabellen hab openHab automatisch angelegt... aber ich versuchs... mein SQL ist etwas eingerostet:
Code: Alles auswählen
CREATE TABLE item (
item_id INT NOT NULL PRIMARY KEY,
item_name VARCHAR(50) NOT NULL
);
CREATE TABLE itemNr (
item_log_timestamp DATETIME NOT NULL PRIMARY KEY,
item_log_value VARCHAR(50) NOT NULL
);
Pro Item aus der ersten Tabelle wir automatisch eine weitere Datenbank vom zweiten Typ angelegt. Die Tabelle hat den Namen Item gefolgt von der Nummer aus der ersten Tabelle (z.B. Item52). In der Tabelle ist dann Timestamp und Value.
Probleme mit historischen Daten
Verfasst: 12. Jul 2020 14:55
von udo1toni
Welche Persistence verwendest Du? mysql oder jdbc? beide Varianten sind möglich, sinnvoller ist aber jdbc, weil es mehr Möglichkeiten bietet. (mysql nutzt ebenfalls jdbc als Connector... ist etwas verwirrend...)
Ist diese Persistence als default Persistence definiert? Hast Du eventuell noch weitere Persistence Services laufen?
Falls die Persistence nicht die default Persistence ist, musst Du den Namen der Persistence bei der Abfrage mit angeben, ist es default, schadet die Angabe aber nicht.
Was die Tabellen betrifft, so legen beide Services default eine Tabelle an, in der pro persistiertem Item der Klartextname des Items sowie der zugehörige Tabellenname hinterlegt sind.
Pro persistiertem Item wird dann noch eine weitere Tabelle angelegt, in der drei Felder definiert sind, der Index, der Zeitstempel und der Status (abhängig vom Itemtyp).
Initial müssen in MySQL nur eine Datenbank und ein User für openHAB angelegt werden. Falls Du MariaDB verwendest, wäre es besser, explizit den Connector für MariaDB zu verwenden.
Gesendet von iPad mit Tapatalk
Re: Probleme mit historischen Daten
Verfasst: 12. Jul 2020 15:37
von LenaSophia
Ich benutze die mysql-persistence. bisher reichte das für das was ich haben wollte, hab mich aber noch nicht genau damit beschäftigt was jdbc hier mehr kann.
Die persistence ist als default hinterlegt und funktioniert ja auch grundsätzlich. Mir werden immer alle definierten Werte nach dem Neustart ausgegeben und auch sonst persistieren sich meine Werte in der DB so wie geplant.
In einem Testskript hab ich folgendes geschrieben:
Code: Alles auswählen
rule "Test für persistence"
when Time cron "0 0/1 * 1/1 * ? *"
then
logInfo("Lenas Tests", "Now-005: " + WettersensorPlus_ILLUMINATION.historicState(now.minusMinutes(5)).state )
logInfo("Lenas Tests", "Now-010: " + WettersensorPlus_ILLUMINATION.historicState(now.minusMinutes(10)).state)
logInfo("Lenas Tests", "Now-060: " + WettersensorPlus_ILLUMINATION.historicState(now.minusMinutes(60)).state)
logInfo("Lenas Tests", "Now-061: " + WettersensorPlus_ILLUMINATION.historicState(now.minusMinutes(61)).state)
logInfo("Lenas Tests", "Now-075: " + WettersensorPlus_ILLUMINATION.historicState(now.minusMinutes(75)).state)
logInfo("Lenas Tests", "Now-090: " + WettersensorPlus_ILLUMINATION.historicState(now.minusMinutes(90)).state)
logInfo("Lenas Tests", "Now-120: " + WettersensorPlus_ILLUMINATION.historicState(now.minusMinutes(120)).state)
logInfo("Lenas Tests", "Now-200: " + WettersensorPlus_ILLUMINATION.historicState(now.minusMinutes(200)).state)
end
Die ersten drei Ausgaben geben immer den aktuellen Wert der Helligkeit wieder. Danach kommen die korrekten werden zurück. Also ab "now.minusMinutes(61)" funktioniert die Rückgabe des persistierten Werte. Nur Daten innerhalb der letzten Stunde werden mir nicht zurück gegeben, sondern nur der aktuelle Wert.
Ich hab spontan an caching gedacht, hab aber nichts passendes gefunden. Mich irritiert, dass es >1 Stunde funktioniert und <1 Stunde nicht...
Re: Probleme mit historischen Daten
Verfasst: 13. Jul 2020 18:12
von udo1toni
Sind alle Uhrzeiten im System korrekt gestellt?
Weil, was MIR gerade so durchdenken Kopf geht: Wenn die eine Uhrzeit (MySQL Datenbank) eine Stunde nachgeht (Sommerzeitverschiebung) und openHAB Daten abfragt, dann wird die Persistence evtl. einfach den letzten bekannten Wert liefern, auch wenn der eine Stunde alt ist.
Gesendet von iPad mit Tapatalk
Re: Probleme mit historischen Daten
Verfasst: 14. Jul 2020 12:57
von thomas_w
LenaSophia hat geschrieben: ↑12. Jul 2020 15:37
Code: Alles auswählen
logInfo("Lenas Tests", "Now-005: " + WettersensorPlus_ILLUMINATION.historicState(now.minusMinutes(5)).state )
Die ersten drei Ausgaben geben immer den aktuellen Wert der Helligkeit wieder. Danach kommen die korrekten werden zurück. Also ab "now.minusMinutes(61)" funktioniert die Rückgabe des persistierten Werte. Nur Daten innerhalb der letzten Stunde werden mir nicht zurück gegeben, sondern nur der aktuelle Wert.
Fragen:
Ist eigentlich irgendwo beschrieben, was dieses Funktionsmapping
historicState(now.minusMinutes(5)) letztlich intern für eine Abfrage auf der Datenbank erzeugt? (--> gefunden:
https://www.openhab.org/docs/configurat ... tence.html )
Hast Du eine Möglichkeit (SQL-Konsole) direkt in der Datenbank nachzuschauen, was für Daten nun wirklich gespeichert sind?
Grüße
Thomas
Re: Probleme mit historischen Daten
Verfasst: 18. Jul 2020 09:04
von LenaSophia
udo1toni hat geschrieben: ↑13. Jul 2020 18:12
Sind alle Uhrzeiten im System korrekt gestellt?
Weil, was MIR gerade so durchdenken Kopf geht: Wenn die eine Uhrzeit (MySQL Datenbank) eine Stunde nachgeht (Sommerzeitverschiebung) und openHAB Daten abfragt, dann wird die Persistence evtl. einfach den letzten bekannten Wert liefern, auch wenn der eine Stunde alt ist.
Gesendet von iPad mit Tapatalk
Ja, die Uhrzeiten stimmen. Bei den Werten >60 Minunten sind auch wirklich die Werte >60 Minuten, die zurück kommen.