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?
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.
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.
Nein, mir fehlte bislang schlicht die Zeit. Bislang behelfe ich mir mit einem InfluxDBv1 Listener mittel Telegraf. Telegraf schreibt dann die Daten in zwei InfluxDBv2 Instanzen (in der Cloud und on Premise). Das Konstrukt hat sich bewährt. Da nun OpenEMS auch MQTT kann, wäre das auch ein einfacher Weg,um Daten nach InfluxDB zu bekommen OpenEMS → MQTT → Telegraf → InfluxDBv2. Es führen viele Wege nach Rom, da war mir der native Connector einfach nicht wichtig genug.
ich habe einen Pull-Request dazu gestartet und auch die neue Java-Bibliothek eingebunden. Ich kenne mich allerdings mit der neuen Abfragesprache Flux nicht aus. Hättest du Interesse gemeinsam daran weiter zu arbeiten?
gerne bringe ich mich hier auch ein - ich experimentiere gerade noch mit der Inbetriebnahme einer Test-Infrastruktur. Die Anbindung an ein entsprechendes Influx2 Timedata-Backend steht auf der Liste
Das habe ich gelesen und ich kann auch wie dort beschrieben einzelne Werte aus den Channels abrufen. Was mir nicht gelingt ist, das auf einen komplexeren Fall wie die Abfrage der Summenwerte für einen Zeitraum zu übertragen. Ich bin mir auch nicht sicher, ob das in FEMS überhaupt geht.
So wie ich das aktuell verstehe gibt es auch keine Methode “queryHistoricTimeseriesEnergy” die du von außerhalb an den /jsonrpc Endpoint senden kannst, weder im openEMS, noch im FEMS.
Siehe hier:
Was mir komisch erscheint, ist, dass auch diese Methode " getEdgeConfig" nicht funktioniert…
Ok, danke. Dann habe ich das wohl missverstanden. Ich hatte den Post oben so gelesen, dass der Zugriff über die REST-API möglich sein soll.
Gibt es dann überhaupt irgendeine Möglichkeit unter Umgehung der UI an die Summenwerte zu kommen?