Keine historischen Daten über Influx

Hi,

Ich schreibe Daten vom EMS nach InfluxDB - was auch funktioniert. Nur bei der Anzeige der Historie erscheint im Log immer eine Fehlermeldung

[ctrlApiWebsocket0] JSON-RPC Error Response "JSON [timezone:-3600] is not a String" for Request....

Ich bin nicht sicher an welcher Stelle ich suchen muss.

Gruß
Klinki

Hallo,

ich denke das ist ein Versionsproblem. Das UI ist möglicherweise nicht geupdated worden, denn mit dem neuesten develop-stand werden für die Abweichung von der UTC- Zeitzone (timezoneoffset) keine Sekunden vom UI mehr mitgeschickt.

Gruß
Lukas

1 Like

Hallo Lukas,

Danke für den Tipp!

UI gestern aktualisiert. Der Fehler besteht aber noch.
Ich habe OpenEMS mal in eine andere InfluxDB schreiben lassen. Dann funktioniert es. Es liegt also an meiner Influx-Installation. Allerdings ist mir nich klar was man falsch machen kann wenn openEMS doch in die Datenbank schreiben kann. Version lokal ist 1.8.10; im funkionierenden System 1.8.3.
Ich könnte natürlich downgraden - wüsste aber dennoch gerne wo das Problem liegt.
Die Thematik ist mir aktuell nicht sonderlich wichtig. Die Auswertung mache ich mit Grafana.

Gruß,
Klinki

Hallo Klinki,

genau wie Lukas beschrieben hat, wurde die Angabe der Zeitzone und die Auflösung (Resolution) über die jeweils aggregiert wird, als Integer vom UI an Edge/Backend übertragen. Mit dem aktuellen develop-Stand wurde das geändert. Wenn aber die Versionen von UI und Edge/Backend nicht zusammenpassen, kommt es zu dem von dir geschilderten Fehler. Das kann oft schon daran liegen, dass das UI noch im Browser-Cache war - dann hilft ein String+F5 um den Cache der Seite zu aktualisieren.

Zwischenzeitlich haben wir aber eine Fallback-Lösung eingebaut, die die alte und die neue Variante erlauben: Add fallback for Resolution and Timezone for older UI versions

Gruß,
Stefan

Hi Stefan,

Nach dem letzten Update ist dieser Fehler weg. Ich bekomme leider immer noch keine hist. Daten. Es werden die Fehlermeldung:

30.3.2022, 14:16:42
WARN
io.openems.common.websocket.OnRequestHandler
[ctrlApiWebsocket0] JSON-RPC Error Response "panic: runtime error: invalid memory address or nil pointer dereference" for Request {"method":"edgeRpc","params":{"edgeId":"0","payload":{"method":"queryHistoricTimeseriesData","params":{"timezone":"Europe/Berlin","fromDate":"2022-03-30","toDate":"2022-03-30","channels":["_sum/EssSoc","_sum/EssActivePower","_sum/GridActivePower","_sum/ProductionActivePower","_sum/ProductionDcActualPower","_sum/ConsumptionActivePower"],"resolution":{"value":5,"unit":"Minutes"}}}}}
30.3.2022, 14:16:42
ERROR
io.openems.shared.influxdb.InfluxConnector
InfluxDB query runtime error. Query: from(bucket:"ems") |> range(start:2022-03-29T21:55:00.000000000Z, stop:2022-03-30T22:00:00.000000000Z) |> filter(fn: (r) => r["_measurement"] == "data") |> filter(fn: (r) => (r["_field"] == "_sum/ConsumptionActivePower" or r["_field"] == "_sum/EssActivePower" or r["_field"] == "_sum/EssSoc" or r["_field"] == "_sum/GridActivePower" or r["_field"] == "_sum/ProductionActivePower" or r["_field"] == "_sum/ProductionDcActualPower")) |> aggregateWindow(every:5m, fn:mean), Error: panic: runtime error: invalid memory address or nil pointer dereference

geloggt.

Sieht nicht so aus, als wenn dies mit dem anderen Problem zu hatte - macht die Sache aber nich besser.
Der Query sieht ja eigentlich nicht verkehrt aus.

