E3DC per RSCP, erster Erfolg, noch einiges zu testen

Begonnen von Dirk070, 06 August 2022, 17:03:43

Vorheriges Thema - Nächstes Thema

Dirk070

Hallo zusammen,

hier wurde schon häufiger über eine Nutzung des RSCP-Protokolls für die E3/DC-Hauskraftwerke diskutiert.
Mein Antrieb ist, damit möglichst alle Infos lesen zu können und perspektivisch auch Werte ändern zu können.

Nach längerem Suchen bin ich auf eine Möglichkeit gestossen und werde damit experimentieren.
Vielleicht mag ja jemand ebenfalls testen.

Versuchsaufbau auf einer Syno (FHEM läuft im Docker-Container):
http://admin:admin@IP:8080/api/poll
  • readingList setzen
complete();

  • reread ausführen
  • Readings werden erstellt

Das alles funktioniert schon. Laut dem GitHub-Projekt, welches von dem Docker-Image als Rest-API zur Verfügung gestellt wird, geht da noch deutlich mehr.
https://github.com/fsantini/python-e3dc


    poll()
    get_system_info()
    get_system_status()
    poll_switches()
    get_idle_periods()
    set_idle_periods()
    get_db_data()
    get_battery_data()
    get_batteries_data()
    get_pvi_data()
    get_pvis_data()
    get_powermeter_data()
    get_powermeters_data()
    get_power_settings()
    set_power_limits()
    set_powersave()
    set_weather_regulated_charge()


Also noch viele Möglichkeiten, die mal zu testen wären.

Update: Docker-Image-URL ergänzt
Update: aktuelle Idee dazu: https://forum.fhem.de/index.php/topic,128909.msg1236255.html#msg1236255

Viele Grüße
Dirk


Dirk070

Test direkt im Browser:

http://IP:8080/api/db_data?startDate=2022-08-01&timespan=MONTH

Ergibt den identischen Wert zur Abfrage im Portal (Leistungswerte, Monat(Tageswerte), 2022-08)
timespan kann DAY, MONTH, YEAR sein.

Happy testing.

Dirk070

Sperrzeiten (0-6, charge&discharge):

http://IP:8080/api/idle_periods

Dirk070

Falls sich jemand damit auskennt (ich leider nicht): ich vermute, dass nur die Funktionen aufgerufen werden können, die in der postman collection definiert sind.
https://github.com/vchrisb/e3dc-rest/blob/master/e3dc_rest.postman_collection.json

battery_data geht, batteries_data nicht, obwohl in der API definiert (aber eben in der postman collection nicht):
https://github.com/vchrisb/e3dc-rest/blob/master/api/api.py

pcbastler

evtl. hilft es weiter, bin als E3DC-Besitzer zufällig darüber gestolpert: https://github.com/pvtom/rscp2mqtt . Die Möglichkeiten erschließen sich mir auf Grund mangelnder Kenntnisse leider nicht. Würde aber gern als Tester zu Verfügung stehen.

Dirk070

Hallo,

ich versuche es über eine Ableitung in PERL: https://forum.fhem.de/index.php/topic,128909.msg1236255.html#msg1236255

Für jede Hilfe an dieser Stelle bin ich dankbar.

Viele Grüße
Dirk

hkueller

Zitat von: pcbastler am 25 September 2022, 19:52:25evtl. hilft es weiter, bin als E3DC-Besitzer zufällig darüber gestolpert: https://github.com/pvtom/rscp2mqtt . Die Möglichkeiten erschließen sich mir auf Grund mangelnder Kenntnisse leider nicht. Würde aber gern als Tester zu Verfügung stehen.

Da kann ich jetzt vielleicht weiterhelfen.
Das ganze braucht meines Wissens zwingend ein Linux System (z.B. einen Raspi)
rscp2mqtt lässt sich recht einfach konfigurieren. Einfach der Anleitung auf Github folgen. Nach dem Übersetzen (make) auch der Installations Anleitung folgen.
Hier in Kurzform:

$ sudo -i
# git clone https://github.com/pvtom/rscp2mqtt.git
# cd rscp2mqtt
# make
..... <hier erfolgt output vom compilieren.>
# mkdir /opt/rscp2mqtt
# cp rscp2mqtt /opt/rscp2mqtt
# cp config.template /opt/rscp2mqtt/.config
# sed "s/\(User=\).*/\1rscp2mqtt/" rscp2mqtt.service >/etc/systemd/system/rscp2mqtt.service
# useradd rscp2mqtt
# find /opt/rscp2mqtt ! -type l -exec chown root:rscp2mqtt /opt/rscp2mqtt
# chmod 755 /opt/rscp2mqtt

