Dashboard für Solaredge Wechselrichter + Batterie (Raspi und Mobil)

Hier könnt Ihr Eure Dashborads den anderen Mitgliedern zur Verfügung stellen. Bitte immer auch ein Screenshot dazu laden, damit man sieht wie das Dashboard aussieht und unbedingt auch für welchen Regler / Wechselrichter es ist.

Moderator: Ulrich

Antworten
Benutzeravatar
jjk
Beiträge: 2
Registriert: Sa 12. Sep 2020, 16:55

Dashboard für Solaredge Wechselrichter + Batterie (Raspi und Mobil)

Beitrag von jjk »

Hallo zusammen.
Das ist mein Dashboard. Einige Daten werden von Python Skripten ausgelesen und berechnet, da ich es bisher in Grafana nicht geschafft habe. (und PHP kann ich auch nicht). Auch Daten aus der Solaredge API sind darin enthalten. Die Skripte werden per cron regelmäßig ausgeführt.

Skript: eigenverbrauch.py. Wird einmal pro Minute ausgeführt

Code: Alles auswählen

#!/usr/bin/env python3

from influxdb import InfluxDBClient
from time import asctime
client = InfluxDBClient(host='localhost', port=8086)
client.switch_database('solaranzeige')

#--------------- Berechnung des Eigenverbrauchs ---------------
print(asctime())
print("Berechnung des Eigenverbrauchs")
#Verbrauch ermitteln
results=client.query('SELECT "Verbrauch" FROM "AC" GROUP BY * ORDER BY DESC LIMIT 1')

points = results.get_points

point = 0

for point in points():
	verbrauch = point['Verbrauch']
	verbrauchprint = str(verbrauch)
	print("Verbrauch: " + verbrauchprint)

#AC Leistung ermitteln
results=client.query('SELECT "Leistung" FROM "AC" GROUP BY * ORDER BY DESC LIMIT 1')

points = results.get_points

point = 0

for point in points():
	acleistung = (point['Leistung'])
	acleistungprint = str(acleistung)
	print("AC-Leistung: " + acleistungprint)

#Berechnen
if acleistung >= verbrauch:
	eigenverbrauch = verbrauch
	eigenverbrauchprint = str(eigenverbrauch)
	print("Eigenverbrauch: " + eigenverbrauchprint)

if acleistung < verbrauch:
	eigenverbrauch = acleistung
	eigenverbrauchprint = str(eigenverbrauch)
	print("Eigenverbrauch: " + eigenverbrauchprint)

#Berechnete Werte in die Datenbank eintragen
json_body = [
	{
		"measurement": "Eigenverbrauch",
		"fields": {
			"Eigenverbrauch": eigenverbrauch
		}
	},
]

client.write_points(json_body)
Skript: pv.py. wird einmal pro Minute ausgeführt

Code: Alles auswählen

#!/usr/bin/env python3

from time import asctime
from influxdb import InfluxDBClient
client = InfluxDBClient(host='localhost', port=8086)
client.switch_database('solaranzeige')

#--------------- Berechnung der Modulleistung ---------------
print(asctime())
print("Berechnung der Modulleistung")

#Batterieleistung ermitteln
results=client.query('SELECT "Leistung" FROM "Batterie_1" GROUP BY * ORDER BY DESC LIMIT 1')

points = results.get_points

point = 0

for point in points():
	batterieleistung = point['Leistung']
	batterieleistungprint = str(batterieleistung)
	print("Baterieleistung: " + batterieleistungprint)

#AC Leistung ermitteln
results=client.query('SELECT "Leistung" FROM "AC" GROUP BY * ORDER BY DESC LIMIT 1')

points = results.get_points

point = 0

for point in points():
	acleistung = (point['Leistung'])
	acleistungprint = str(acleistung)
	print("AC-Leistung: " + acleistungprint)

