NEWS
[gelöst] sql-Adapter - einige sich selten ändernde Variablen werden nicht in die DB geschrieben
-
Wenn bei Werten zum Eintrag in die sql-db der Modus "nur bei Änderung speichern" angewählt wird findet
der Eintrag in die Datenbank nur statt, wenn die Zeitpunkte der Datenänderung exakt identisch mit dem
Zeitpunkt des Lesens der Daten übereinstimmt. Es wird also nicht auf Änderung des Wertes geprüft, sondern
ob die Änderung genau jetzt erfolgt ist und nicht schon älter ist.
Wenn aber Variable durch Scripte geändert werden ist der Zeitstempel der Änderung der Zeitstempel des Programmablaufs.
Dieser Zeitpunkt kann bis zu 30 Sekunden (dem Abstand des Polling von hm-rega Aufrufen) vom Zeitpunkt
der Datenänderung unterscheiden. Daher wird der Wert nicht in die sql-db geschrieebn, obwohl er geändert wurde.
Lösung:
In /opt/iobroker/node_modules/iobroker.sql/main.js hatte ich in der Funktion pushHistory(id, state) gesehen, dass
in der Zeile 904 bei geseztem Flag "nur bei Änderung" KEIN Eintrag in die sql-db stattfindet, wenn diese beiden Zeitstempel ungleich sind.
Also der geänderte Programmcode: (das Original steht noch als Kommentar drin):
// if (sqlDPs[id].state && settings.changesOnly && (state.ts !== state.lc)) return; if (sqlDPs[id].state && settings.changesOnly && ((state.ts - state.lc) >= 30)) return;
Und schon werden alle Daten in die sql-db geschrieben, deren Änderung innerhalb der letzten 30 Sekunden stattgefunden haben.
Mein Problem hat sich damit gelöst.