Files
N22/include/scripts/varme_styring.yaml
T

241 lines
8.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
##################################################
# 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_tidmorgen_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_temperature
target:
entity_id: climate.andreas
data:
temperature: "{{ ferie_temp }}"
# ---- 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_temperature
target:
entity_id: climate.daniel
data:
temperature: "{{ ferie_temp }}"
# ---- 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_temperature
target:
entity_id: climate.sovev_prelse
data:
temperature: "{{ ferie_temp }}"
# ---- 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_temperature
target:
entity_id: climate.lille_bad
data:
temperature: "{{ ferie_temp }}"
# ---- 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_temperature
target:
entity_id: climate.badevarelse
data:
hvac_mode: heat
temperature: "{{ ferie_temp }}"
# ---- 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_temperature
target:
entity_id: climate.stue
data:
hvac_mode: heat
temperature: "{{ ferie_temp }}"
varme_save_defaults:
alias: Gem varme-standardværdier
icon: mdi:content-save
sequence:
- action: shell_command.varme_save_defaults
response_variable: result
- action: persistent_notification.create
data:
title: Varme-standardværdier gemt
message: >
{{ result.stdout if result.returncode == 0
else 'Fejl: ' ~ result.stderr }}
notification_id: varme_save_defaults