#Berechnen
pvleistung = acleistung+batterieleistung
pvleistungprint = str(pvleistung)
if pvleistung < 50:
	pvleistung2 = 0
	pvleistung = float(pvleistung2)
	pvleistungprint = str(pvleistung)

print("PV-Leistung: " + pvleistungprint)

#Berechnete Werte in die Datenbank eintragen
json_body = [
	{
		"measurement": "PV-Leistung",
		"fields": {
			"PV-Leistung": pvleistung
		}
	},
]

client.write_points(json_body)
Skript: api.py. wird alle 15 Minuten ausgeführt

Code: Alles auswählen

import requests
from datetime import date
from influxdb import InfluxDBClient

client = InfluxDBClient(host='localhost', port=8086)
client.switch_database('solaranzeige')

today = date.today()
starttime= str(today.year) + "-" + str(today.month) + "-" + str(today.day) + "%2000:00:00"
endtime=   str(today.year) + "-" + str(today.month) + "-" + str(today.day) + "%2023:59:59"
#Abfrage
url='https://monitoringapi.solaredge.com/site/geheim/energyDetails?timeUnit=DAY&startTime=' + starttime + '&endTime=' + endtime + '&api_key=geheim'
r = requests.get(url)
data = r.json()
print(url)
#Verarbeitung

#Eigenverbrauch
if data["energyDetails"]["meters"][0]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][4]["values"][0]["value"]
	
#Produktion
if data["energyDetails"]["meters"][0]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][4]["values"][0]["value"]

#bezug
if data["energyDetails"]["meters"][0]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][4]["values"][0]["value"]

#einspeisung
if data["energyDetails"]["meters"][0]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][4]["values"][0]["value"]
	
#verbrauch
if data["energyDetails"]["meters"][0]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][4]["values"][0]["value"]

#Berechnung Verhältnis:
#Eigenverbrauch - Einspeisung
try:
	einspeisung_prozent = einspeisung/produktion
	erfolg_einspeisung_prozent = 1
except:
	erfolg_einspeisung_prozent = 0

try:
	bezug_prozent = bezug/verbrauch
	erfolg_bezug_prozent = 1
except:
	erfolg_bezug_prozent = 0
#Ausgabe
print("Eigenverbrauch: " + str(eigenverbrauch))
print("Produktion: " + str(produktion))
print("Bezug: " + str(bezug))
print("Einspeisung: " + str(einspeisung))
print("Verbrauch: " + str(verbrauch))

#In influxdb schreiben
json_body = [
	{
		"measurement": "Summen_Tag",
		"fields": {
			"Eigenverbrauch": eigenverbrauch
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Tag",
		"fields": {
			"Produktion": produktion
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Tag",
		"fields": {
			"Bezug": bezug
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Tag",
		"fields": {
			"Einspeisung": einspeisung
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Tag",
		"fields": {
			"Verbrauch": verbrauch
		}
	},
]
client.write_points(json_body)

if erfolg_einspeisung_prozent == 1:
	json_body = [
		{
			"measurement": "Summen_Tag",
			"fields": {
				"Einspeisung_Prozent": einspeisung_prozent
			}
		},
	]
	client.write_points(json_body)
if erfolg_bezug_prozent == 1:
	json_body = [
		{
			"measurement": "Summen_Tag",
			"fields": {
				"Bezug_Prozent": bezug_prozent
			}
		},
	]
	client.write_points(json_body)
Skript: api_woche.py. Wird einmal pro Tag ausgeführt.

Code: Alles auswählen

import requests
from datetime import date
from influxdb import InfluxDBClient

client = InfluxDBClient(host='localhost', port=8086)
client.switch_database('solaranzeige')

today = date.today()
starttime= str(today.year) + "-" + str(today.month) + "-" + str(today.day) + "%2000:00:00"
endtime=   str(today.year) + "-" + str(today.month) + "-" + str(today.day) + "%2023:59:59"
#Abfrage
url='https://monitoringapi.solaredge.com/site/geheim/energyDetails?timeUnit=WEEK&startTime=' + starttime + '&endTime=' + endtime + '&api_key=geheim'
r = requests.get(url)
data = r.json()
print(url)
#Verarbeitung

#Eigenverbrauch
if data["energyDetails"]["meters"][0]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][4]["values"][0]["value"]
	
#Produktion
if data["energyDetails"]["meters"][0]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][4]["values"][0]["value"]

#bezug
if data["energyDetails"]["meters"][0]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][4]["values"][0]["value"]

#einspeisung
if data["energyDetails"]["meters"][0]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][4]["values"][0]["value"]
	
