Solaredge optimiererdaten auslesen
Verfasst: 30. Sep 2024 17:25
Hallo,
Da ich ja seit einigen Monaten eine PV-Anlage mit Solaredge Optimierern auf dem Dach und die
Daten über die Webschnittstelle auslese, was auch gut funktioniert ,
welches aber nur die Gesamtleistung aber nicht die Leistung jeder Platte bringt habe ich mich auf die Suche nach einer
Möglichkeit gemacht welche dies kann!
Dabei bin auf dies gestoßen:
SolarEdge PV-Leistung auf Panelebene selbst mitloggen und per Grafana visualisieren
Youtube Link : https://www.youtube.com/watch?v=VDLDJ8RomOY&t=8s
Jetzt bin gerade dabei mich ein zu lesen und es aus zu probieren.
Ich habe mir ein Versuchs `Openhab` mit dem jython-Script aufgesetzt.
Aber die Logdatei bringt mir einen Fehler
meine jython Datei Ist wie folgt
nun meine Frage was ist da verkehrt?
Vieleicht kann mir jemand helfen, denn es wäre schon cool wenn es funktionieren würde !
Mein Ziel wäre für jeden Optimierer ( Spannung, Leistung, etc.) ein Item zu haben.
Für jeden Tipp bin ich dankbar
Gruß Rob69
Da ich ja seit einigen Monaten eine PV-Anlage mit Solaredge Optimierern auf dem Dach und die
Daten über die Webschnittstelle auslese, was auch gut funktioniert ,
welches aber nur die Gesamtleistung aber nicht die Leistung jeder Platte bringt habe ich mich auf die Suche nach einer
Möglichkeit gemacht welche dies kann!
Dabei bin auf dies gestoßen:
SolarEdge PV-Leistung auf Panelebene selbst mitloggen und per Grafana visualisieren
Youtube Link : https://www.youtube.com/watch?v=VDLDJ8RomOY&t=8s
Jetzt bin gerade dabei mich ein zu lesen und es aus zu probieren.
Ich habe mir ein Versuchs `Openhab` mit dem jython-Script aufgesetzt.
Aber die Logdatei bringt mir einen Fehler
Code: Alles auswählen
2024-09-30 15:58:41.302 [ERROR] [ipt.internal.ScriptEngineManagerImpl] - Error during evaluation of script '/etc/openhab/automation/jython/solaredge.py': ImportError: No module named requests in /etc/openhab/automation/jython/solaredge.py at line number 1
2024-09-30 15:58:41.307 [WARN ] [ort.loader.AbstractScriptFileWatcher] - Script loading error, ignoring file '/etc/openhab/automation/jython/solaredge.py'
Code: Alles auswählen
import requests, pickle
from datetime import datetime
import json, pytz
import pandas as pd
from influxdb import DataFrameClient
login_url = "https://monitoring.solaredge.com/solaredge-apigw/api/login"
panels_url = "https://monitoring.solaredge.com/solaredge-web/p/playbackData"
SOLAREDGE_USER = "ich@XXXXXXXXXXX.de" # web username
SOLAREDGE_PASS = "sagichnicht" # web password
SOLAREDGE_SITE_ID = "16XXXXX1" # site id
DAILY_DATA = "4"
WEEKLY_DATA = "5"
INFLUXDB_IP = "192.168.3.30"
INFLUXDB_PORT = 8086
INFLUXDB_DATABASE = "Zuhause"
INFLUXDB_SERIES = "optimisers"
INFLUXDB_RETENTION_POLICY = "autogen"
session = requests.session()
try: # Make sure the cookie file exists
with open('solaredge.cookies', 'rb') as f:
f.close()
except IOError: # Create the cookie file
session.post(login_url, headers = {"Content-Type": "application/x-www-form-urlencoded"}, data={"j_username": SOLAREDGE_USER, "j_password": SOLAREDGE_PASS})
panels = session.post(panels_url, headers = {"Content-Type": "application/x-www-form-urlencoded", "X-CSRF-TOKEN": session.cookies["CSRF-TOKEN"]}, data={"fieldId": SOLAREDGE_SITE_ID, "timeUnit": DAILY_DATA})
with open('solaredge.cookies', 'wb') as f:
pickle.dump(session.cookies, f)
f.close()
with open('solaredge.cookies', 'rb') as f:
session.cookies.update(pickle.load(f))
panels = session.post(panels_url, headers = {"Content-Type": "application/x-www-form-urlencoded", "X-CSRF-TOKEN": session.cookies["CSRF-TOKEN"]}, data={"fieldId": SOLAREDGE_SITE_ID, "timeUnit": DAILY_DATA})
if panels.status_code != 200:
session.post(login_url, headers = {"Content-Type": "application/x-www-form-urlencoded"}, data={"j_username": SOLAREDGE_USER, "j_password": SOLAREDGE_PASS})
panels = session.post(panels_url, headers = {"Content-Type": "application/x-www-form-urlencoded", "X-CSRF-TOKEN": session.cookies["CSRF-TOKEN"]}, data={"fieldId": SOLAREDGE_SITE_ID, "timeUnit": DAILY_DATA})
if panels.status_code != 200:
exit()
with open('solaredge.cookies', 'wb') as f:
pickle.dump(s.cookies, f)
response = panels.content.decode("utf-8").replace('\'', '"').replace('Array', '').replace('key', '"key"').replace('value', '"value"')
response = response.replace('timeUnit', '"timeUnit"').replace('fieldData', '"fieldData"').replace('reportersData', '"reportersData"')
response = json.loads(response)
data = {}
for date_str in response["reportersData"].keys():
date = datetime.strptime(date_str, '%a %b %d %H:%M:%S GMT %Y')
date = pytz.timezone('Europe/Berlin').localize(date).astimezone(pytz.utc)
for sid in response["reportersData"][date_str].keys():
for entry in response["reportersData"][date_str][sid]:
if entry["key"] not in data.keys():
data[entry["key"]] = {}
data[entry["key"]][date] = float(entry["value"].replace(",", ""))
df = pd.DataFrame(data)
conn = DataFrameClient(INFLUXDB_IP, INFLUXDB_PORT, "", "", INFLUXDB_DATABASE)
conn.write_points(df, INFLUXDB_SERIES, retention_policy=INFLUXDB_RETENTION_POLICY)
Vieleicht kann mir jemand helfen, denn es wäre schon cool wenn es funktionieren würde !
Mein Ziel wäre für jeden Optimierer ( Spannung, Leistung, etc.) ein Item zu haben.
Für jeden Tipp bin ich dankbar
Gruß Rob69