Arbeiten mit InfluxDB

Hallo Community,

ich arbeite derzeit an der Entwicklung einer EMS-Konfiguration für stationäre Energiespeicher. Zu Testzwecken nehmen wir viele verschiedene Werte mit InfluxDB auf und visualisieren diese per Grafana.

Derzeit wird nur jede Sekunde ein Wert in die InfluxDB-Datenbank geschrieben und auch Grafana zeigt nur jede Sekunde einen Wert an. Ich würde mir aber gerne die mehr Werte anzeigen lassen, sprich alle 100ms.

Kann ich die Zeitspanne in der das Protokoll von InfluxDB aufgerufen wird, von 1s auf 100ms verändern und wenn ja wie?

Mit freundlichen Grüßen
Con Seifert

Hallo Con,

auf welcher Hardware hast du die InfluxDB laufen ?
Ich kann mir nicht vorstellen, wie die Werte in 100 Millisekunden in die InfluxDB geschrieben werden sollen, da musst du ja einen ultraschnellen Rechner haben ?

Kannst du mal auch ein kurzes Video mit ScantoGif hochladen, dies würde mich auch interessieren ?

Ich hätte dies bereits auf Sekundenbasis versucht, aber da kommt mein Skript und mein iobroker nicht nach.

Ich habe seit Anfang Juni einen Infrarot-Lesekopf auf meinen EVU-Smartmeter Siemens TD-3511 im Einsatz, welcher jede Sekunde die Werte Leistung Bezug und Einspeisung ermittelt.
1.7.0 Bezug, 2.7.0 Einspeisung, Saldo 1.7.0-2.7.0=Momentan Leistung-Bezug-/Einspeisung.
Anschließend wird dieser Leistungswert dem kumulierten Saldo Bezug- und Einspeisung in kWh hinzugerechnet.
Mit MQTT übertrage ich diese Werte alle 2 Sekunden im Heimnetzwerk per Wlan in meinen iobroker, bereite diese Werte mit einem Blockly alle 2 Sekunden auf und schreibe diese in meine InfluxDB. Aufbereitung erfolgt in Grafana, Visualisierung alle 5 Sekunden.

Anbei ein soeben erstelltes kurzes Video mit ScantoGif, links vom Smartmeter, rechts vom iobroker mit den Objekten.
Die Einspeisung im Video ist deshalb so gering, da gerade der 5 kW Heizstab mit Smartfox, mit PV-Überschuss-Stromverwertung mit Leistungssteller läuft, welcher versucht auf -20 W hinzuregeln.

Habe hier ebenso über ein Blockly eine Synthetische Batteriespeichersimulation mit einem Batteriespeicher 5 kWh u. 2,5 kW Lade- und Entladeleistung am Laufen, Lade- und Entladewirkungsgrad u. Max- und Min-SOC zum Einstellen.

Anbei auch noch ein Video vom Vorgang kochen.
Hier sieht man sehr schön, wie schnell Lastwechsel bei einem normalen Cerankochfeld stattfinden.
Kann mir nicht vorstellen, dass du das auch noch in 100 ms protokollieren kannst. -:slight_smile:

Aber ich lasse mich überraschen.

7. AMIS-ZÄHLER-SIEMENS-TD3511-ScantoGif-8.10.21-14h43
6. AMIS-ZÄHLER-SIEMENS-TD3511-ScantoGif-2.10.21-9h

Sonnige Grüße

Hallo Götschhofer,

vielen Dank für die Menge an Informationen. Unsere InfluxDB läuft im Hintergrund auf einem Linux-Rechner mit dem Derivat “Debian”. Leider kann ich kein Video hochladen, da dies gegen meine Geheimhaltungsvereinbarung verstößt.

Ich hatte in einem anderen Beitrag aus der Community gelesen das es irgendwie möglich wäre, Werte öfter als jede Sekunde in die InfluxDB zu schreiben.

Hier der Name des Beitrages:

Mit freundlichen Grüßen
Con Seifert

Hallo Con,

der verlinkte Thread sollte eigentlich die Frage schon klären.

Die Methode handleEvent() ruft in jedem Cycle die Methode collectAndWriteChannelValues() auf. In dieser Methode werden dann alle Daten gesammelt und über die (asynchrone) Methode this.influxConnector.write() in die Datenbank geschrieben.

Für eine höhere Schreibrate sollte deshalb

  1. die Cycle-Time über die Komponente Core.Cycle heruntergesetzt werden
  2. die Zeit wird aktuell standardmäßig auf 1 Sekunde gerundet (siehe openems/InfluxTimedataImpl.java at develop · OpenEMS/openems · GitHub). Das sollte in deinem Fall geändert oder entfernt werden, damit sich die Werte nicht gegenseitig überschreiben.

Übrigens sollte die InfluxDB keinerlei Probleme mit so einer Schreibgeschwindigkeit haben. Es ist wohl eher so, dass z. B. die angeschlossenen Zähler nicht so schnell lesen können, oder Modbus-Verbindungen zu langsam sind.

Gruß,
Stefan

Hallo Herr Feilmeier,

