NEWS
influxDB adapter schreibt z.B. bei einem Neustart alte Werte
-
Hi,
ich hoffe ich schreibe hier im richtigen Forenabschnitt.
Folgendes Problem habe ich. Der InfluxDB Adapter schreibt den letzten Wert von einem Datenpunkt in die Datenbank auch wenn der längst übertragen wurde. Dies tritt bei jedem gelogten Datenpunkt auf wenn ioBroker neu startet, der InfluxDB Adapter neu startet oder die Konfiguration von einem gelogten Datenpunkt gespeichert wird.
Besonders Problematisch ist das bei Datenpunkten die nur sehr selten geschrieben werden und z.B. als Säule in Flot dargestellt werden. Eine Deltaprüfung (z.B. 0.00001) hilft da anscheinend auch nicht.Folgenden Datenpunkt kann ich als Beispiel geben.
{ "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1604927567240, "common": { "name": "Hausanschluss.Zähler Haus.kWh je Tag", "role": "value", "type": "number", "desc": "Manuell erzeugt", "unit": "kWh", "min": 0, "def": 0, "read": true, "write": true, "custom": { "influxdb.0": { "enabled": true, "changesOnly": true, "debounce": "10", "retention": 0, "changesRelogInterval": 0, "changesMinDelta": 0.0001, "storageType": "", "aliasId": "" } } }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "0_userdata.0.Hausanschluss.Zähler_Haus.kWh_je_Tag", "type": "state" }
Debuglog wenn der Datenpunkt gespeichert wird.
influxdb.0 2020-12-21 22:37:26.042 debug (6265) Datatype 0_userdata.0.Hausanschluss.Zähler_Haus.kWh_je_Tag: Currently: number, StorageType: false falseinfluxdb.0 2020-12-21 22:37:26.042 debug (6265) timed-relog 0_userdata.0.Hausanschluss.Zähler_Haus.kWh_je_Tag, value=8.956199999999967, lastLogTime=undefined, ts=1608586646042 falseinfluxdb.0 2020-12-21 22:37:26.042 info (6265) enabled logging of 0_userdata.0.Hausanschluss.Zähler_Haus.kWh_je_Tag, Alias=false falseinfluxdb.0 2020-12-21 22:37:19.798 debug (6265) SELECT * from "0_userdata.0.Hausanschluss.Zähler_Haus.kWh_je_Tag" WHERE time < '2020-12-21T21:37:30.849Z' ORDER BY time DESC LIMIT 50;SELECT value from "0_userdata.0.Hausanschluss.Zähler_Haus. falseinfluxdb.0 2020-12-21 22:37:19.478 debug (6265) SELECT * from "0_userdata.0.Hausanschluss.Zähler_Haus.kWh_je_Tag" WHERE time < '2020-12-21T21:37:30.528Z' ORDER BY time DESC LIMIT 50;SELECT value from "0_userdata.0.Hausanschluss.Zähler_Haus.
Ergebnis in der InfluxDB. Alle Werte mit "system.adapter.influxdb.0" wurden in einem der oben genannten Fälle geschrieben. "system.adapter.influxdb.0" wird aber auch verwendet wenn "changesRelogInterval" größer 0 ist (was hier aber nicht der Fall ist).
time ack from q value 1608508800007 true system.adapter.javascript.0 0 8.956199999999967 1608512621946 true system.adapter.influxdb.0 0 8.956199999999967 1608568536048 true system.adapter.influxdb.0 0 8.956199999999967 1608569242905 true system.adapter.influxdb.0 0 8.956199999999967 1608569400896 true system.adapter.influxdb.0 0 8.956199999999967 1608569521072 true system.adapter.influxdb.0 0 8.956199999999967 1608581637265 true system.adapter.influxdb.0 0 8.956199999999967 1608583155224 true system.adapter.influxdb.0 0 8.956199999999967 1608585570880 true system.adapter.influxdb.0 0 8.956199999999967 1608585741436 true system.adapter.influxdb.0 0 8.956199999999967 1608586393735 true system.adapter.influxdb.0 0 8.956199999999967
Meine Vermutung ist das "lastLogTime=undefined" das Problem ist weswegen er die alten Werte schreibt. Frage ich den Datenpunkt mit einem Blockly die letzte Änderung ab hat der Punkt aber einen Zeitstempel.
Weiter komme ich leider in der Fehleranalyse ohne Hilfe nicht und ein manuelles Löschen der Werte in der InfluxDB ist auf dauer auch keine Lösung. -
Ich habe exakt das gleiche Problem, sowohl mit sql als auch influxdb. Keiner eine Idee?
-
- Warum hast Du debounce (Entprellen) nicht auf "0"?
- Wenn die Werte so selten geschrieben werden, brauchst Du dann den Haken
"nur bei Änderung"?
-
@gugulao Wirklich nur (einschließlich mir) drei User die mit diesem Problem kämpfen? Oder hat mittlerweile jemand eine Lösung?
-
Seit 4.0.20 wird bei mir kein (schon übertragener) Datenpunkt nochmals bei reboot geschrieben. Danke!
-
@dock07 Kann ich leider nicht bestätigen.
Der Adapter schreibt beim beenden von IOBroker alle Werte in die DB. Ich denke das ist auch OK so ... ?!?
Ich zeige in Grafana einfach den "last" Wert an, so passen meine täglichen Auswertungen (am nächsten Tag) dann wieder.
-
@einstein67 der Blockly-Zeitplan zum Schreiben des Datenpunktes wurde ignoriert bei Blockly speichern, Neustart oder IOBroker Absturz. Diese drei Möglichkeiten erzeugten bei mir immer einen frischen Datenpunkt mit dem alten Wert und neuem Zeitstempel, egal zu welcher Uhrzeit. Vielleicht liegt es bei mir aber auch an der zusätzlichen Zeile zur täglichen Zeitfenster-Einschränkung auf 4 min . Die war vor 4.0.20 ebenfalls wirkungslos:
-
@dock07 Hast du das Problem beheben können? Ich hab bei mir das selbe Problem.