EcoTrackerEmulator für die Nulleinspeisung im lokalen Netzwerk

Begonnen von Damian, 10 Oktober 2026, 13:16:16

Vorheriges Thema - Nächstes Thema

Damian

Ich habe einen EcoTrackerEmulator als FHEM-Modul erstellt. Mit Hilfe des Moduls wird ein EcoTracker IR emuliert. Dieser kann mit intelligenten Speichern (bei mir Ecoflow Stream AC pro) verknüpft werden, um die Nulleinspeisung lokal ohne Cloud-Umwege zu realisieren, sofern bereits Messdaten des Hauszählers in FHEM vorhanden sind.

Der everHome EcoTracker IR wird inzwischen von mehreren intelligenten Heimspeichern unterstützt. Er liest die aktuellen Leistungsdaten am digitalen Stromzähler aus und kann diese Daten kompatiblen Speichersystemen für ein verbrauchsabhängiges Laden und Entladen zur Verfügung stellen.

Funktionsbeschreibung des FHEM-Moduls EcoTrackerEmulator

Der EcoTrackerEmulator simuliert einen everHome EcoTracker innerhalb von FHEM. Er stellt Messwerte eines vorhandenen Stromzählers über eine lokale HTTP-Schnittstelle bereit und kündigt diesen Dienst über mDNS im lokalen Netzwerk an.

Die Idee dahinter: Ein intelligenter Speicher, der den EcoTracker unterstützt, soll den Emulator möglichst wie einen echten EcoTracker erkennen und dessen Messwerte für die Nulleinspeisung im lokalen Netzwerk nutzen.

1. Aufbau und Datenfluss

EcoTrackerEmulator: liest aktuelle Messdaten des Hauszählers als FHEM-Device aus und erzeugt  JSON-Daten für HTTP Abfragen eines intelligenten Speichers

Heimspeicher: sucht per mDNS  den Emulator  und ruft per HTTP-Abfrage Messwerte ab, um die Nulleinspeisung zu realisieren

Wichtig ist die Unterscheidung: mDNS dient der Erkennung, HTTP der Übertragung der Messwerte. Die beiden Aufgaben werden unabhängig voneinander vom Emulator erledigt.

2. Die einzelnen Funktionen

A. Einbindung der Messwerte aus FHEM

Das Modul wird mit einem vorhandenen FHEM-Device verknüpft, welches die aktuellen Messwerte des Stromzählers beinhaltet (diese sollten möglichst häufig aktualisiert werden), beispielsweise:

define EcoTrackerEmulator EcoTrackerEmulator Mein-Zähler-Device
Es liest aus diesem Device die konfigurierten Readings aus:
Reading    Bedeutung
SENSOR_MT681_Power_cur    Aktuelle Leistung in Watt
SENSOR_MT681_Total_in    Bezogene Energie in kWh
SENSOR_MT681_Total_out    Eingespeiste Energie in kWh

Die Reading-Namen können über Attribute angepasst werden. Der Emulator benötigt dafür keine eigene MQTT-Verbindung: Er greift direkt auf die in FHEM vorhandenen Reading-Werte zu.

B. Berechnung und Umrechnung

Der Emulator bereitet die Werte für die API auf:
- Leistung: Der aktuelle Watt-Wert wird übernommen.
- Durchschnittsleistung (powerAvg): Aus gespeicherten Leistungsmessungen der letzten bis zu 60 Sekunden wird ein Mittelwert berechnet.
- Energiezähler: Die Energie wird von kWh in Wh umgerechnet. Beispiel: 12,5 kWh werden als 12500 Wh ausgegeben.
- Phasenwerte: Die gemessene Gesamtleistung wird auf Phase 1 gelegt. Für Phase 2 und 3 werden im aktuellen Code 0 W ausgegeben.
- Messwertalter (agePower): Der aktuelle Code setzt diesen Wert fest auf 0.

Die Phasenaufteilung ist eine Vereinfachung. Bei einem dreiphasigen Zähler wäre eine echte Aufteilung der Messwerte besser, sofern diese Daten verfügbar sind.

C. HTTP-Server

Der Emulator öffnet einen lokalen HTTP-Server auf Port 8080. Er lauscht auf allen IPv4-Netzwerkschnittstellen des FHEM-Servers.
Der vorgesehene Endpunkt lautet:

http://<server-IP>:8080/v1/json


Wenn ein Client diesen Endpunkt abfragt, liefert das Modul eine JSON-Antwort mit den aktuellen Messwerten. Der konkrete Inhalt wird bei der Anfrage erzeugt, sodass die Antwort die zu diesem Zeitpunkt in FHEM vorhandenen Werte widerspiegelt.

Ein lokaler Test ist beispielsweise mit folgendem Befehl möglich:
curl http://127.0.0.1:8080/v1/json

Das prüft, ob der HTTP-Server und die JSON-Ausgabe funktionieren.

D. Automatische IP-Ermittlung

Beim Start versucht das Modul, die lokale IPv4-Adresse des Servers automatisch zu ermitteln.

Dazu wird zunächst über eine UDP-Socket-Verbindung ermittelt, welche lokale Adresse das Betriebssystem für eine externe Route auswählen würde. Es wird dabei kein Nutzdatenpaket an den Test-Endpunkt gesendet. Falls das nicht funktioniert, versucht das Modul, IPv4-Adressen über hostname -I zu finden.

Die ermittelte Adresse wird für die mDNS-Ankündigung verwendet. Auf einem Server mit mehreren Netzwerkinterfaces kann allerdings die falsche Adresse ausgewählt werden; das sollte gegebenenfalls überprüft werden.

E. mDNS-Erkennung über avahi