Ich weiß nicht, wo ich noch suchen soll…

Gruß
Klinki

Hallo Klinki,

der Fehler kommt anscheinend direkt von InfluxDB:

Beachte bitte, dass sich in den letzten Tagen die Konfiguration für die InfluxDB-Komponente geändert hat, um auch mit Influx Cloud und InfluxDB 2.0 kompatibel zu sein. Vielleicht ist das das Problem?

Für das nächste Release werde ich dazu eine “Breaking-Change”-Notiz schreiben.

Gruß,
Stefan

Moin Stefan,

Die Änderungen in der Config hab ich gesehen und beachtet. Auch das Device neu angelegt. Aber das Problem bleibt weiterhin bestehen.
Ich gehe auch eher davon aus, dass es an meiner InfluxDB liegt. Mit einer anderen DB-Instanz funktioniert es ja auch.
Es wundert mich, dass ich zwar schreiben kann, aber die Queries besagten Fehler produzieren.
Für Die Auswertung nutzte ich Grafana, es wäre aber praktisch die hist. Daten über OpenEMS auf einen Klick zu sehen.
Leider kann ich auch nicht auf Influx 2 updaten. Mein Raspi hat ein 32Bit-System.

Werde mal weiterforschen…

Gruß
klinki

Moin nochmal,

Ich habe es geschafft InfluxDB v2 zu installieren. Ging nur per Hand, da noch nicht in den offiziellen Repos von Raspbian Bullseye.
Die Änderung auf ein 64Bit-System war tatsächlich ziemlich einfach. https://www.bastianoso.de/tipps-tricks/raspberry-pi/raspberry-pi-os-auf-64-bit-umstellen.html
Aber jetzt läuft es!

Danke für die Tipps.

Gruß
klinki

1 Like

Ich bin zusätzlich über ein weiteren Punkt gestolpert. Siehe PR.

Ich habe bei mir auf dem Raspberry auch die InfluxDB 1.x installiert und openEMS schreibt da rein. Die daten kann ich auch mit Grafana visualisieren Im OpenEMS UI werden allerdings keine historischen Daten angezeigt. Im Log taucht kein Fehler auf nur die Diagramme sind leer! :face_exhaling:

Hi, ich bin auf ein ähnliches Probelem mit dem Raspberry Pi gestoßen. Da gibt es für Buster aktuell nur Influxdb 1.8.6 und 1.8.10 für die 32-Bit-Variante. Manuell hab ich es auch mit der 1.8.3 versucht. Influxdb2 gibt es nur mit 64-Bit OS. Wenn ich eine der drei 1.8er Versionnen verwende, kann ich zwar historische Daten schreiben (Sehe sie in Chronograf), aber nicht lesen. Dabei wird folgender Fehler gelogged:

