# Tageswerte abfragen

**URL:** <https://community.openems.io/t/tageswerte-abfragen/403>\
**Category:** Deutsches Forum\
**Created:** [January 8, 2021, 8:53pm UTC](https://community.openems.io/t/tageswerte-abfragen/403 "2021-01-08T20:53:46Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![martingr](https://community.openems.io/user_avatar/community.openems.io/martingr/32/151_2.png) [@martingr](https://community.openems.io/u/martingr)\
**Post date:** [January 8, 2021, 8:53pm UTC](https://community.openems.io/t/tageswerte-abfragen/403/1 "2021-01-08T20:53:46Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![stefan.feilmeier](https://community.openems.io/user_avatar/community.openems.io/stefan.feilmeier/32/2585_2.png) [@stefan.feilmeier](https://community.openems.io/u/stefan.feilmeier)\
**Post date:** [January 9, 2021, 6:50pm UTC](https://community.openems.io/t/tageswerte-abfragen/403/2 "2021-01-09T18:50:39Z")

</div>

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

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

> <https://github.com/OpenEMS/openems/blob/7829a7f6b88737680d8a6d5fa1b633c4744c72c7/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyRequest.ts#L10-L20>

Beispielanwendung: History-Widgets im UI:  
 ![grafik](https://community.openems.io/uploads/default/original/1X/88360fbc709cec20802b43603a4472fed2de225c.png)

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

> <https://github.com/OpenEMS/openems/blob/7829a7f6b88737680d8a6d5fa1b633c4744c72c7/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyPerPeriodRequest.ts#L10-L20>

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

 ![grafik](https://community.openems.io/uploads/default/original/1X/eea85b0f945b171440eea28269713bb903d8e002.png)

Gruß,  
Stefan

---

<div class="post-metadata">

**Author:** ![martingr](https://community.openems.io/user_avatar/community.openems.io/martingr/32/151_2.png) [@martingr](https://community.openems.io/u/martingr)\
**Post date:** [January 9, 2021, 8:10pm UTC](https://community.openems.io/t/tageswerte-abfragen/403/3 "2021-01-09T20:10:06Z")

</div>

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)?

---

<div class="post-metadata">

**Author:** ![stefan.feilmeier](https://community.openems.io/user_avatar/community.openems.io/stefan.feilmeier/32/2585_2.png) [@stefan.feilmeier](https://community.openems.io/u/stefan.feilmeier)\
**Post date:** [January 12, 2021, 8:15am UTC](https://community.openems.io/t/tageswerte-abfragen/403/4 "2021-01-12T08:15:38Z")

</div>

Genau, es ist ein “[Timedata](https://github.com/OpenEMS/openems/tree/develop/io.openems.edge.timedata.api)”-Provider notwendig - also entweder [InfluxDB](https://github.com/OpenEMS/openems/tree/develop/io.openems.edge.timedata.influxdb) oder [RRD4j](https://github.com/OpenEMS/openems/tree/develop/io.openems.edge.timedata.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.

---

<div class="post-metadata">

**Author:** ![martingr](https://community.openems.io/user_avatar/community.openems.io/martingr/32/151_2.png) [@martingr](https://community.openems.io/u/martingr)\
**Post date:** [January 12, 2021, 9:58am UTC](https://community.openems.io/t/tageswerte-abfragen/403/5 "2021-01-12T09:58:14Z")

</div>

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](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.

---

<div class="post-metadata">

**Author:** ![stefan.feilmeier](https://community.openems.io/user_avatar/community.openems.io/stefan.feilmeier/32/2585_2.png) [@stefan.feilmeier](https://community.openems.io/u/stefan.feilmeier)\
**Post date:** [January 12, 2021, 12:33pm UTC](https://community.openems.io/t/tageswerte-abfragen/403/6 "2021-01-12T12:33:14Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![simonfey](https://community.openems.io/user_avatar/community.openems.io/simonfey/32/304_2.png) [@simonfey](https://community.openems.io/u/simonfey)\
**Post date:** [July 30, 2021, 9:25am UTC](https://community.openems.io/t/tageswerte-abfragen/403/7 "2021-07-30T09:25:42Z")

</div>

Hi Martin, hast du dich an den Influx2.0 Connector bereits herangewagt? Ich hätte hieran ebenfalls Interesse. Viele Grüße aus Freiburg!

---

<div class="post-metadata">

**Author:** ![martingr](https://community.openems.io/user_avatar/community.openems.io/martingr/32/151_2.png) [@martingr](https://community.openems.io/u/martingr)\
**Post date:** [July 30, 2021, 9:39am UTC](https://community.openems.io/t/tageswerte-abfragen/403/8 "2021-07-30T09:39:42Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![stefan.feilmeier](https://community.openems.io/user_avatar/community.openems.io/stefan.feilmeier/32/2585_2.png) [@stefan.feilmeier](https://community.openems.io/u/stefan.feilmeier)\
**Post date:** [August 3, 2021, 9:56am UTC](https://community.openems.io/t/tageswerte-abfragen/403/9 "2021-08-03T09:56:58Z")

</div>

Hallo Simon,

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?

> <https://github.com/OpenEMS/openems/pull/1581>
>
> This Pull-Request replaces the influxdb-java library for InfluxDB 1.7 with the n…ew library for InfluxDB 1.8+ and 2.x.
> 
> This will drop OpenEMS support for InfluxDB 1.7

Gruß,  
Stefan

---

<div class="post-metadata">

**Author:** ![martingr](https://community.openems.io/user_avatar/community.openems.io/martingr/32/151_2.png) [@martingr](https://community.openems.io/u/martingr)\
**Post date:** [August 3, 2021, 10:15am UTC](https://community.openems.io/t/tageswerte-abfragen/403/10 "2021-08-03T10:15:04Z")

</div>

Ich bin auch recht fit in Flux und helfe gerne mit. Flux ist aus meiner Sicht für Timedata ein großer Sprung nach vorne vs. SQL.

---

<div class="post-metadata">

**Author:** ![simonfey](https://community.openems.io/user_avatar/community.openems.io/simonfey/32/304_2.png) [@simonfey](https://community.openems.io/u/simonfey)\
**Post date:** [August 7, 2021, 12:23pm UTC](https://community.openems.io/t/tageswerte-abfragen/403/11 "2021-08-07T12:23:31Z")

</div>

Hallo Stefan, hallo Martin,

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 😉

Grüße!

---

<div class="post-metadata">

**Author:** ![fbuehler](https://community.openems.io/letter_avatar_proxy/v4/letter/f/9fc29f/32.png) [@fbuehler](https://community.openems.io/u/fbuehler)\
**Post date:** [March 29, 2024, 11:12am UTC](https://community.openems.io/t/tageswerte-abfragen/403/12 "2024-03-29T11:12:19Z")

</div>

Hallo zusammen,

ich hoffe, es ist ok, wenn ich diesen alten Thread hervorhole. Es ist genau meine Frage und ich habe nichts Neueres dazu gefunden.

Ich möchte gerne

- über die REST API
- aus einem FEMS-System
- Summenwerte für einen bestimmten Zeitraum (z.B. erzeugte Energiemenge)
- mit Python

abfragen. Also im Grunde genau das, was `queryHistoricTimeseriesEnergy` leistet.

Meine Fragen:

- Geht das auch mit FEMS oder nur mit OpenEMS?
- Falls ja: Wie genau muss der REST-API-Call aussehen? Ein konkretes Beispiel wäre eine große Hilfe für mich.

Danke für jede Antwort.

Viele Grüße

Fabian Bühler

---

<div class="post-metadata">

**Author:** ![Sn0w3y](https://community.openems.io/user_avatar/community.openems.io/sn0w3y/32/636_2.png) [@Sn0w3y](https://community.openems.io/u/Sn0w3y)\
**Post date:** [March 29, 2024, 1:28pm UTC](https://community.openems.io/t/tageswerte-abfragen/403/13 "2024-03-29T13:28:26Z")

</div>

Hallo,

sieh dir doch gerne mal die Doku von Fenecon dazu an.

[https://docs.fenecon.de/\_/en/fems/fems-app/OEM\_App\_REST\_JSON.html](https://docs.fenecon.de/_/en/fems/fems-app/OEM_App_REST_JSON.html)

Grüße!

---

<div class="post-metadata">

**Author:** ![fbuehler](https://community.openems.io/letter_avatar_proxy/v4/letter/f/9fc29f/32.png) [@fbuehler](https://community.openems.io/u/fbuehler)\
**Post date:** [March 29, 2024, 7:37pm UTC](https://community.openems.io/t/tageswerte-abfragen/403/14 "2024-03-29T19:37:02Z")

</div>

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.

Mein Ansatz:

```auto
REST_USER = "x"
REST_PASSWORD = "user"
url='http://192.168.178.83:80/jsonrpc'
headers = {'jsonrpc': "2.0",
    'Content-Type': 'application/json',
        }
body = {"method": "queryHistoricTimeseriesEnergy",
        "params": {"timezone": "Europe/Berlin",
                   "fromDate": "2024-03-27T00:00:00",
                   "toDate": "2024-03-27T23:59:59",
                   "channels": "_sum/ProductionActiveEnergy"}
        }
session = requests.Session()
session.auth = (REST_USER, REST_PASSWORD)
response = session.post(url, json=body)

response.raise_for_status()
session.close()
response.text

```

Die response enthält lediglich eine leere html-Seite, kein json-Format, wie erwartet.

---

<div class="post-metadata">

**Author:** ![Sn0w3y](https://community.openems.io/user_avatar/community.openems.io/sn0w3y/32/636_2.png) [@Sn0w3y](https://community.openems.io/u/Sn0w3y)\
**Post date:** [March 30, 2024, 8:28am UTC](https://community.openems.io/t/tageswerte-abfragen/403/15 "2024-03-30T08:28:12Z")

</div>

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:

> **[openems/io.openems.edge.controller.api.rest at...](https://github.com/OpenEMS/openems/tree/b3f2eeefd154d2da763cdb947b6e6a21c0324fc1/io.openems.edge.controller.api.rest#endpoint-jsonrpc)**
>
> OpenEMS - Open Source Energy Management System. Contribute to OpenEMS/openems development by creating an account on GitHub.

Was mir komisch erscheint, ist, dass auch diese Methode " getEdgeConfig" nicht funktioniert…

@stefan.feilmeier machen wir da was falsch?

```auto
import requests
import json
from requests.auth import HTTPBasicAuth

# Basic configuration
url = 'http://192.168.178.100:80/jsonrpc'
headers = {
    'Content-Type': 'application/json',
}

username = 'x'
password = 'owner'

body = {
    "method": "getEdgeConfig",
    "params": {},
}

response = requests.post(url, data=json.dumps(body), headers=headers, auth=HTTPBasicAuth(username, password))

try:
    response.raise_for_status()

    json_response = response.json()
    print(json.dumps(json_response, indent=4))
except requests.exceptions.HTTPError as err:
    print(f"HTTP Error: {err}")
except ValueError:
    print("Response:", response.text)

```

---

<div class="post-metadata">

**Author:** ![fbuehler](https://community.openems.io/letter_avatar_proxy/v4/letter/f/9fc29f/32.png) [@fbuehler](https://community.openems.io/u/fbuehler)\
**Post date:** [April 2, 2024, 6:20am UTC](https://community.openems.io/t/tageswerte-abfragen/403/16 "2024-04-02T06:20:40Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![Sn0w3y](https://community.openems.io/user_avatar/community.openems.io/sn0w3y/32/636_2.png) [@Sn0w3y](https://community.openems.io/u/Sn0w3y)\
**Post date:** [April 2, 2024, 6:32am UTC](https://community.openems.io/t/tageswerte-abfragen/403/17 "2024-04-02T06:32:04Z")

</div>

Das wäre eine Frage an @stefan.feilmeier

Wobei ich das fast nicht glaube, nein
