So sieht das ganze bei mir zum Schluss im Grafana-Dashboard aus: Um die Daten zu holen, verwende ich Python, da ich zu dem Zeitpunkt, als ich die Skripte geschrieben habe noch kein PHP konnte. Mit PHP ist das natürlich auch möglich.
Anleitung:
0. API-Key und ID holen
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.
1. Module installieren
Code: Alles auswählen
sudo pip3 install influxdb
sudo pip3 install requests
Folgendermaßen sehen meine Skripte aus:
Skript für täglich:
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)
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)
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)
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)
Sollten die Daten auf einer entfernten Influx Datenbank gespeichert werden, müssen in Zeile 5 und 6 hierzu die Zugangsdaten eingetragen werden.
Die Dateien können nun in einem beliebigen Ordner abgespeichert werden. Zum Beispiel in /home/pi/scripts/solaredge/api.py
Man kann natürlich noch viel mehr Daten auslesen. Dafür muss man aber das Skript etwas bearbeiten. Die vollständige API-Beschreibung von Solaredge befindet sich dazu hier: https://www.solaredge.com/sites/default ... ng_api.pdf
3. Cronjobs anlegen
Die Skripte sollen natürlich regelmäßig laufen. Hierzu verwende ich cron. Öffne die Datei /etc/crontab mit root-Rechten, zum Beispiel:
Code: Alles auswählen
sudo nano /etc/crontab
Code: Alles auswählen
*/15 * * * * pi python3 /home/pi/scripts/solaredge/api.py
*/30 * * * * pi python3 /home/pi/scripts/solaredge/api_monat.py
*/30 * * * * pi python3 /home/pi/scripts/solaredge/api_jahr.py
*/30 * * * * pi python3 /home/pi/scripts/solaredge/api_woche.py
4*24+3*2*24=240 Aufrufe am Tag.
4. Spezialfall Docker:
Es macht , denke ich, eher weniger Sinn, die Skripte im Docker-Container auszuführen. Also würde ich vorschlagen, sie außerhalb auszuführen. Hierzu muss beim start des Containers noch der Port der Datenbank nach außen geleitet werden, also:
Code: Alles auswählen
docker run \
-d \
-e USER_ID="99" \
-e GROUP_ID="100" \
-e TIMEZONE="Europe/Berlin" \
-e UPDATE="yes" \
-e MOSQUITTO="yes" \
-e INFLUXDB="yes" \
-p 3000:3000 \
-p 1883:1883 \
-p 8080:80 \
-p 8086:8086\
-v {SOLARANZEIGE_STORAGE}:/solaranzeige \
-v {INFLUXDB_STORAGE}:/var/lib/influxdb \
-v {GRAFANA_STORAGE}:/var/lib/grafana \
-v {PVFORECAST_STORAGE}:/pvforecast \
-v {WWW_STORAGE}:/var/www \
--name=Solaranzeige \
--restart unless-stopped \
--tmpfs /tmp \
--tmpfs /var/log \
takealug/solaranzeige:tag
Mit dem Docker Container habe ich nichts getestet, da ich keine Solaranzeige im Docker habe.
Ich hoffe, jetzt habe ich alles aufgeschrieben. Ist doch etwas länger geworden, als ich beim Schreiben des Titels gedacht hatte.Würde mich über Rückmeldungen freuen.