#verbrauch
if data["energyDetails"]["meters"][0]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][4]["values"][0]["value"]

#Berechnung Verhältnis:
#Eigenverbrauch - Einspeisung
try:
	einspeisung_prozent = einspeisung/produktion
	erfolg_einspeisung_prozent = 1
except:
	erfolg_einspeisung_prozent = 0

try:
	bezug_prozent = bezug/verbrauch
	erfolg_bezug_prozent = 1
except:
	erfolg_bezug_prozent = 0
#Ausgabe
print("Eigenverbrauch: " + str(eigenverbrauch))
print("Produktion: " + str(produktion))
print("Bezug: " + str(bezug))
print("Einspeisung: " + str(einspeisung))
print("Verbrauch: " + str(verbrauch))

#In influxdb schreiben
json_body = [
	{
		"measurement": "Summen_Woche",
		"fields": {
			"Eigenverbrauch": eigenverbrauch
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Woche",
		"fields": {
			"Produktion": produktion
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Woche",
		"fields": {
			"Bezug": bezug
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Woche",
		"fields": {
			"Einspeisung": einspeisung
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Woche",
		"fields": {
			"Verbrauch": verbrauch
		}
	},
]
client.write_points(json_body)

if erfolg_einspeisung_prozent == 1:
	json_body = [
		{
			"measurement": "Summen_Woche",
			"fields": {
				"Einspeisung_Prozent": einspeisung_prozent
			}
		},
	]
	client.write_points(json_body)
if erfolg_bezug_prozent == 1:
	json_body = [
		{
			"measurement": "Summen_Woche",
			"fields": {
				"Bezug_Prozent": bezug_prozent
			}
		},
	]
	client.write_points(json_body)
Skript: api_monat.py wird einmal am Tag ausgeführt.

Code: Alles auswählen

import requests
from datetime import date
from influxdb import InfluxDBClient

client = InfluxDBClient(host='localhost', port=8086)
client.switch_database('solaranzeige')

today = date.today()
starttime= str(today.year) + "-" + str(today.month) + "-" + "01" + "%2000:00:00"
endtime=   str(today.year) + "-" + str(today.month) + "-" + str(today.day) + "%2023:59:59"
#Abfrage
url='https://monitoringapi.solaredge.com/site/geheim/energyDetails?timeUnit=MONTH&startTime=' + starttime + '&endTime=' + endtime + '&api_key=geheim'
r = requests.get(url)
data = r.json()
print(url)
#Verarbeitung

#Eigenverbrauch
if data["energyDetails"]["meters"][0]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][4]["values"][0]["value"]
	
#Produktion
if data["energyDetails"]["meters"][0]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][4]["values"][0]["value"]

#bezug
if data["energyDetails"]["meters"][0]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][4]["values"][0]["value"]

#einspeisung
if data["energyDetails"]["meters"][0]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][4]["values"][0]["value"]
	
#verbrauch
if data["energyDetails"]["meters"][0]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][4]["values"][0]["value"]

#Berechnung Verhältnis:
#Eigenverbrauch - Einspeisung
try:
	einspeisung_prozent = einspeisung/produktion
	erfolg_einspeisung_prozent = 1
except:
	erfolg_einspeisung_prozent = 0

try:
	bezug_prozent = bezug/verbrauch
	erfolg_bezug_prozent = 1
