Tageswerte abfragen

Hallo Community,

ist es möglich, über die REST API der Edgekomponente, die Tageswerte für Energykanäle abzufragen?
Also zum Beispiel für _sum/ProductionActiveEnergy die Differenz zwischen dem Wert um Mitternacht und jetzt zu bekommen?

Viele Grüße,
Martin Grüning

Ja, es gibt dafür zwei spezifische JSON-RPC Requests:

  1. Abfrage der Differenz für einen Zeitraum: queryHistoricTimeseriesEnergy

Beispielanwendung: History-Widgets im UI:
grafik

  1. Abfrage der Differenzen für einen Zeitraum je Periode: queryHistoricTimeseriesEnergyPerPeriod

Beispielanwendung: Energiemonitor in der Historie über einen längeren Zeitraum:

Gruß,
Stefan

Super, das wird helfen. Gehe ich recht in der Annahme, dass das nur geht wenn man eine InfluxDB-Datenbank als Timeseries-Instanz konfiguriert hat? Oder persistiert die Edge Komponente standardmässig Werte intern (z.B. mit rrd4j)?

Genau, es ist ein “Timedata”-Provider notwendig - also entweder InfluxDB oder RRD4j.

Automatisch wird keiner der beiden Provider aktiviert. RRD4j ist einfacher zu starten, weil er keine externen Abhängigkeiten hat. Für InfluxDB ist eine separate Installation von InfluxDB notwendig - die aber auch nicht kompliziert ist und dann eben z. B. über Grafana erweiterte Auswertungsmöglichkeiten unabhängig von OpenEMS ermöglicht.

Okay, Grafana/InfluxDB nutze ich sowieso.

Ich nutze allerdings die Version 2.0 (OSS und Cloud) von InfluxDB, die in wesentlichen Teilen neu geschrieben und nun mit ‘Flux’ eine wesentlich leistungsfähigere Query Language hat. Ich würde daher gerne den InfluxDB Connector auf den neuen Java Client umschreiben (https://github.com/influxdata/influxdb-client-java).

Dieser unterstützt jedoch nur Verbindungen zu InfluxDB-Datenbanken der Versionen 1.8+ und 2.0+. Das sind die aktuellen Versionen aus den 1.x und 2.x Branches, ab denen die Flux QL an Bord ist. Bislang nutze ich Telegraf als konvertierenden Mittelsmann, der Write Requests im Influx v1 Format entgegen nimmt und dann in zwei InfluxDB v2 Datenbanken schreibt. Der Telegraf-Influx-Listener ist aber “write only”, dass heisst er unterstützt keine lesenden Queries. Die aber möchte ich jetzt aus der Edge Instanz nutzen.

Dieses Provisorium würde ich deshalb gerne durch den neue geschriebenen Connector ablösen. Meine Frage: soll ich den neuen Client ergänzend oder ersetzend in die Codebase einbringen? Oder die Komplexität gehen eine einzige Connectorklasse zu haben, die unter der Haube zwei unterschiedliche Client Libraries integriert (fände ich unnötig komplex und eher schwierig zu maintainen, weil komplex zu testen).

Ergänzend hätte den Vorteil, dass man nicht gezwungen wird alte InfluxDB Stände auf mindestens 1.8 upzudaten, aber den Nachteil dass es verwirren könnte zwei Clients für das gleiche zu haben. Hier bitte ich um einen Ratschlag, welchen Weg ich wählen soll.

Den Umstieg auf Version 2 habe ich mich bisher noch nicht getraut und wollte das Release erst etwas “reifen” lassen.

Aufgrund der Unterschiede wird der sinnvollste Weg wohl sein, eine komplett neue InfluxDB-Komponente zu erstellen. Grundsätzlich dürfte das unkompliziert sein; nur war es leider bei der alten Java-Bibliothek aufgrund der vielen Abhängigkeiten relativ schwer, diese “OSGi-Kompatibel” zu machen.