Jetzt kann man entweder mit mosquito einen mqtt server (=broker) auf dem raspi laufenlassen, oder den fhem internen verwenden.
Ich habe bei mir letzteres Realisiert:

define mqtt2server MQTT2_SERVER 1883 global

Lässt man den mqtt2server mit standart einstellungen aktiv, bekommt man die Anlage nach abschluss aller arbeiten automatisch Konfiguriert.
Leider liefert rscp2mqtt daten, die beim automatischen anlegen für unterschiedliche Werte gleiche readings verwenden (es sind mehrere 100 readings die generiert würden!
Um das zu verhindern, noch ein:

attr mqtt2server autocreate no

im fhem absetzen!

rscp2mqtt wird über ein file .config im installationspfad (std. /opt/rscp2mqtt) konfiguriert.
Das meiste ist selbsterklärend.
Wichtig:

MQTT_HOST=<Hostname des Rechners auf dem FHEM läuft, oder entsprechende IP>
E3DC_User=<User der auch für den Login in das E3DC Portal verwendet wird>
E3DC_PASSWORD=<Password für das E3DC Webportal>
E3DC_AES_PASSWORD=<Muss an der E3DC Anlage für das RSCP Protokoll hinterlegt sein>

Natürlich muss direkt an der E3DC Anlage rscp auch aktiviert werden (Wie das geht steht im Handbuch zu Anlage)
Jetzt kann der rscp2mqtt daemon gestartet werden:

# systemctl start rscp2mqtt

mit:

# systemctl status rscp2mqtt

Prüfen ob der dienst korrekt läuft, und wenn dem so ist, den Dienst enablen (damit wird er nach einem reboot automatisch gestartet):

# systemctl enable rscp2mqtt

Jetzt können wir die Anlage in FHEM anlegen:

define e3dc_s10 MQTT2_DEVICE mqtt2server
attr e3dc_s10 alias E3/DC S10E
attr e3dc_s10 event-min-interval .*:3600
attr e3dc_s10 event-on-change-reading .*
attr e3dc_s10 icon measure_photovoltaic_inst@yellow

Das sollte ein Gerät "e3dc_s10" in fhem erzeugen. Das nun in der gui aufmachen, bei Attr readinglist auswählen und in dem Eingabefeld rechts:

mqtt2server:e3dc/system/installed_peak_power:.* installierte_solarleistung
mqtt2server:e3dc/ems/charging_throttled:.* Abregelung
mqtt2server:e3dc/ems/charging_lock:.* Ladesperre
mqtt2server:e3dc/ems/discharging_lock:.* Entladesperre
mqtt2server:e3dc/ems/charging_time_lock:.* zeitliche_ladesperre
mqtt2server:e3dc/ems/discharging_time_lock:.* zeitliche_entladesperre
mqtt2server:e3dc/ems/weather_regulation:.* wetterbasierte_laderegelung
mqtt2server:e3dc/autarky:.* Autarkie
mqtt2server:e3dc/consumed:.* Eigenverbrauch
mqtt2server:e3dc/system/software:.* Firmware
mqtt2server:e3dc/system/serial_number:.* Seriennummer
mqtt2server:e3dc/wallbox/charging:.* Wallbox1_Auto
mqtt2server:e3dc/wallbox/sun_mode:.* Wallbox1_Solarmodus
mqtt2server:e3dc/wallbox/plugged:.* Wallbox1_Type2_eingesteckt
mqtt2server:e3dc/wallbox/number_used_phases:.* Wallbox1_Phasen
mqtt2server:e3dc/wallbox/max_current:.* Wallbox1_MaxStrom
mqtt2server:e3dc/wallbox/status:.* Wallbox1_Vorhanden
mqtt2server:e3dc/wallbox/solar/power:.* WallboxSolarleistung
mqtt2server:e3dc/wallbox/total/power:.* Wallboxwatt
mqtt2server:e3dc/wallbox/locked:.* wallbox_gesperrt
mqtt2server:e3dc/wallbox/canceled:.* wallbox_abgebrochen
mqtt2server:e3dc/battery/rsoc:.* batterie_fuellstand
mqtt2server:e3dc/battery/power:.* batterie_ladeleistung
mqtt2server:e3dc/battery/current:.* batterie_ladestrom
mqtt2server:e3dc/battery/voltage:.* batterie_spannung
mqtt2server:e3dc/battery/cycles:.* battery_ladecyclen
mqtt2server:e3dc/battery/temperature/max:.* batterie_temperatur_max
mqtt2server:e3dc/battery/temperature/min:.* batterie_temperatur_min
mqtt2server:e3dc/battery/error:.* battery_fehler
mqtt2server:e3dc/home/power:.* eigenverbrauch
mqtt2server:e3dc/pm/power/L1:.* grid_L1_watt
mqtt2server:e3dc/pm/power/L2:.* grid_L2_watt
mqtt2server:e3dc/pm/power/L3:.* grid_L3_watt
mqtt2server:e3dc/pvi/power/L1:.* pv_L1_watt
mqtt2server:e3dc/pvi/power/L2:.* pv_L2_watt
mqtt2server:e3dc/pvi/power/L3:.* pv_L3_watt
mqtt2server:e3dc/grid/power:.* netzbezug
mqtt2server:e3dc/solar/power:.* pv_gesammt_leistung
mqtt2server:e3dc/pvi/power/string_2:.* pv_ost_leistung
mqtt2server:e3dc/pvi/voltage/string_2:.* pv_ost_spannung
mqtt2server:e3dc/pvi/current/string_2:.* pv_ost_strom
mqtt2server:e3dc/pvi/power/string_1:.* pv_west_leistung
mqtt2server:e3dc/pvi/voltage/string_1:.* pv_west_spannung
mqtt2server:e3dc/pvi/current/string_1:.* pv_west_strom

Eingeben und speichern.
Nach kurzer Zeit sollten die Readings auftauchen (ab und zu ein Reload machen!)
Das ist nur eine kleine Auswahl der möglichen Werte, die rscp2mqtt ausliest.
eine Übersicht über die möglichen werte steht im "TOPICS.md" aus dem rscp2mqtt git checkout.

Ich habe noch einige Settings zusätzlich, die mir erlauben die Wetterprognose ein/aus zu schalten, und den Lademodus der E3DC Wallbox in den Sonnen oder Mixed Modus zu schalten. Dazu wieder unter Attr das Attribut "SetList" auswählen, und dort dann:

weather:true,false e3dc/set/weather_regulation $EVTPART1\
 wallbox:solar:32,mix:32,stop e3dc/set/wallbox/control $EVTPART1
Eingeben.
Jetzt findet man unter Set 2 weitere Einträge - wallbox und weather.

Ich hoffe das hilft weiter.
Die Namen für die Readings sind natürlich geschmackssache - da kann sich jeder austoben..  ;D

Viele Grüße
Harald
fhem auf Fedora KVM instance mit >300 Homematic Devices

Dirk070

Hallo Harald,

das sieht hochinteressant aus, vor allem, weil mir bisher die Zeit für die Recherche bzgl. Perl-Abbildung gefehlt hat.
Die Schnittstelle gibt es auch als Docker Container
Das schaue ich mir an, da ich FHEM auf der Syno auch als Docker laufen habe.

Viele Grüße und vielen Dank
Dirk

hkueller

Hallo Dirk,

Die Idee mit einem Perl Modul hatte ich auch, halte ich aber momentan nicht mit vertretbaren Aufwand machbar (auch außerhalb meiner Fähigkeiten):
Das Bauen der RSCP Frames ist noch vergleichsweise leicht - da habe ich schon (für die Authentication) passende Routinen.
E3DC verwendet mit rscp eine AES-256-CBC Verschlüsselung, aber im Gegensatz zum Standart mit 32 byte Block Daten - der Standard, der auch von allen mir bekannten Perl Modulen unterstützt wird, kennt nur 16 byte Blöcke. Ich hab keinen Weg gefunden die Module mit 32 byte zu Konfigurieren (geht auch laut module Dokumentation nicht).
Getestet hab ich mit den Modulen Crypt::OpenSSL::AES und Crypt::CBC.
d.h. man müsste erst mal ein neues Modul für die Verschlüsselung bauen, bzw. ein vorhandenes anpassen. Dazu fehlt mir das Wissen über die zugrundeliegende Mathematik.
Aber vielleicht gibt es ja jemanden der das kann, und dazu Lust hat ?

Viele Grüße
Harald


Zitat von: Dirk070 am 08 November 2023, 17:05:19Hallo Harald,

das sieht hochinteressant aus, vor allem, weil mir bisher die Zeit für die Recherche bzgl. Perl-Abbildung gefehlt hat.
Die Schnittstelle gibt es auch als Docker Container
Das schaue ich mir an, da ich FHEM auf der Syno auch als Docker laufen habe.

Viele Grüße und vielen Dank
Dirk
fhem auf Fedora KVM instance mit >300 Homematic Devices

Dirk070

Hallo Harald,

nochmals Danke für Deinen Input, bei mir läuft der rscp2mqtt in einem Docker-Container und die Einbindung in FHEM hat auch funktioniert.
Die Readings kommen nur bei Änderungen, daher wird der installed_peak_power nicht aktualisiert - bedeutet, einmal den Container neu starten und dann kommt auch der Wert.

Ich suche noch nach der Möglichkeit, die Phasen der Wallbox (1, 3) zu setzen und bin noch nicht fündig geworden. Laut https://github.com/nischram/E3dcGui ist dies möglich.
Hier ist leider nichts dazu zu finden https://github.com/pvtom/rscp2mqtt/blob/main/WALLBOX.md

Merkwürdig finde ich, dass einzelne Funktion direkt aufgrufen werden können, z.B. e3dc/set/wallbox/battery_to_car
Aber Solar- und Mischmodus gehen über "control" e3dc/set/wallbox/control" -m "solar:16"

Hast Du zur Menge der Phasen etwas gefunden (ich habe eine Multi Connect und schalte im Sonnenmodus auf 1 Phase, um früher den Überschuss nutzen zu können).

Viele Grüße
Dirk

hkueller

#10
Hallo Dirk,

Da muss ich leider passen.
Gehen muss das irgendwie, da man es ja auch über die E3DC Cloud ändern kann.
Ich nehme an das da e3dc_Gui da etwas weiter ist. Irgendwo mein ich auch mal eine Diskussion gelesen zu haben, das E3dc_Gui zusätzlich mqtt beigebracht bekommen soll, aber das ist wohl noch in Diskussion.
In dem Readme zu dem Projekt auf Github (https://github.com/pvtom/rscp2mqtt.git) findet sich ziemlich am Ende eine Beschreibung aller Werte die mit rscp2mqtt geändert werden können - da steht (noch ?) nichts zu der Anzahl der Phasen.
Ich hab mir die E3DC Doku, die dem Beispiel Programm beiliegt schon mal angesehen. Es ist recht aufwändig Werte mit RSCP in dem System zu ändern (Datenframe in Datenframe mit unterschiedlichen Tags und genau vorgegebenen Werten). Welche Werte genau für die Wallbox mit welchem TAG geändert werden können ist in der Doku fast nicht herauszufinden.
Ich vermute mal das da auch "pvtom" - der Autor des Ganzen - seine Probleme mit hat.

Viele Grüße
Harald
fhem auf Fedora KVM instance mit >300 Homematic Devices

Dirk070

Ich habe Thomas (pvtom) mal diesbezüglich angefragt.

Das rscp2mqtt protokolliert jedes Auslesen, also mindestens alle 10 Sekunden (habe ich so eingestellt).

Für alle, die auch die Docker-Variante auf der SYNO nutzen möchten: es gibt einen -s Parameter (Silent), dann wird nur die Herstellung der Verbindung protokolliert. Leider ist die SYNO-Docker-GUI stark reglementiert.

Ich habe dazu Portainer (auch als Docker-Image) installiert.
Dort kann man per Edit unter Command & Logging im Command wie folgt anpassen:

'/opt/rscp2mqtt/rscp2mqtt' '-s'
Dann bleibt das Logging sehr übersichtlich.

pcbastler

Hallo zusammen,
ich habe jetzt den S10E via Modbus und rscp2mqtt im Fhem, die Werte passen soweit. Interessant wäre jetzt der Mehrwert von RSCP, auch Einstellungen ändern zu können.
Kann man das irgendwie über den FHEM-eigenen MQTT2-Server testen (also z.B. per "MQTT2_FHEM_Server:e3dc/battery/energy/charge:.* charge" eine Ladung zu erzwingen)?

Dirk070

Schau mal in den Beitrag #6 von Harald, SetList.
Das Schalten der Phasen will Thomas (pvtom) netterweise ergänzen.

Dirk070

Das Umschalten der Phasen funktioniert nun mit der neuen Version 3.8.
In der SetList:
WB_Phases:1,3 e3dc/set/wallbox/number_phases $EVTPART1
Klasse, nun kann ich das neue Reading für den Schlüsselschalter an der Wallbox auswerten und entsprechend die Menge der Phasen setzen.