ich habe den Quellcode der Komponente “influx.Timedata”, wie in dem obigen Link beschrieben, angepasst und auch die Zykluszeit in der Komponente “CoreCycle” von 1000ms auf 100ms geändert.
Trotz dieser Änderungen wird immer noch jede Sekunde ein Wert in die Influx geschrieben und nicht öfter.

Hier mein Quellcode:
protected synchronized void collectAndWriteChannelValues() {
//long timestamp = System.currentTimeMillis() / 1000;

	if (++this.cycleCount >= this.config.noOfCycles()) {
		this.cycleCount = 0;
		final Builder point = Point.measurement(InfluxConnector.MEASUREMENT).time(System.currentTimeMillis(), TimeUnit.MILLISECONDS); //.time(timestamp, TimeUnit.SECONDS);
		final AtomicBoolean addedAtLeastOneChannelValue = new AtomicBoolean(false);

		this.componentManager.getEnabledComponents().stream().filter(c -> c.isEnabled()).forEach(component -> {
			component.channels().forEach(channel -> {
				switch (channel.channelDoc().getAccessMode()) {
				case WRITE_ONLY:
					// ignore Write-Only-Channels
					return;
				case READ_ONLY:
				case READ_WRITE:
					break;
				}

Übersehe ich an dieser Stelle irgendetwas?
Ich habe alle Verbindungen geprüft und kann sagen, dass alle schnell genug für diesen Vorgang wären.

Mit freundlichen Grüßen
Con Seifert

Hallo con.Seifert,

ich habe mein Energiemanagementsystem auf einem INTELNUC mit Debian10 laufen.
Iobroker läuft auf einer VM, influxdb und grafana auf einem LXC.

Mich würde interessieren, für was man Stromwerte in 100ms verwendet, was machst du damit ?

Eine Vielzahl an Batteriespeichersystemen kann ja solche Werte in 100ms gar nicht verarbeiten und vor allem nachfahren, wenn man sich die Speicherinspektion 2021 der HTW-Berlin anschaut.

LG

Karl

Hallo Karl,

Ich benötige eine solche Abtastrate für die Untersuchung unseres Gesamtsystems, welches im Rahmen meiner Diplomarbeit entwickelt wird.
Dabei Untersuchen wir die Reaktionsgeschwindigkeit des Systems, wenn wir es mit Leistungssprüngen beaufschlagen. Um aussagekräftige Aussagen treffen zu können reicht es nicht aus einen Wert jede Sekunde zu messen.

VLG,
Con

1 Like

Hallo con.seifert,

vielen dank für die Info, dann ist mir der Hintergrund klar.

Wird hier ein Gesamtsystem PV u. Batteriespeicher untersucht ?

LG

Karl

Hallo Con,

ich habe mir dazu ein Testsystem gebaut. Mit diesem Pull-Request sollten die Werte jetzt mit höherer Genauigkeit in die InfluxDB geschrieben werden:

Der Timestamp wird auf die global konfigurierte Cycle-Time (in der Komponente Core.Cycle) gerundet. Um also Werte z. B. alle 200 ms zu schreiben, muss dort eine Cycle-Time von 200 konfiguriert werden.

Löst der Pull-Request dein Problem?

Gruß,
Stefan

PS: Wir suchen noch nach Referenten mit einem Kurzvortrag zu praktischen Anwendungsfällen von OpenEMS für die OpenEMS Konferenz 2021. Interesse? OpenEMS Mitgliederversammlung & Konferenz 2021 – OpenEMS

Hallo Götschhofer,

aktuell ist an das System keine PV-Anlage angeschlossen. Dies wäre aber ohne Probleme möglich.

Mit freundlichen Grüßen

Con Seifert

Hallo Herr Feilmeier,

ich bin der Meinung, dass dieser Pull-Request unser Problem lösen kann. Leider kam ich noch nicht dazu diesen zu testen, werde es aber im laufe der Woche noch tun.
Vielen Dank für die Hilfe! :slight_smile:

Prinzipiell bin ich immer offen für solche Aufgaben und Veranstaltungen. Zur Zeit kann ich aber keine genauen Aussagen treffen, da mein Terminkalender sehr voll ist.
Wann wäre denn diese Konferenz?

Mit freundlichen Grüßen

Con Seifert

Hallo Con,

ok, dann lasse ich den Pull-Request erstmal so stehen, bis du es testen könntest. Danke!

Die Konferenz ist am 16. November. Der Eintrag dazu auf der Internetseite regelmäßig aktualisiert: OpenEMS Mitgliederversammlung & Konferenz 2021 – OpenEMS. Über eine kleine Präsentation würden wir uns sehr freuen.

Gruß,
Stefan

Hallo Stefan,

Ich konnte vergangene Woche den Pull-Request erfolgreichTesten. Vielen Dank dafür! :slight_smile:

In der KW45 und KW46 sieht es leider gerade sehr eng aus bei mir. Grund ist, dass unsere Zielhardware in diesem Zeitraum geliefert wird und ich für meine DA noch die EMS-Konfiguration auf dieser implementieren muss. Ich kann momentan schlecht einschätzen wie viel Aufwand die Implementierung hervorruft. Für den Fall das ich doch noch einen Zeitslot frei schaufeln kann, würde ich mich nochmal bei dir melden.

Mit freundlichen Grüßen

Con Seifert