except:
	erfolg_bezug_prozent = 0
#Ausgabe
print("Eigenverbrauch: " + str(eigenverbrauch))
print("Produktion: " + str(produktion))
print("Bezug: " + str(bezug))
print("Einspeisung: " + str(einspeisung))
print("Verbrauch: " + str(verbrauch))

#In influxdb schreiben
json_body = [
	{
		"measurement": "Summen_Monat",
		"fields": {
			"Eigenverbrauch": eigenverbrauch
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Monat",
		"fields": {
			"Produktion": produktion
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Monat",
		"fields": {
			"Bezug": bezug
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Monat",
		"fields": {
			"Einspeisung": einspeisung
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Monat",
		"fields": {
			"Verbrauch": verbrauch
		}
	},
]
client.write_points(json_body)
if erfolg_einspeisung_prozent == 1:
	json_body = [
		{
			"measurement": "Summen_Monat",
			"fields": {
				"Einspeisung_Prozent": einspeisung_prozent
			}
		},
	]
	client.write_points(json_body)
if erfolg_bezug_prozent == 1:
	json_body = [
		{
			"measurement": "Summen_Monat",
			"fields": {
				"Bezug_Prozent": bezug_prozent
			}
		},
	]
	client.write_points(json_body)
Skript: api_jahr.py wird einmal am Tag ausgeführt:

Code: Alles auswählen

import requests
from datetime import date
from influxdb import InfluxDBClient

client = InfluxDBClient(host='localhost', port=8086)
client.switch_database('solaranzeige')

today = date.today()
starttime= str(today.year) + "-" + str(today.month) + "-" + str(today.day) + "%2000:00:00"
endtime=   str(today.year) + "-" + str(today.month) + "-" + str(today.day) + "%2023:59:59"
#Abfrage
url='https://monitoringapi.solaredge.com/site/geheim/energyDetails?timeUnit=YEAR&startTime=' + starttime + '&endTime=' + endtime + '&api_key=geheim'
r = requests.get(url)
data = r.json()
print(url)
#Verarbeitung

#Eigenverbrauch
if data["energyDetails"]["meters"][0]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "SelfConsumption":
	eigenverbrauch = data["energyDetails"]["meters"][4]["values"][0]["value"]
	
#Produktion
if data["energyDetails"]["meters"][0]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Production":
	produktion = data["energyDetails"]["meters"][4]["values"][0]["value"]

#bezug
if data["energyDetails"]["meters"][0]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Purchased":
	bezug = data["energyDetails"]["meters"][4]["values"][0]["value"]

#einspeisung
if data["energyDetails"]["meters"][0]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "FeedIn":
	einspeisung = data["energyDetails"]["meters"][4]["values"][0]["value"]
	
#verbrauch
if data["energyDetails"]["meters"][0]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][0]["values"][0]["value"]
	
if data["energyDetails"]["meters"][1]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][1]["values"][0]["value"]
	
if data["energyDetails"]["meters"][2]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][2]["values"][0]["value"]
	
if data["energyDetails"]["meters"][3]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][3]["values"][0]["value"]
	
if data["energyDetails"]["meters"][4]["type"] == "Consumption":
	verbrauch = data["energyDetails"]["meters"][4]["values"][0]["value"]

#Berechnung Verhältnis:
#Eigenverbrauch - Einspeisung
try:
	einspeisung_prozent = einspeisung/produktion
	erfolg_einspeisung_prozent = 1
except:
	erfolg_einspeisung_prozent = 0

try:
	bezug_prozent = bezug/verbrauch
	erfolg_bezug_prozent = 1
except:
	erfolg_bezug_prozent = 0
#Ausgabe
print("Eigenverbrauch: " + str(eigenverbrauch))
print("Produktion: " + str(produktion))
print("Bezug: " + str(bezug))
print("Einspeisung: " + str(einspeisung))
print("Verbrauch: " + str(verbrauch))

