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