Lokale Live Daten von Enphase
Verbrauch, Netzbezug, Batterie Be/Entladung, alles lokal von der Enphase Box.
Ich hatte schon ein bisschen mit der lokalen Enphase API rumgespielt. Per Skript ein Access Token holen und damit mein Envoy im Keller abfragen.
Ich hatte mich schon immer gewundert wo denn die Daten sind um meinen aktuellen Hausverbrauch und Ladung/Entladung der Batterie anzuzeigen. Meinen Zählerstand und Einspeisung/Bezug ins Netz frage ich ja mit einem Optokoppler ab. Aber was verbauche ich denn gerade?
Die Liveansicht von Enphase bietet folgendes:
Diese Daten müssten doch irgendwo verfügbar sein. Ein Blick in den WebInspector verrät, dass die Daten von AWS gestreamt werden. MQTT via WebSockets.
Ein bisschen googlen und ich fand folgende URL bei mir http://myenvoy/ivp/livedata/status. Der gibt mir:
"connection": {
"mqtt_state": "connected",
"prov_state": "configured",
"auth_state": "ok",
"sc_stream": "enabled",
"sc_debug": "disabled"
},
"meters": {
"last_update": 1714159237,
"soc": 62,
"main_relay_state": 1,
"gen_relay_state": 5,
"backup_bat_mode": 1,
"backup_soc": 0,
"is_split_phase": 0,
"phase_count": 3,
"enc_agg_soc": 62,
"enc_agg_energy": 6545,
"acb_agg_soc": 0,
"acb_agg_energy": 0,
"pv": {
"agg_p_mw": -21445,
"agg_s_mva": -213351,
...
"storage": {
"agg_p_mw": 590000,
...
"grid": {
"agg_p_mw": -2360,
...
"load": {
"agg_p_mw": 566195,
...
Und siehe da:
- enc_agg_soc: 62 - Batterie 62%
- enc_agg_energy: 6545 - Batterie 6545 Wh
- pv agg_p_mw: -21445 - Meine Solaranlage kostet gerade 21445 mW = 21 W, wenn die Zahl positive ist produziert sie (pv_production_mw)
- storage agg_p_mw: 590000 - Meine Batterie gibt gerade 59000 mW ab = 590 W, bei negativ lädt sie auf (storage_outflow_mw)
- grid agg_p_mw: -2360 - Ich speise gerade 2360 mW = 2,3 W ins Netz ein. bei positiv beziehe ich vom Netz (grid_inflow_mw)
- load agg_p_mw: 566195 - Mein Haus braucht gerade 566195 mW = 566 W (load_inflow_mw)
Diese Werte wollte ich schon immer haben und sie waren schon immer da. Yes!
Leider stoppt die Aktualisierung nach einer Weile. Der Trigger um die Aktualisierung wieder anzustossen ist in der App oder Webseite die LiveDaten anzuschauen. Dann geht das auch wieder. Auch verändert sich das Feld '"sc_stream": "enabled". Wie also das ohne App und Webseite machen?
Stellt sich raus ein POST Request auf:
curl -X POST -f -k -H 'Authorization:Bearer <<TOKEN>>' 'https://myenvoy/ivp/livedata/stream' -d '{"enable":1}'
stellt genau diesen Zustand her und der bleibt so für 15 Minuten.
Nun schickt ein Cronjob alle 14 Minuten da ein POST hin und ich kann in aller Ruhe meine Livedaten mir anzeigen lassen. Das alles habe ich in Python mit APScheduler und einer Postgres implementiert. Die Werte werden noch zusätzlich zu meinem MQTT Server gepusht um sie auf meinem Ulanzi anzuzeigen. Da stehen auch noch :
- aktueller Strompreis Strombörse
- Strompreis in der nächsten vollen Stunde
- Zählerstand Strom eingehend (10800ff)
- Zählerstand Strom ausgehend (20800ff)
- Aktueller Strombedarf (100700ff)
- ... und oben gennante Werte
Ich mache den ganzen Spaß für den (absehbaren) Fall, dass ich einen dynamischen Stromtarif bekomme und meine Geräte selbst steuern kann. Automatisch wird von den Herstellern da eher wenig angeboten. Vor allem ältere nicht-smarte Geräte gehen da nicht. Da will ich dann selbst Hand anlegen. Bin gespannt wie gut dass klappen wird.
Da ich letzten die 3 Phasige Umstellung meiner Batterie hatte ist mir noch eine Umstimmigkeit aufgefallen bzw. das Schaltverhalten der Batterie. Da kann ich jetzt schön Daten sammeln und mich dann mal an den Support wenden.