NEWS
Hausspeicher laden, dynamisch, tibberlink, Scripte
-
@arteck dann ist es ja gut, wenn du das schon vorher so gemacht hast, ich habe ja auch nur geschrieben inwiefern dein Script betroffen ist, dass ich das nicht weiss nicht mehr und nicht weniger.
-
@arteck Hallo! Gibt es eventuell auch eine Version die mit Awattar bzw. Huawei (WR+Batterie) zusammenarbeitet?? Danke!
-
@james4711 nope.. und von mir wird es keine geben..da es schon ein krampf war SMA da einzubinden so dass es funktioniert
-
So ich habe mich mal hingesetzt und anhand des PV Forecast Adapters und dem "Das Wetter" Adapter ein Javascript geschrieben, daß anhand der Bewölkung die PV Forecast optimiert. Bei 100% Bewölkung habe ich einen Korrekturfaktor von 0.2 angenommen.
Da ich bei mir viel mit Nebel zu kämpfen habe liegen die PV Vorhersage Adapter alle weit weit weg vom eigentlichen Ertrag, heute wurden 10 vorausgesagt aktuell sind wir bei 2.5, gestern waren es laut voraussage 15 das optimierte kam auf 10.4, reell waren es 10,2. Vielleicht kann es ja irgendjemand brauchen, es werden nur 2 Werte generiert, Summe today und summe tomorrow.
const minOutputFactor = 0.2; // Mindestprozentsatz an Leistung bei 100% Wolkenbedeckung // Funktion zur Erstellung von Datenpunkten, falls sie noch nicht existieren function createStateIfNotExists(id, initialValue, callback) { if (!existsState(id)) { createState(id, initialValue, { type: 'number', unit: 'kWh', read: true, write: true }, callback); } else { callback(); } } // Funktion zur Berechnung und Anpassung der PV-Forecasts basierend auf Wolkenbedeckungswerten function calculatePvForecast() { try { console.log('--- Sofortige Berechnung der PV Forecasts beim Skriptstart ---'); let totalAdjustedPvToday = 0; let totalAdjustedPvTomorrow = 0; // Berechnung für heute (Stunden 5 bis 21) for (let hour = 5; hour <= 21; hour++) { const hourString = hour.toString().padStart(2, '0'); const pvForecastToday = getState(`pvforecast.0.summary.energy.hoursToday.${hourString}:00:00`).val; const cloudsToday = getState(`daswetter.0.NextHours.Location_1.Day_1.Hour_${hour}.clouds_value`).val; const adjustedPvToday = (pvForecastToday * Math.max(minOutputFactor, (1 - cloudsToday / 100))).toFixed(2); totalAdjustedPvToday += parseFloat(adjustedPvToday); console.log(`Heute, Stunde ${hour}: Wolkenbedeckung = ${cloudsToday}%, Originaler PV-Wert = ${pvForecastToday} kWh, Angepasster PV-Wert = ${adjustedPvToday} kWh`); } // Speicherung des Gesamtwertes für heute createStateIfNotExists("0_userdata.0.PV-Forecast-optimiert.Heute_Gesamt", 0, () => { setState(`0_userdata.0.PV-Forecast-optimiert.Heute_Gesamt`, parseFloat(totalAdjustedPvToday.toFixed(2))); console.log(`Gesamter angepasster PV-Wert für heute: ${totalAdjustedPvToday.toFixed(2)} kWh`); }); // Berechnung für morgen (Stunden 5 bis 21) for (let hour = 5; hour <= 21; hour++) { const hourString = hour.toString().padStart(2, '0'); const pvForecastTomorrow = getState(`pvforecast.0.summary.energy.hoursTomorrow.${hourString}:00:00`).val; const cloudsTomorrow = getState(`daswetter.0.NextHours.Location_1.Day_2.Hour_${hour}.clouds_value`).val; const adjustedPvTomorrow = (pvForecastTomorrow * Math.max(minOutputFactor, (1 - cloudsTomorrow / 100))).toFixed(2); totalAdjustedPvTomorrow += parseFloat(adjustedPvTomorrow); console.log(`Morgen, Stunde ${hour}: Wolkenbedeckung = ${cloudsTomorrow}%, Originaler PV-Wert = ${pvForecastTomorrow} kWh, Angepasster PV-Wert = ${adjustedPvTomorrow} kWh`); } // Speicherung des Gesamtwertes für morgen createStateIfNotExists("0_userdata.0.PV-Forecast-optimiert.Morgen_Gesamt", 0, () => { setState(`0_userdata.0.PV-Forecast-optimiert.Morgen_Gesamt`, parseFloat(totalAdjustedPvTomorrow.toFixed(2))); console.log(`Gesamter angepasster PV-Wert für morgen: ${totalAdjustedPvTomorrow.toFixed(2)} kWh`); }); } catch (error) { console.warn(`Fehler in der calculatePvForecast-Funktion: ${error.message}`); console.warn(error.stack); } } // Sofortige Ausführung der Berechnung beim Start des Skripts calculatePvForecast(); // Geplante Ausführungen zur Aktualisierung der PV-Forecasts schedule("5 0 * * *", calculatePvForecast); // Tägliche Ausführung um 0:05 Uhr schedule("5 5 * * *", calculatePvForecast); // Tägliche Ausführung um 5:05 Uhr schedule("5 12 * * *", calculatePvForecast); // Tägliche Ausführung um 12:05 Uhr
-
interessantes Skript, danke! Werd ich mal bei mir testen.
-
@arteck Frage vom dummy
bevor ich in die falsche Richtung laufe... sehe ich das Richtig, dass ich alle vier scripts benötige und die darin vorhandenen Datenpunkte entsprechend meines setups (Victron,Pylontech,Tibber,Solcast) anpassen muss? Die View dann entsprechend auch (optional aber sehr hilfreich).
-
@babl Da wir hier leider auch viel Nebel haben, habe ich das Skript auch mal installiert. PV Vorhersage für Heute war 10,4 kWh, das Skript hat 7,06 kWh prognostiziert, tatsächlich waren es 6,3 kWh. Die Richtung stimmt schon mal. Ich werde das in jedem Fall weiter laufen lassen und sehen wie es sich weiter verhält.
DANKE für das Skript -
@babl würdest du deine letzte PV-forecast Version mit Beschreibung nochmal hochladen.
So wie ich das verstanden habe hast du ein paar Änderungen später vorgenommen, die ich manuell nachziehen müsste.
Vielen Dank für deine Mühen!LG Stephan
-
@bolliy du musst nur den pv forecast wert mit dem pv forecast wert des scriptes austauschen wenn du das meinst. ansonsten habe ich nichts vorgenommen, die aktuelle version ist immer noch im post bereich 108 zu finden
-
@babl Ich habe mal all deine Scripts zum dynamischen Laden auf meine Landschaft (Victron/Pylontech) angepasst und bin jetzt mächtig gespannt wie das läuft wenn ich ab 1.Dezember den Strom von Tibber bekomme. Werde berichten und/oder ggfs. nochmal um Unterstützung bitten . An der Stelle schon mal Vielen Dank für die tolle Arbeit
-
Hallo,
hat schon jemand das Script für einen Senec V3 angepasst und würde seine Versionen hier zur Verfügung stellen, ich bearbeite die Scripte gerade nach meinem Verständnis und werde weiter berichten.
Vielen Dank für eure Antworten.
VG Mike