#In influxdb schreiben
json_body = [
	{
		"measurement": "Summen_Jahr",
		"fields": {
			"Eigenverbrauch": eigenverbrauch
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Jahr",
		"fields": {
			"Produktion": produktion
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Jahr",
		"fields": {
			"Bezug": bezug
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Jahr",
		"fields": {
			"Einspeisung": einspeisung
		}
	},
]
client.write_points(json_body)
json_body = [
	{
		"measurement": "Summen_Jahr",
		"fields": {
			"Verbrauch": verbrauch
		}
	},
]
client.write_points(json_body)

if erfolg_einspeisung_prozent == 1:
	json_body = [
		{
			"measurement": "Summen_Jahr",
			"fields": {
				"Einspeisung_Prozent": einspeisung_prozent
			}
		},
	]
	client.write_points(json_body)
if erfolg_bezug_prozent == 1:
	json_body = [
		{
			"measurement": "Summen_Jahr",
			"fields": {
				"Bezug_Prozent": bezug_prozent
			}
		},
	]
	client.write_points(json_body)
Bei den api skripten muss in Zeile 12 die Site ID und der API Key eingetragen werden.
Die Skripte sind nicht schön und man kann sie auch bestimmt noch optimieren, aber sie funktionieren.
Aber nun zu den Bildern:

Solaranzeige über den PC/raspi:
Solaranzeige PC.png
Und die Solaranzeige übers Handy:
Da die Datei zu groß ist, dass ich sie im Forum hochladen könnte findet ihr sie hier: http://jjk.bplaced.net/solaranzeige_handy.jpg
(alternativ die solaranzeige_handy.txt herunterladen und in solaranzeige_handy.jpg umbenennen.)


Die json-Dateien findet ihr im Anhang
Dateianhänge
solaredge_mobil.json
(65.01 KiB) 8-mal heruntergeladen
solaredge.json
(65.02 KiB) 13-mal heruntergeladen
solaranzeige_handy.txt
(1.1 MiB) 7-mal heruntergeladen

.n3
Beiträge: 9
Registriert: Mi 23. Dez 2020, 19:35
Hat sich bedankt: 2 Mal

Re: Dashboard für Solaredge Wechselrichter + Batterie (Raspi und Mobil)

Beitrag von .n3 »

Hey, das Dashboard gefällt mir schon sehr. Vielleicht kannst du mir bei den folgenden Fragen weiterhelfen:

1. Welche Batterie verwendest du? Geht es generell mit jeder?
2. Wenn ich es richtig sehe, dann beziehst du die Werte für die API Skripte aus dem Internet? Wieso? Die Daten sollten doch auch lokal vorliegen.
3. Wie kriegt man das ID und den API Key her?
4. Hast du vielleicht daran gedacht, Prognose und Wetterdaten einzubeziehen?

Benutzeravatar
jjk
Beiträge: 2
Registriert: Sa 12. Sep 2020, 16:55

Re: Dashboard für Solaredge Wechselrichter + Batterie (Raspi und Mobil)

Beitrag von jjk »

1. Ich verwende eine LG Resu 10. Sollte aber glaub ich mit jeder Batterie funktionieren
2. Ich habe diese Werte (außer die Produktion) nicht lokal gefunden. Könntest du mir einen Tipp geben, wo diese sind?
3. Wenn du auf deinem Solaredge Dashboard bist, ist der Link dazu z.B: monitoring.solaredge.com/solaredge-web/p/site/XXXXXXX/#/dashboard . Hier ist dann XXXXXXX die ID. Unter Admin -> Anlagenzugriff -> Zugriffssteuerung -> API-Zugriff bekommst du einen API-Key. Das geht aber nur, wenn du Admin bist.
4. Progrnose ist die Pink gestrichelte Linie. Die passt bei mir leider überhaupt nicht. Wetterdaten brauche ich nicht.

Antworten