Aug 07 11:36:00 ems java[4316]: 2022-08-07T11:36:00,496 [et Api-5] ERROR [hared.influxdb.InfluxConnector] InfluxDB query runtime error. Query: from(bucket:"openems")
Aug 07 11:36:00 ems java[4316]:         |> range(start:2022-08-06T21:55:00.000000000Z, stop:2022-08-07T22:00:00.000000000Z)
Aug 07 11:36:00 ems java[4316]:         |> filter(fn: (r) => r["_measurement"] == "data")
Aug 07 11:36:00 ems java[4316]:         |> filter(fn: (r) => (r["_field"] == "compact0/Out1"))
Aug 07 11:36:00 ems java[4316]:         |> aggregateWindow(every:5m, fn:mean), Error: null
Aug 07 11:36:00 ems java[4316]: 2022-08-07T11:36:00,500 [et Api-5] WARN  [mon.websocket.OnRequestHandler] [ctrlApiWebsocket0] JSON-RPC Error Response "null" for Request {"method":"edgeRpc","params":{"edgeId":"0","payload":{"method":"queryHistoricTimeseriesData","params":{"timezone":"Europe/Berlin","fromDate":"2022-08-07","toDate":"2022-08-07","channels":["compact0/Out1"],"resolution":{"value":5,"unit":"Minutes"}}}}}
Aug 07 11:36:00 ems java[4316]: 2022-08-07T11:36:00,619 [et Api-1] ERROR [hared.influxdb.InfluxConnector] InfluxDB query runtime error. Query: data = from(bucket: "openems")|> range(start: 2022-08-06T22:00:00Z, stop: 2022-08-07T22:00:00Z)|> filter(fn: (r) => r._measurement == "data")|> filter(fn : (r) => (r["_field"] == "_sum/ConsumptionActiveEnergy" or r["_field"] == "_sum/EssActiveDischargeEnergy" or r["_field"] == "_sum/GridBuyActiveEnergy" or r["_field"] == "_sum/GridSellActiveEnergy" or r["_field"] == "_sum/ProductionActiveEnergy"))first = data |> first()last = data |> last()union(tables: [first, last])|> difference(), Error: null
Aug 07 11:36:00 ems java[4316]: 2022-08-07T11:36:00,624 [et Api-1] WARN  [mon.websocket.OnRequestHandler] [ctrlApiWebsocket0] JSON-RPC Error Response "null" for Request {"method":"edgeRpc","params":{"edgeId":"0","payload":{"method":"queryHistoricTimeseriesEnergy","params":{"timezone":"Europe/Berlin","fromDate":"2022-08-07","toDate":"2022-08-07","channels":["_sum/GridBuyActiveEnergy","_sum/GridSellActiveEnergy","_sum/ProductionActiveEnergy","_sum/ConsumptionActiveEnergy","_sum/GridBuyActiveEnergy","_sum/GridSellActiveEnergy","_sum/EssActiveDischargeEnergy"]}}}}
Aug 07 11:36:00 ems java[4316]: 2022-08-07T11:36:00,667 [et Api-8] ERROR [hared.influxdb.InfluxConnector] InfluxDB query runtime error. Query: from(bucket:"openems")
Aug 07 11:36:00 ems java[4316]:         |> range(start:2022-08-06T21:55:00.000000000Z, stop:2022-08-07T22:00:00.000000000Z)
Aug 07 11:36:00 ems java[4316]:         |> filter(fn: (r) => r["_measurement"] == "data")
Aug 07 11:36:00 ems java[4316]:         |> filter(fn: (r) => (r["_field"] == "_sum/ConsumptionActivePower" or r["_field"] == "_sum/GridActivePower" or r["_field"] == "_sum/ProductionActivePower" or r["_field"] == "_sum/ProductionDcActualPower"))
Aug 07 11:36:00 ems java[4316]:         |> aggregateWindow(every:5m, fn:mean), Error: null
Aug 07 11:36:00 ems java[4316]: 2022-08-07T11:36:00,671 [et Api-8] WARN  [mon.websocket.OnRequestHandler] [ctrlApiWebsocket0] JSON-RPC Error Response "null" for Request {"method":"edgeRpc","params":{"edgeId":"0","payload":{"method":"queryHistoricTimeseriesData","params":{"timezone":"Europe/Berlin","fromDate":"2022-08-07","toDate":"2022-08-07","channels":["_sum/GridActivePower","_sum/ProductionActivePower","_sum/ProductionDcActualPower","_sum/ConsumptionActivePower"],"resolution":{"value":5,"unit":"Minutes"}}}}}

Ich kann leider nicht upgraden, weil ich beim 32-Bit System bleiben muss (Revpi). Gebaut hab ich sowohl die UI als auch Edge vom aktuellen develop Branch. Ich vermute es passt was mit der query nicht. Hat jemand einen Tipp wie ich es zum Laufen bringen kann, oder soll ich einen Issue auf Github erstellen? Bzw. gibt es vielleicht schon einen issue, den ich watchen kann?

Ich will nicht vorgreifen, aber ich vermute die Abwärtskompatiblität zu InfluxDB 1 wird sterben. Hast Du ggf. die Möglichkeit die DB auf einem anderen Host zu betreiben?

Das hab ich fast befürchtet. Wäre einfacher man könnte es auf dem Gerät laufen lassen. Aber notfalls noch ein anderes Gerät, dass dann Influxdb 2 kann.