################################################## # Varme: Central genberegning af alle Roth-rum # Kaldes af automations/varme_styring.yaml ved: # - Morgen (06:30), Nat (22:00) # - Tilstedeværelse ændret # - Ferietilstand ændret # - HA genstart # Logik pr. rum: # - Vindue åbent → skip (håndteres af vinduer.yaml) # - Ferie → varme_ferie_temp (frostbeskyttelse) # - Nat (aften_tid–morgen_tid) → komfort - varme_nat_saenkning # - Ingen hjemme → komfort - varme_vaek_saenkning # - Ellers → rum-komforttemperatur ################################################## varme_recalculate: alias: "Varme: Genberegn alle rum" mode: restart sequence: - variables: vacation: "{{ is_state('input_boolean.vacation_mode', 'on') }}" night: > {% set m = states('input_datetime.varme_morgen_tid') %} {% set a = states('input_datetime.varme_aften_tid') %} {% set t = now().strftime('%H:%M:%S') %} {{ t >= a or t < m }} home: "{{ is_state('binary_sensor.family_presence', 'on') }}" nat_sænk: "{{ states('input_number.varme_nat_saenkning') | float(3) }}" vaek_sænk: "{{ states('input_number.varme_vaek_saenkning') | float(3) }}" ferie_temp: "{{ states('input_number.varme_ferie_temp') | float(15) }}" # Sæt alle rum til manuel tilstand (preset: none) så Roth-tidsprogram ikke overstyrer - service: climate.set_preset_mode target: entity_id: - climate.andreas - climate.daniel - climate.sovev_prelse - climate.kontor - climate.fordelingsgang - climate.forgang - climate.lille_bad data: preset_mode: "none" # ---- Andreas (vindue: binary_sensor.andreas_vindue) ---- - if: - condition: template value_template: "{{ not is_state('binary_sensor.andreas_vindue', 'on') }}" then: - service: climate.set_temperature target: entity_id: climate.andreas data: temperature: > {% set k = states('input_number.varme_komfort_andreas') | float(20) %} {% if vacation %} {{ ferie_temp }} {% elif night %} {{ [k - nat_sænk, 15] | max }} {% elif not home %} {{ [k - vaek_sænk, 15] | max }} {% else %} {{ k }} {% endif %} else: - service: climate.set_hvac_mode target: entity_id: climate.andreas data: hvac_mode: "off" # ---- Daniel (vindue: binary_sensor.daniel_vindue) ---- - if: - condition: template value_template: "{{ not is_state('binary_sensor.daniel_vindue', 'on') }}" then: - service: climate.set_temperature target: entity_id: climate.daniel data: temperature: > {% set k = states('input_number.varme_komfort_daniel') | float(20) %} {% if vacation %} {{ ferie_temp }} {% elif night %} {{ [k - nat_sænk, 15] | max }} {% elif not home %} {{ [k - vaek_sænk, 15] | max }} {% else %} {{ k }} {% endif %} else: - service: climate.set_hvac_mode target: entity_id: climate.daniel data: hvac_mode: "off" # ---- Soveværelse (vindue: binary_sensor.sovevaerelse_vindue) ---- - if: - condition: template value_template: "{{ not is_state('binary_sensor.sovevaerelse_vindue', 'on') }}" then: - service: climate.set_temperature target: entity_id: climate.sovev_prelse data: temperature: > {% set k = states('input_number.varme_komfort_sovevaerelse') | float(18) %} {% if vacation %} {{ ferie_temp }} {% elif night %} {{ [k - nat_sænk, 15] | max }} {% elif not home %} {{ [k - vaek_sænk, 15] | max }} {% else %} {{ k }} {% endif %} else: - service: climate.set_hvac_mode target: entity_id: climate.sovev_prelse data: hvac_mode: "off" # ---- Kontor (ingen vinduesensor) ---- - service: climate.set_temperature target: entity_id: climate.kontor data: temperature: > {% set k = states('input_number.varme_komfort_kontor') | float(21) %} {% if vacation %} {{ ferie_temp }} {% elif night %} {{ [k - nat_sænk, 15] | max }} {% elif not home %} {{ [k - vaek_sænk, 15] | max }} {% else %} {{ k }} {% endif %} # ---- Gang / Fordelingsgang (ingen vinduesensor) ---- - service: climate.set_temperature target: entity_id: climate.fordelingsgang data: temperature: > {% set k = states('input_number.varme_komfort_gang') | float(18) %} {% if vacation %} {{ ferie_temp }} {% elif night %} {{ [k - nat_sænk, 15] | max }} {% elif not home %} {{ [k - vaek_sænk, 15] | max }} {% else %} {{ k }} {% endif %} # ---- Forgang (ingen vinduesensor) ---- - service: climate.set_temperature target: entity_id: climate.forgang data: temperature: > {% set k = states('input_number.varme_komfort_forgang') | float(17) %} {% if vacation %} {{ ferie_temp }} {% elif night %} {{ [k - nat_sænk, 15] | max }} {% elif not home %} {{ [k - vaek_sænk, 15] | max }} {% else %} {{ k }} {% endif %} # ---- Lille bad (vindue: binary_sensor.lille_bad_vindue) ---- - if: - condition: template value_template: "{{ not is_state('binary_sensor.lille_bad_vindue', 'on') }}" then: - service: climate.set_temperature target: entity_id: climate.lille_bad data: temperature: > {% set k = states('input_number.varme_komfort_lille_bad') | float(22) %} {% if vacation %} {{ ferie_temp }} {% elif night %} {{ [k - nat_sænk, 15] | max }} {% elif not home %} {{ [k - vaek_sænk, 15] | max }} {% else %} {{ k }} {% endif %} else: - service: climate.set_hvac_mode target: entity_id: climate.lille_bad data: hvac_mode: "off" # ---- Badeværelse – Danfoss Ally (vindue: binary_sensor.badevaerelse_vindue) ---- - if: - condition: template value_template: "{{ not is_state('binary_sensor.badevaerelse_vindue', 'on') }}" then: - service: climate.set_temperature target: entity_id: climate.badevarelse data: hvac_mode: heat temperature: > {% set k = states('input_number.varme_komfort_badevarelse') | float(20) %} {% if vacation %} {{ ferie_temp }} {% elif night %} {{ [k - nat_sænk, 15] | max }} {% elif not home %} {{ [k - vaek_sænk, 15] | max }} {% else %} {{ k }} {% endif %} else: - service: climate.set_hvac_mode target: entity_id: climate.badevarelse data: hvac_mode: "off" # ---- Stue – Danfoss Ally (vindue: binary_sensor.terrassedor) ---- - if: - condition: template value_template: "{{ not is_state('binary_sensor.terrassedor', 'on') }}" then: - service: climate.set_temperature target: entity_id: climate.stue data: hvac_mode: heat temperature: > {% set k = states('input_number.varme_komfort_stue') | float(24) %} {% if vacation %} {{ ferie_temp }} {% elif night %} {{ [k - nat_sænk, 15] | max }} {% elif not home %} {{ [k - vaek_sænk, 15] | max }} {% else %} {{ k }} {% endif %} else: - service: climate.set_hvac_mode target: entity_id: climate.stue data: hvac_mode: "off"