Suggestions:
-make a prognosis on how much electricity you need (mean of last week’s consumption? or better last month?) for today and tomorrow
-add a switch to account for planned additional consumtion (e.g. running washing machine/dishwaher)
Ein neuer Thread wäre interessant. Ich arbeite an einigen der erwähnten Punkten und berechne z.B. meinen individuellen Tagesgrundverbrauch und gleiche es mit dem PV-Forecast ab, um eine Batterieladung zu steuern. Dabei beachte ich immer die Zeiten zw. 8:00 und 18:00 bzw. 18:00 und 8:00, um eine Batterieladung vor den Spitzenstunden zu steuern. Eine Berechnung der Kosten “sofort laden” oder “Netzbezug bis zur gewünschten Uhrzeit” ist damit auch möglich. Alles noch “work-in-progress”, aber vielleicht besser in einem neuem Thread.
Hier mal einer meiner Sensoren, der des Restverbrauch anhand von Wochentagen und 24h-Arrays mit den kWh-Verbräuchen ermöglicht, jeweils immer bis nächster Tag 8:00 (und als Attribut ‘tomorrow’ übernächster Tag bis 8:00).
(bin Amateur, habe es zusammen gegoogelt und ChatGPT arbeiten lassen.
Ggf. stelle ich mein ganzes Skript mal hier rein, muss aber erst etwas aufräumen)
template:
- sensor:
- name: batteryload_required_energy
unique_id: batteryload_required_energy
unit_of_measurement: "kWh"
icon: mdi:home-lightning-bolt
state: >-
{% set werte_montag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_dienstag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_mittwoch = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_donnerstag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_freitag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_samstag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_sonntag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{# Bestimme den aktuellen Wochentag: 0 = Montag, 6 = Sonntag #}
{% set tag = now().weekday() %}
{% set naechster_tag = (tag + 1) % 7 %}
{# Wähle das richtige Array basierend auf dem Wochentag #}
{% set werte_aktuell = {
0: werte_montag,
1: werte_dienstag,
2: werte_mittwoch,
3: werte_donnerstag,
4: werte_freitag,
5: werte_samstag,
6: werte_sonntag
}[tag] %}
{# Wähle das Array für den nächsten Tag #}
{% set werte_naechster = {
0: werte_montag,
1: werte_dienstag,
2: werte_mittwoch,
3: werte_donnerstag,
4: werte_freitag,
5: werte_samstag,
6: werte_sonntag
}[naechster_tag] %}
{# Aktuelle Zeit in timestamp #}
{% set aktuelle_zeit = as_timestamp(now()) %}
{% set aktuelle_stunde = now().hour %}
{% set aktuelle_minute = now().minute %}
{% set ziel_stunde = 8 | int %}
{% set ziel_minute = 0| int %}
{# Berechne den anteiligen Verbrauch der aktuellen Stunde #}
{% set anteil_aktuell = werte_aktuell[aktuelle_stunde] * (1 - (aktuelle_minute / 60)) %}
{# Berechne den Verbrauch von jetzt bis zur Zielzeit #}
{% if (aktuelle_stunde == ziel_stunde and aktuelle_minute == ziel_minute) %}
{% set gesamtverbrauch = 0 %}
{% elif aktuelle_stunde == ziel_stunde and aktuelle_minute < ziel_minute %}
{% set anteil_aktuell = werte_aktuell[aktuelle_stunde] * (((ziel_minute-aktuelle_minute) / 60)) %}
{% set gesamtverbrauch = anteil_aktuell %}
{% elif aktuelle_stunde < ziel_stunde %}
{# Summiere von aktueller Stunde bis zur Zielstunde innerhalb des gleichen Tages #}
{% set summe = werte_aktuell[aktuelle_stunde + 1:ziel_stunde] | sum %}
{# Addiere den anteiligen Verbrauch der aktuellen Stunde #}
{% set gesamtverbrauch = anteil_aktuell + summe %}
{# Addiere den anteiligen Verbrauch der Zielminute #}
{% set gesamtverbrauch = gesamtverbrauch + (werte_aktuell[ziel_stunde] * (ziel_minute / 60)) %}
{% else %}
{# Summiere von aktueller Stunde bis Ende des aktuellen Tages #}
{% set summe_heute = werte_aktuell[aktuelle_stunde + 1:24] | sum %}
{# Summiere von 0 Uhr bis zur Zielstunde des nächsten Tages #}
{% set summe_morgen = werte_naechster[0:ziel_stunde] | sum %}
{# Addiere beide Summen #}
{% set gesamtverbrauch = anteil_aktuell + summe_heute + summe_morgen %}
{% endif %}
{% set puffer = (states("input_number.batteryload_buffer_energy") | float(0)) %} {# Puffer kWh #}
{{ gesamtverbrauch + puffer }}
attributes:
tomorrow: >
{% set werte_montag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_dienstag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_mittwoch = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_donnerstag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_freitag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_samstag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% set werte_sonntag = [0.6, 0.6, 0.6, 0.2, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.6, 0.6, 0.2, 0.2, 0.2, 0.6] %}
{% if now().hour>=8 -%}
{% set von = (now().replace(hour=8, minute=0, second=0, microsecond=0) + timedelta(days=1)) %}
{%- elif now().hour<8 -%}
{% set von = (now().replace(hour=8, minute=0, second=0, microsecond=0) + timedelta(days=0)) %}
{%- endif %}
{# Bestimme den aktuellen Wochentag: 0 = Montag, 6 = Sonntag #}
{% set tag = von.weekday() %}
{% set naechster_tag = (tag + 1) % 7 %}
{# Wähle das richtige Array basierend auf dem Wochentag #}
{% set werte_aktuell = {
0: werte_montag,
1: werte_dienstag,
2: werte_mittwoch,
3: werte_donnerstag,
4: werte_freitag,
5: werte_samstag,
6: werte_sonntag
}[tag] %}
{# Wähle das Array für den nächsten Tag #}
{% set werte_naechster = {
0: werte_montag,
1: werte_dienstag,
2: werte_mittwoch,
3: werte_donnerstag,
4: werte_freitag,
5: werte_samstag,
6: werte_sonntag
}[naechster_tag] %}
{# Stunde und Minute gleich bei von/bis#}
{% set stunde = von.hour %}
{% set minute = von.minute %}
{# Berechne den anteiligen Verbrauch der aktuellen Stunde #}
{% set anteil1 = werte_aktuell[stunde] * (1 - (minute / 60)) %}
{% set summe1 = werte_aktuell[stunde + 1:24] | sum %}
{% set summe2 = werte_naechster[0:stunde] | sum %}
{% set anteil2 = werte_naechster[stunde] * ((minute / 60)) %}
{% set gesamtverbrauch = anteil1 + summe1+ summe2 + anteil2 %}
{{ gesamtverbrauch }}
input_number:
batteryload_buffer_load:
name: "Batterieladung: Zusatzenergie Laden"
min: 0
max: 10
step: 0.5
unit_of_measurement: "kWh"
icon: mdi:battery-plus