diff --git a/ha-configs/151/automations.yaml b/ha-configs/151/automations.yaml index 10d5d63..4753dee 100644 --- a/ha-configs/151/automations.yaml +++ b/ha-configs/151/automations.yaml @@ -14,9 +14,16 @@ Bateria: {{ states(''sensor.inverter_deye_battery'') }}% ' + mode: single -- alias: Solcast G12W - Bardzo pochmurnie (Pn-Czw) - description: Ładowanie 22:00-06:00 + 13:00-15:00 gdy < 3 kWh +- alias: Solcast G12W - Ustaw ładowanie nocne + id: g12w_ustaw_ladowanie_nocne + description: > + 20:30 Pn-Czw: Solcast-based target SOC dla nocnego ładowania 22:00-06:00. + target_soc = min(100, max(40, (zużycie_16h - pv_jutro) / 143.36 + 10)). + Jeśli prognoza < 3 kWh: włącza też Program 4 (13:00-15:00 ładowanie dzienne). + Brak warunku SOC - zawsze konfiguruje programy falownika. + Pojemność: 14336 Wh (280Ah * 51.2V LFP). trigger: - platform: time at: '20:30:00' @@ -27,12 +34,6 @@ - tue - wed - thu - - condition: numeric_state - entity_id: sensor.solcast_pv_forecast_prognoza_na_jutro - below: 3 - - condition: numeric_state - entity_id: sensor.inverter_deye_battery - below: 95 action: - service: switch.turn_on target: @@ -62,8 +63,12 @@ target: entity_id: number.inverter_deye_program_1_soc data: - value: 100 - # Program 2: kontynuacja nocnego ładowania + value: > + {%- set pv_wh = states('sensor.solcast_pv_forecast_prognoza_na_jutro') | float(0) * 1000 -%} + {%- set load_w = [states('sensor.inverter_deye_load_power') | int(0), 500] | max -%} + {%- set net_wh = [load_w * 16 - pv_wh, 0] | max -%} + {{ [[net_wh / 143.36 + 10, 40] | max, 100] | min | int }} + # Program 2: 00:00 - kontynuacja - service: time.set_value target: entity_id: time.inverter_deye_program_2_time @@ -78,7 +83,11 @@ target: entity_id: number.inverter_deye_program_2_soc data: - value: 100 + value: > + {%- set pv_wh = states('sensor.solcast_pv_forecast_prognoza_na_jutro') | float(0) * 1000 -%} + {%- set load_w = [states('sensor.inverter_deye_load_power') | int(0), 500] | max -%} + {%- set net_wh = [load_w * 16 - pv_wh, 0] | max -%} + {{ [[net_wh / 143.36 + 10, 40] | max, 100] | min | int }} # Program 3: 06:00 - koniec nocnego ładowania - service: time.set_value target: @@ -95,23 +104,45 @@ entity_id: number.inverter_deye_program_3_soc data: value: 15 - # Program 4: 13:00 - start dziennego ładowania - - service: time.set_value - target: - entity_id: time.inverter_deye_program_4_time - data: - time: '13:00:00' - - service: select.select_option - target: - entity_id: select.inverter_deye_program_4_charging - data: - option: Grid - - service: number.set_value - target: - entity_id: number.inverter_deye_program_4_soc - data: - value: 100 - # Program 5: 15:00 - koniec dziennego ładowania + # Program 4: Grid jeśli bardzo pochmurnie (<3 kWh), Disabled jeśli jest PV + - choose: + - conditions: + - condition: numeric_state + entity_id: sensor.solcast_pv_forecast_prognoza_na_jutro + below: 3 + sequence: + - service: time.set_value + target: + entity_id: time.inverter_deye_program_4_time + data: + time: '13:00:00' + - service: select.select_option + target: + entity_id: select.inverter_deye_program_4_charging + data: + option: Grid + - service: number.set_value + target: + entity_id: number.inverter_deye_program_4_soc + data: + value: 100 + default: + - service: time.set_value + target: + entity_id: time.inverter_deye_program_4_time + data: + time: '13:00:00' + - service: select.select_option + target: + entity_id: select.inverter_deye_program_4_charging + data: + option: Disabled + - service: number.set_value + target: + entity_id: number.inverter_deye_program_4_soc + data: + value: 15 + # Program 5: 15:00 - zawsze Disabled - service: time.set_value target: entity_id: time.inverter_deye_program_5_time @@ -127,7 +158,7 @@ entity_id: number.inverter_deye_program_5_soc data: value: 15 - # Program 6: 22:00 - taki sam jak Program 1 (żeby nie blokował) + # Program 6: 22:00 - duplikat Programu 1 (zabezpieczenie) - service: time.set_value target: entity_id: time.inverter_deye_program_6_time @@ -142,144 +173,25 @@ target: entity_id: number.inverter_deye_program_6_soc data: - value: 100 + value: > + {%- set pv_wh = states('sensor.solcast_pv_forecast_prognoza_na_jutro') | float(0) * 1000 -%} + {%- set load_w = [states('sensor.inverter_deye_load_power') | int(0), 500] | max -%} + {%- set net_wh = [load_w * 16 - pv_wh, 0] | max -%} + {{ [[net_wh / 143.36 + 10, 40] | max, 100] | min | int }} - service: notify.persistent_notification data: - title: '🌧️ G12W: Bardzo pochmurnie!' - message: 'Prognoza: {{ states(''sensor.solcast_pv_forecast_prognoza_na_jutro'') }} kWh. Ładowanie 22:00-06:00 (80A) + 13:00-15:00 (100A)!' - -- alias: Solcast G12W - Pochmurnie (Pn-Czw) - description: Ładowanie 22:00-06:00 gdy >= 3 kWh - trigger: - - platform: time - at: '20:30:00' - condition: - - condition: time - weekday: - - mon - - tue - - wed - - thu - - condition: numeric_state - entity_id: sensor.solcast_pv_forecast_prognoza_na_jutro - above: 3 - - condition: numeric_state - entity_id: sensor.inverter_deye_battery - below: 95 - action: - - service: switch.turn_on - target: - entity_id: switch.inverter_deye_battery_grid_charging - - service: select.select_option - target: - entity_id: select.inverter_deye_energy_pattern - data: - option: Load First - - service: number.set_value - target: - entity_id: number.inverter_deye_battery_grid_charging_current - data: - value: 80 - # Program 1: 22:00 - start nocnego ładowania - - service: time.set_value - target: - entity_id: time.inverter_deye_program_1_time - data: - time: '22:00:00' - - service: select.select_option - target: - entity_id: select.inverter_deye_program_1_charging - data: - option: Grid - - service: number.set_value - target: - entity_id: number.inverter_deye_program_1_soc - data: - value: 100 - # Program 2: kontynuacja - - service: time.set_value - target: - entity_id: time.inverter_deye_program_2_time - data: - time: '00:00:00' - - service: select.select_option - target: - entity_id: select.inverter_deye_program_2_charging - data: - option: Grid - - service: number.set_value - target: - entity_id: number.inverter_deye_program_2_soc - data: - value: 100 - # Program 3: 06:00 - koniec - - service: time.set_value - target: - entity_id: time.inverter_deye_program_3_time - data: - time: '06:00:00' - - service: select.select_option - target: - entity_id: select.inverter_deye_program_3_charging - data: - option: Disabled - - service: number.set_value - target: - entity_id: number.inverter_deye_program_3_soc - data: - value: 15 - # Program 4: 13:00 - dzienne disabled (słonecznie) - - service: time.set_value - target: - entity_id: time.inverter_deye_program_4_time - data: - time: '13:00:00' - - service: select.select_option - target: - entity_id: select.inverter_deye_program_4_charging - data: - option: Disabled - - service: number.set_value - target: - entity_id: number.inverter_deye_program_4_soc - data: - value: 15 - # Program 5: 15:00 - - service: time.set_value - target: - entity_id: time.inverter_deye_program_5_time - data: - time: '15:00:00' - - service: select.select_option - target: - entity_id: select.inverter_deye_program_5_charging - data: - option: Disabled - - service: number.set_value - target: - entity_id: number.inverter_deye_program_5_soc - data: - value: 15 - # Program 6: 22:00 - taki sam jak Program 1 - - service: time.set_value - target: - entity_id: time.inverter_deye_program_6_time - data: - time: '22:00:00' - - service: select.select_option - target: - entity_id: select.inverter_deye_program_6_charging - data: - option: Grid - - service: number.set_value - target: - entity_id: number.inverter_deye_program_6_soc - data: - value: 100 - - service: notify.persistent_notification - data: - title: '⛅ G12W: Pochmurnie' - message: 'Prognoza: {{ states(''sensor.solcast_pv_forecast_prognoza_na_jutro'') }} kWh. Ładowanie 22:00-06:00 (80A).' + title: '🌙 G12W: Nocne ładowanie ustawione' + message: > + {%- set pv_kwh = states('sensor.solcast_pv_forecast_prognoza_na_jutro') | float(0) -%} + {%- set pv_wh = pv_kwh * 1000 -%} + {%- set load_w = [states('sensor.inverter_deye_load_power') | int(0), 500] | max -%} + {%- set net_wh = [load_w * 16 - pv_wh, 0] | max -%} + {%- set target = [[net_wh / 143.36 + 10, 40] | max, 100] | min | int -%} + {%- set soc = states('sensor.inverter_deye_battery') | int(0) -%} + Jutro: {{ pv_kwh }} kWh PV, zużycie ~{{ (load_w * 16 / 1000) | round(1) }} kWh. + Target SOC: {{ target }}% (SOC teraz: {{ soc }}%). + {{ '⛈️ Dzienne ładowanie 13-15h WŁĄCZONE' if pv_kwh < 3 else '☀️ Dzienne ładowanie z PV (bez sieci)' }} + mode: single - alias: Solcast G12W - Piątek wyłącz (sobota tania) description: Piątek wieczór - wyłącz ładowanie bo sobota jest tania cała doba @@ -303,6 +215,7 @@ data: title: '🎉 G12W: Weekend startuje!' message: Sobota i niedziela = tania energia całą dobę. + mode: single - alias: Solcast G12W - Sobota bez zmian description: Sobota - niedziela też jest tania @@ -318,9 +231,13 @@ data: title: '🎉 G12W: Niedziela też tania!' message: Niedziela = tania energia całą dobę. + mode: single - alias: Solcast G12W - Niedziela ładowanie na poniedziałek - description: Niedziela 20:30 - ustaw ładowanie 22:00-06:00 na poniedziałek + id: g12w_niedziela_ladowanie + description: > + Niedziela 20:30 - Solcast-based target SOC dla nocnego ładowania na poniedziałek. + Używa tej samej formuły co Pn-Czw: target = min(100, max(40, (zużycie_16h - pv_jutro)/143.36 + 10)). trigger: - platform: time at: '20:30:00' @@ -357,7 +274,11 @@ target: entity_id: number.inverter_deye_program_1_soc data: - value: 100 + value: > + {%- set pv_wh = states('sensor.solcast_pv_forecast_prognoza_na_jutro') | float(0) * 1000 -%} + {%- set load_w = [states('sensor.inverter_deye_load_power') | int(0), 500] | max -%} + {%- set net_wh = [load_w * 16 - pv_wh, 0] | max -%} + {{ [[net_wh / 143.36 + 10, 40] | max, 100] | min | int }} # Program 2: 00:00 - service: time.set_value target: @@ -373,8 +294,12 @@ target: entity_id: number.inverter_deye_program_2_soc data: - value: 100 - # Program 3: 06:00 + value: > + {%- set pv_wh = states('sensor.solcast_pv_forecast_prognoza_na_jutro') | float(0) * 1000 -%} + {%- set load_w = [states('sensor.inverter_deye_load_power') | int(0), 500] | max -%} + {%- set net_wh = [load_w * 16 - pv_wh, 0] | max -%} + {{ [[net_wh / 143.36 + 10, 40] | max, 100] | min | int }} + # Program 3: 06:00 - koniec nocnego - service: time.set_value target: entity_id: time.inverter_deye_program_3_time @@ -390,17 +315,45 @@ entity_id: number.inverter_deye_program_3_soc data: value: 15 - # Program 4,5 - dzienne disabled - - service: time.set_value - target: - entity_id: time.inverter_deye_program_4_time - data: - time: '13:00:00' - - service: select.select_option - target: - entity_id: select.inverter_deye_program_4_charging - data: - option: Disabled + # Program 4: Grid jeśli bardzo pochmurnie, Disabled jeśli jest PV + - choose: + - conditions: + - condition: numeric_state + entity_id: sensor.solcast_pv_forecast_prognoza_na_jutro + below: 3 + sequence: + - service: time.set_value + target: + entity_id: time.inverter_deye_program_4_time + data: + time: '13:00:00' + - service: select.select_option + target: + entity_id: select.inverter_deye_program_4_charging + data: + option: Grid + - service: number.set_value + target: + entity_id: number.inverter_deye_program_4_soc + data: + value: 100 + default: + - service: time.set_value + target: + entity_id: time.inverter_deye_program_4_time + data: + time: '13:00:00' + - service: select.select_option + target: + entity_id: select.inverter_deye_program_4_charging + data: + option: Disabled + - service: number.set_value + target: + entity_id: number.inverter_deye_program_4_soc + data: + value: 15 + # Program 5: 15:00 Disabled - service: time.set_value target: entity_id: time.inverter_deye_program_5_time @@ -411,7 +364,12 @@ entity_id: select.inverter_deye_program_5_charging data: option: Disabled - # Program 6: 22:00 - tak samo jak 1 + - service: number.set_value + target: + entity_id: number.inverter_deye_program_5_soc + data: + value: 15 + # Program 6: 22:00 - duplikat Programu 1 - service: time.set_value target: entity_id: time.inverter_deye_program_6_time @@ -426,21 +384,29 @@ target: entity_id: number.inverter_deye_program_6_soc data: - value: 100 + value: > + {%- set pv_wh = states('sensor.solcast_pv_forecast_prognoza_na_jutro') | float(0) * 1000 -%} + {%- set load_w = [states('sensor.inverter_deye_load_power') | int(0), 500] | max -%} + {%- set net_wh = [load_w * 16 - pv_wh, 0] | max -%} + {{ [[net_wh / 143.36 + 10, 40] | max, 100] | min | int }} - service: notify.persistent_notification data: title: '🌙 G12W: Ładowanie na poniedziałek' - message: 'Bateria: {{ states(''sensor.inverter_deye_battery'') }}%. Ładowanie 22:00-06:00 (80A).' + message: > + {%- set pv_kwh = states('sensor.solcast_pv_forecast_prognoza_na_jutro') | float(0) -%} + {%- set load_w = [states('sensor.inverter_deye_load_power') | int(0), 500] | max -%} + {%- set net_wh = [load_w * 16 - pv_kwh * 1000, 0] | max -%} + {%- set target = [[net_wh / 143.36 + 10, 40] | max, 100] | min | int -%} + {%- set soc = states('sensor.inverter_deye_battery') | int(0) -%} + Jutro: {{ pv_kwh }} kWh PV. Target SOC: {{ target }}% (teraz: {{ soc }}%). + mode: single - alias: Solcast G12W - Wyłącz ładowanie 06:00 description: Wyłącza ładowanie po taniej strefie nocnej trigger: - platform: time at: '06:00:00' - condition: - - condition: state - entity_id: switch.inverter_deye_battery_grid_charging - state: 'on' + condition: [] action: - service: switch.turn_off target: @@ -450,10 +416,16 @@ entity_id: select.inverter_deye_energy_pattern data: option: Battery First + - service: number.set_value + target: + entity_id: number.inverter_deye_battery_max_charging_current + data: + value: 100 - service: notify.persistent_notification data: title: '🌅 G12W: Koniec ładowania nocnego' - message: 'SOC: {{ states(''sensor.inverter_deye_battery'') }}%' + message: 'SOC: {{ states(''sensor.inverter_deye_battery'') }}%. Max charging current przywrócony: 100A.' + mode: single - alias: Solcast G12W - Włącz ładowanie dzienne 13:00 id: g12w_wlacz_ladowanie_dzienne @@ -604,6 +576,7 @@ SOC: {{ soc }}%, target na 15:00: {{ target_soc }}%. PV 13-15h: {{ pv_13_15_wh | round(0) }} Wh, po 15:00: {{ pv_after_15_wh | round(0) }} Wh. Zużycie 15-22h: {{ (load_w * 7) | round(0) }} Wh. Brakuje: {{ missing_wh | round(0) }} Wh → {{ grid_a }}A z sieci. + mode: single - alias: Solcast G12W - Wyłącz ładowanie dzienne 15:00 description: Wyłącza ładowanie po taniej strefie dziennej, przywraca max prąd ładowania @@ -648,6 +621,7 @@ data: title: '🔋 G12W: Koniec ładowania dziennego' message: 'SOC: {{ states(''sensor.inverter_deye_battery'') }}%. Prąd max: 100A przywrócony.' + mode: single - alias: Solcast G12W - Raport poranny description: Status o 6:05