Newer
Older
homeassistant-infra / ha-configs / solcast_automations_g12w.yaml
# 🔋 Automatyzacje Solcast + Taryfa G12W
# Instalacja: 5.0 kWp, Żarki
# Taryfa: G12W (22:00-06:00 + 13:00-15:00 + weekendy całą dobę)

automation:
  # ============================================
  # INTELIGENTNE ŁADOWANIE - DNI POWSZEDNIE
  # ============================================
  
  - alias: "Solcast G12W - Bardzo pochmurnie (Pn-Pt)"
    description: "Maksymalne ładowanie gdy jutro < 3 kWh, dni powszednie"
    trigger:
      - platform: time
        at: "21:30:00"  # Wcześniej, żeby zdążyć przed 22:00
    
    condition:
      # Dni powszednie (Pn-Pt)
      - condition: time
        weekday:
          - mon
          - tue
          - wed
          - thu
          - fri
      
      # Bardzo mała produkcja jutro
      - condition: numeric_state
        entity_id: sensor.solcast_pv_forecast_prognoza_na_jutro
        below: 3
      
      # Bateria nie pełna
      - condition: numeric_state
        entity_id: sensor.inverter_deye_battery_soc
        below: 95
    
    action:
      # Włącz ładowanie z sieci
      - service: switch.turn_on
        target:
          entity_id: switch.inverter_deye_battery_grid_charging
      
      # Program 1: Start 22:00 (główne okno nocne)
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_1_charging
        data:
          option: "Grid"
      
      - service: time.set_value
        target:
          entity_id: time.inverter_deye_program_1_time
        data:
          time: "22:00:00"
      
      # Program 2: Start 13:00 (okno popołudniowe - doładowanie)
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_2_charging
        data:
          option: "Grid"
      
      - service: time.set_value
        target:
          entity_id: time.inverter_deye_program_2_time
        data:
          time: "13:00:00"
      
      # Program 3: Stop 15:00 (koniec okna popołudniowego)
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_3_charging
        data:
          option: "Disabled"
      
      - service: time.set_value
        target:
          entity_id: time.inverter_deye_program_3_time
        data:
          time: "15:00:00"
      
      # Program 4: Stop 07:00 (koniec okna nocnego)
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_4_charging
        data:
          option: "Disabled"
      
      - service: time.set_value
        target:
          entity_id: time.inverter_deye_program_4_time
        data:
          time: "06:00:00"
      
      # Powiadomienie
      - service: notify.persistent_notification
        data:
          title: "🌧️ Solcast G12W: Bardzo pochmurnie!"
          message: |
            Prognoza na jutro: {{ states('sensor.solcast_pv_forecast_prognoza_na_jutro') }} kWh
            
            ⚡ Pełne ładowanie z sieci:
            • 22:00-06:00 (9h nocne)
            • 13:00-15:00 (2h popołudniowe)
            
            🎯 Cel: 95% SOC
            💰 Taryfa: G12W (tania)

  - alias: "Solcast G12W - Pochmurnie (Pn-Pt)"
    description: "Ładuj do 80% gdy jutro 3-6 kWh, dni powszednie"
    trigger:
      - platform: time
        at: "21:30:00"
    
    condition:
      - condition: time
        weekday:
          - mon
          - tue
          - wed
          - thu
          - fri
      
      - condition: numeric_state
        entity_id: sensor.solcast_pv_forecast_prognoza_na_jutro
        above: 3
        below: 6
      
      - condition: numeric_state
        entity_id: sensor.inverter_deye_battery_soc
        below: 80
    
    action:
      - service: switch.turn_on
        target:
          entity_id: switch.inverter_deye_battery_grid_charging
      
      # Program 1: 22:00 Grid (tylko główne okno nocne)
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_1_charging
        data:
          option: "Grid"
      
      - service: time.set_value
        target:
          entity_id: time.inverter_deye_program_1_time
        data:
          time: "22:00:00"
      
      # Program 2: 07:00 Stop (koniec nocnego)
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_2_charging
        data:
          option: "Disabled"
      
      - service: time.set_value
        target:
          entity_id: time.inverter_deye_program_2_time
        data:
          time: "06:00:00"
      
      # Program 3: Disabled
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_3_charging
        data:
          option: "Disabled"
      
      - service: notify.persistent_notification
        data:
          title: "🌥️ Solcast G12W: Pochmurnie"
          message: |
            Prognoza: {{ states('sensor.solcast_pv_forecast_prognoza_na_jutro') }} kWh
            
            ⚡ Ładowanie 22:00-06:00
            🎯 Cel: 80% SOC
            💰 Oszczędność: pominięcie okna 13:00-15:00

  - alias: "Solcast G12W - Średnie nasłonecznienie (Pn-Pt)"
    description: "Ładuj do 60% gdy jutro 6-13 kWh"
    trigger:
      - platform: time
        at: "21:30:00"
    
    condition:
      - condition: time
        weekday:
          - mon
          - tue
          - wed
          - thu
          - fri
      
      - condition: numeric_state
        entity_id: sensor.solcast_pv_forecast_prognoza_na_jutro
        above: 6
        below: 13
      
      - condition: numeric_state
        entity_id: sensor.inverter_deye_battery_soc
        below: 60
    
    action:
      - service: switch.turn_on
        target:
          entity_id: switch.inverter_deye_battery_grid_charging
      
      # Program 1: 22:00 Grid
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_1_charging
        data:
          option: "Grid"
      
      - service: time.set_value
        target:
          entity_id: time.inverter_deye_program_1_time
        data:
          time: "22:00:00"
      
      # Program 2: 04:00 Stop (skrócone okno)
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_2_charging
        data:
          option: "Disabled"
      
      - service: time.set_value
        target:
          entity_id: time.inverter_deye_program_2_time
        data:
          time: "04:00:00"
      
      - service: notify.persistent_notification
        data:
          title: "⛅ Solcast G12W: Średnio"
          message: |
            Prognoza: {{ states('sensor.solcast_pv_forecast_prognoza_na_jutro') }} kWh
            
            ⚡ Ładowanie 22:00-04:00 (6h)
            🎯 Cel: 60% SOC

  - alias: "Solcast G12W - Słonecznie (Pn-Pt)"
    description: "Wyłącz ładowanie gdy jutro > 13 kWh"
    trigger:
      - platform: time
        at: "21:30:00"
    
    condition:
      - condition: time
        weekday:
          - mon
          - tue
          - wed
          - thu
          - fri
      
      - condition: numeric_state
        entity_id: sensor.solcast_pv_forecast_prognoza_na_jutro
        above: 13
      
      - condition: numeric_state
        entity_id: sensor.inverter_deye_battery_soc
        above: 30
    
    action:
      # Wyłącz ładowanie z sieci
      - service: switch.turn_off
        target:
          entity_id: switch.inverter_deye_battery_grid_charging
      
      # Wszystkie programy disabled
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_1_charging
        data:
          option: "Disabled"
      
      - service: notify.persistent_notification
        data:
          title: "☀️ Solcast G12W: Słonecznie!"
          message: |
            Prognoza: {{ states('sensor.solcast_pv_forecast_prognoza_na_jutro') }} kWh
            
            🚫 Ładowanie z sieci WYŁĄCZONE
            ☀️ Tylko PV!
            💰 Maksymalne oszczędności!

  # ============================================
  # WEEKENDY - CAŁA DOBA W TANIEJ TARYFIE
  # ============================================
  
  - alias: "Solcast G12W - Weekend pochmurnie"
    description: "Ładowanie w weekend (tania taryfa całą dobę)"
    trigger:
      - platform: time
        at: "21:30:00"
    
    condition:
      # Weekend (Sob-Nd)
      - condition: time
        weekday:
          - sat
          - sun
      
      # Mało słońca jutro
      - condition: numeric_state
        entity_id: sensor.solcast_pv_forecast_prognoza_na_jutro
        below: 6
      
      - condition: numeric_state
        entity_id: sensor.inverter_deye_battery_soc
        below: 80
    
    action:
      - service: switch.turn_on
        target:
          entity_id: switch.inverter_deye_battery_grid_charging
      
      # W weekend - ładuj rano przed szczytem PV (elastyczność!)
      # Program 1: 06:00 Grid (rano)
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_1_charging
        data:
          option: "Grid"
      
      - service: time.set_value
        target:
          entity_id: time.inverter_deye_program_1_time
        data:
          time: "06:00:00"
      
      # Program 2: 09:00 Stop (przed szczytem PV)
      - service: select.select_option
        target:
          entity_id: select.inverter_deye_program_2_charging
        data:
          option: "Disabled"
      
      - service: time.set_value
        target:
          entity_id: time.inverter_deye_program_2_time
        data:
          time: "09:00:00"
      
      - service: notify.persistent_notification
        data:
          title: "🌥️ Solcast G12W: Weekend"
          message: |
            Prognoza: {{ states('sensor.solcast_pv_forecast_prognoza_na_jutro') }} kWh
            
            ⚡ Ładowanie 06:00-09:00 (3h)
            💰 Weekend = taryfa nocna całą dobę!
            🎯 Cel: 80% SOC przed wschodem słońca

  - alias: "Solcast G12W - Weekend słonecznie"
    description: "Minimalnie ładuj w weekend gdy słonecznie"
    trigger:
      - platform: time
        at: "21:30:00"
    
    condition:
      - condition: time
        weekday:
          - sat
          - sun
      
      # Dużo słońca jutro
      - condition: numeric_state
        entity_id: sensor.solcast_pv_forecast_prognoza_na_jutro
        above: 6
      
      - condition: numeric_state
        entity_id: sensor.inverter_deye_battery_soc
        above: 40
    
    action:
      # Wyłącz ładowanie - nawet w weekend nie trzeba
      - service: switch.turn_off
        target:
          entity_id: switch.inverter_deye_battery_grid_charging
      
      - service: notify.persistent_notification
        data:
          title: "☀️ Solcast G12W: Weekend słonecznie!"
          message: |
            Prognoza: {{ states('sensor.solcast_pv_forecast_prognoza_na_jutro') }} kWh
            
            🚫 Ładowanie wyłączone
            ☀️ Wystarczy PV!

  # ============================================
  # RAPORTY
  # ============================================
  
  - alias: "Solcast G12W - Raport poranny"
    description: "Raport o 7:00 z informacją o taryfie"
    trigger:
      - platform: time
        at: "06:00:00"
    
    action:
      - service: notify.persistent_notification
        data:
          title: "☀️ Prognoza PV + Taryfa G12W"
          message: |
            📅 Dzisiaj: {{ states('sensor.solcast_pv_forecast_prognoza_na_dzisiaj') }} kWh
            📅 Jutro: {{ states('sensor.solcast_pv_forecast_prognoza_na_jutro') }} kWh
            🔋 Bateria: {{ states('sensor.inverter_deye_battery_soc') }}%
            
            {% if now().weekday() < 5 %}
            💰 Dziś: Dni powszedni
            ⚡ Tania taryfa: 13:00-15:00, 22:00-06:00
            {% else %}
            💰 Dziś: Weekend
            ⚡ Tania taryfa: CAŁA DOBA! 🎉
            {% endif %}
            
            {% set forecast = states('sensor.solcast_pv_forecast_prognoza_na_dzisiaj') | float(0) %}
            {% if forecast > 15 %}☀️ Doskonale!
            {% elif forecast > 10 %}🌤️ Dobrze
            {% elif forecast > 5 %}⛅ Średnio
            {% else %}🌥️ Słabo{% endif %}

  - alias: "Solcast G12W - Raport wieczorny"
    description: "Dokładność + oszczędności"
    trigger:
      - platform: time
        at: "23:00:00"
    
    action:
      - service: notify.persistent_notification
        data:
          title: "📊 Solcast G12W: Podsumowanie"
          message: |
            📈 Prognoza: {{ states('sensor.solcast_pv_forecast_prognoza_na_dzisiaj') }} kWh
            📊 Rzeczywista: {{ states('sensor.inverter_deye_daily_production') }} kWh
            
            {% set forecast = states('sensor.solcast_pv_forecast_prognoza_na_dzisiaj') | float(0) %}
            {% set actual = states('sensor.inverter_deye_daily_production') | float(0) %}
            {% set diff = ((actual - forecast) / forecast * 100) | round(1) if forecast > 0 else 0 %}
            Różnica: {{ diff }}%
            
            💰 Ładowanie z sieci:
            {% if is_state('switch.inverter_deye_battery_grid_charging', 'on') %}
            ✅ Było aktywne (taryfa G12W)
            {% else %}
            🚫 Wyłączone (PV wystarczyło)
            {% endif %}
            
            {% if now().weekday() < 5 %}
            📅 Jutro: Dzień powszedni (11h taniej)
            {% else %}
            📅 Jutro: Weekend (24h taniej!) 🎉
            {% endif %}

  # ============================================
  # BEZPIECZEŃSTWO - OCHRONA BATERII
  # ============================================
  
  - alias: "Solcast G12W - Awaryjne ładowanie SOC<15%"
    description: "Bezpieczeństwo: ładuj natychmiast gdy bateria niska"
    trigger:
      - platform: numeric_state
        entity_id: sensor.inverter_deye_battery_soc
        below: 15
    
    condition:
      # Tylko w godzinach taniej taryfy
      - condition: or
        conditions:
          # Dni powszednie: 22:00-06:00 lub 13:00-15:00
          - condition: and
            conditions:
              - condition: time
                weekday:
                  - mon
                  - tue
                  - wed
                  - thu
                  - fri
              - condition: or
                conditions:
                  - condition: time
                    after: "22:00:00"
                    before: "23:59:59"
                  - condition: time
                    after: "00:00:00"
                    before: "06:00:00"
                  - condition: time
                    after: "13:00:00"
                    before: "15:00:00"
          
          # Weekend: cała doba
          - condition: time
            weekday:
              - sat
              - sun
    
    action:
      - service: switch.turn_on
        target:
          entity_id: switch.inverter_deye_battery_grid_charging
      
      - service: notify.persistent_notification
        data:
          title: "⚠️ AWARYJNE ŁADOWANIE!"
          message: |
            🔋 Bateria: {{ states('sensor.inverter_deye_battery_soc') }}%
            ⚡ Włączono ładowanie z sieci (G12W taryfa)
            
            Bezpieczeństwo baterii!