Ein HTTP-Server allein reicht für eine automatische Geräteerkennung möglicherweise nicht aus. Deshalb startet das Modul zusätzlich einen Avahi-Prozess, der den Emulator im lokalen Netzwerk als Dienst bekannt macht.

Die vorgesehenen Angaben umfassen:

- Dienstname, zum Beispiel ecotracker-B43A45123456
- Diensttyp _everhome._tcp
- HTTP-Port 8080
- TXT-Angaben wie Seriennummer, Produkt-ID und IP-Adresse

Dadurch kann ein kompatibler Client den Dienst über mDNS suchen, ohne dass seine IP-Adresse manuell eingetragen werden muss.
Voraussetzung ist, dass Avahi auf dem FHEM-Server installiert ist und läuft. Außerdem müssen mDNS-Multicast und der HTTP-Zugriff im lokalen Netzwerk erlaubt sein.

3. Wie läuft eine Messwertabfrage am konkreten Beispiel ab?

1. Ein bereits vorhandener Tasmota-Zähler veröffentlicht in Echtzeit (im Sekundentakt) Messwerte über MQTT; FHEM aktualisiert die entsprechenden Readings in einem MQTT-Device
2. Der Emulator greift auf die Daten des FHEM-Zähler-Devices und hält seinen HTTP-Server bereit.
3. Der EcoFlow sucht bei der Einrichtung nach dem bekannt gemachten Dienst und nutzt anschließend per HTTP-Abfragen die Messdaten des Hauszählers.
4. Bei einer HTTP-Anfrage an /v1/json liest der Emulator die aktuellen Readings des Stromzähler-FHEM-Devices , rechnet die Werte um und erzeugt eine JSON-Antwort.
5. Der EcoFlow empfängt die aktuellen Messwerte des Zählers und nutzt sie für die Nulleinspeisung

avahi muss auf dem FHEM-Server installiert werden:

sudo apt update
sudo apt install avahi-daemon avahi-utils

Danach den Dienst aktivieren und starten:
sudo systemctl enable --now avahi-daemon
Vielleicht kanns jemand gebrauchen, der bereits seinen Stromzähler in FHEM eingebunden hat und die Nulleinspeisung mit Hilfe eines intelligenten Heimspeichers, der einen EcoTracker IR unterstützt, lokal in seinem Heimnetz realisieren möchte.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

KölnSolar

RPi5/3/2 Trixie-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-ecovacs(mqtt2)-zigbee2mqtt

phantom

Top Idee THX@Damian

kurze Frage: sind diese Werte egal oder sollte man die ändern?
- ecotracker-B43A45123456._everhome._tcp.local
- serial=123456789ABC productid=1137

Der Emulator läuft; ich habe ihn problemlos als Alternative zum vorhandenen Ecoflow-Original Meters in der App eingebunden. Als Input-Device nutze ich aber einen Hichi-IR-Lesekopf mit 1 sec. Intervall.
Dazu ein Offset zum echten Stromwert, um die Nulleinspeisung "anzuheben".

Würde es Sinn machen für die Ecoflow Geräte an verschiedenen Phasen, den Emulator auf 3 Phasen zu erweitern?


Damian

Zitat von: phantom am 11 Oktober 2026, 19:47:44Top Idee THX@Damian

kurze Frage: sind diese Werte egal oder sollte man die ändern?
- ecotracker-B43A45123456._everhome._tcp.local
- serial=123456789ABC productid=1137

Es müssen Werte sein, welche den EcoTracker als solchen bei der mDNS Abfrage identifizieren. Diese wurden mir von der KI vorgeschlagen. Du kannst die auch ändern, wenn du lustig bist - im schlimmsten Fall, wird der EcotrackerEmulator nicht erkannt. Da die Kommunikation lokal läuft, dürften die voreingestellten Kennungen ziemlich egal sein.

ZitatWürde es Sinn machen für die Ecoflow Geräte an verschiedenen Phasen, den Emulator auf 3 Phasen zu erweitern?

Man könnte den Emulator sicherlich auf drei Phasen erweitern. Da mein Stromzähler aber nur die Summe der drei Phasen liefert, war es mir nicht wichtig. Für die Nulleinspeisung dürfte es auch keine Rolle spielen, dort ist ja nur die Gesamtlast aller drei Phasen wichtig.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

phantom

Ich habe eine ecoflow STREAM Ultra und STREAM AC pro an verschiedenen Phasen hängen.
Wird dennoch nur die Gesamtleistung betrachtet ?

Ich kann nicht erkennen ob das Orginal-ecoflow-Meter auch nur die Gesamtleistung für das STREAM System betrachtet. Per MQTT über die Cloud-API liefert das die Werte für alle 3 Phasen...

Vielleicht gibts dazu Erkenntnisse.

Damian

Zitat von: phantom am 11 Oktober 2026, 20:48:35Ich habe eine ecoflow STREAM Ultra und STREAM AC pro an verschiedenen Phasen hängen.
Wird dennoch nur die Gesamtleistung betrachtet ?

Ich kann nicht erkennen ob das Orginal-ecoflow-Meter auch nur die Gesamtleistung für das STREAM System betrachtet. Per MQTT über die Cloud-API liefert das die Werte für alle 3 Phasen...

Vielleicht gibts dazu Erkenntnisse.


Es steht tatsächlich in der Ecoflow-App eine dreiphasige netzgekoppelte Ausgangsleistung zur Auswahl, allerdings ist dort der EcoTracker nicht anwählbar und somit dafür nicht geeignet. Abgesehen davon ist in Deutschland nur ein 800 VA netzgekoppeltes Gerät pro Stromzähler erlaubt - zumindest rechtlich :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF