Dämpfungsfaktoren für Solcast automatisiert für den nächsten Tag aktualisieren

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.

Nach dem Lesen der Doku antworte ich mir dann mal selbst. :grimacing:

Mein Fehler war, dass ich keinen Event auslösen will, sondern ja einen Service nutzen will.
Mit der Zeile

service.call("solcast_solar", "set_dampening", damp_factor= damp_factor_string)

werden die Werte dann auch übernommen.

Danke für’s zuhören. :wink:

1 „Gefällt mir“