Hi,
ich möchte gerne für meine PV-Anlage, die morgens und abends ab einem bestimmten Sonnenstand verschattet ist, die Dämpfungsfaktoren automatisiert anlegen lassen. Für die Vorhersage nutze ich die Integration Solcast PV Forecast. In der Doku steht, dass man mit solcast_solar.set_dampening die Dämpfungsfakoren setzen kann. Das klappt über die Entwicklerwerkzeuge manuell auch wunderbar.
Um den Sonnenstand zu erhalten, habe ich mir folgendes Pythonskript geschrieben und wollte das mittels der Intergration pyscripts einbinden:
#!/usr/bin/env python3
import datetime
from astral import LocationInfo
from astral.sun import elevation
from zoneinfo import ZoneInfo
@service
def calculate_damping_factors():
# Konfiguration: Beispielstandort Berlin
city = LocationInfo("Berlin", "Germany", "Europe/Berlin", XX.XXXX, YY.YYYY)
# Datum: Morgen
date = datetime.date.today() + datetime.timedelta(days=1)
damp_factors = []
print(f"Berechnung der Sonnenhöhe für {city.name} am {date}:\n")
# Für jede Stunde des Tages:
for i in range(48):
# Erzeuge ein zeitzonenbewusstes datetime-Objekt
hour = i//2
minutes = (i%2)*30
time = datetime.datetime(date.year, date.month, date.day, hour, minutes, 0, tzinfo=ZoneInfo("Europe/Berlin"))
# Berechne die Sonnenhöhe in Grad
elev = elevation(city.observer, time)
# Setze den Schwellenwert: Morgens (< 12 Uhr) 22°; Abends (>= 12 Uhr) 18°
threshold = 22 if hour < 12 else 18
# Falls die Sonnenhöhe unter dem Schwellenwert liegt, Dämpfungsfaktor 0.35, sonst 1.0
damp_factor = 0.35 if elev < threshold else 1.0
damp_factors.append(str(damp_factor))
#log.info(f"Zeit {hour:02d}:{minutes:02d}: elevation = {elev:.1f}°, threshold = {threshold}°, damp_factor = {damp_factor}")
# Erstelle den finalen String der Dämpfungsfaktoren
damp_factor_string = ",".join(damp_factors)
log.info(f"damp_factor_string={damp_factor_string}")
#event.fire("solcast_solar.set_dampening", data={"damp_factor": damp_factor_string})
#hass.bus.fire("solcast_solar.set_dampening", {"damp_factor": damp_factor_string})
hass.bus.fire("solcast_solar.set_dampening", {"damp_factor": damp_factor_string, "site": "all"})
Das Skript funktioniert soweit, es wird auch brav im log der vollständige damp_factor_string mit 48 Einträgen ausgegeben, aber leider wird die Datei solcast-dampening.json nicht aktualisiert.
Jemand eine Idee, woran es liegen könnte? Ich bin auch nicht auf die Pythonlösung angewiesen, wenn das auch mit HA-eigenen Boardmitteln geht, wäre mir die Lösung auch recht.