273 lines
11 KiB
YAML
273 lines
11 KiB
YAML
##################################################
|
|
# Vindue-automationer (Aqara vinduesensorer)
|
|
##################################################
|
|
|
|
### Varme: Sluk varme når vindue åbnes, tænd igen når det lukkes
|
|
### Rum-mapping: andreas, daniel, sovevaerelse, lille_bad
|
|
|
|
- alias: "Varme - sluk ved åbent vindue"
|
|
id: varme_sluk_ved_aabent_vindue
|
|
description: "Slukker varme i rummet når vinduet åbnes og genstarter når det lukkes"
|
|
mode: parallel
|
|
max: 4
|
|
trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- binary_sensor.andreas_vindue
|
|
- binary_sensor.daniel_vindue
|
|
- binary_sensor.sovevaerelse_vindue
|
|
- binary_sensor.lille_bad_vindue
|
|
to: "on"
|
|
action:
|
|
- variables:
|
|
room_map:
|
|
binary_sensor.andreas_vindue: climate.andreas
|
|
binary_sensor.daniel_vindue: climate.daniel
|
|
binary_sensor.sovevaerelse_vindue: climate.sovev_prelse
|
|
binary_sensor.lille_bad_vindue: climate.lille_bad
|
|
climate_entity: "{{ room_map[trigger.entity_id] }}"
|
|
window_entity: "{{ trigger.entity_id }}"
|
|
- service: climate.set_hvac_mode
|
|
target:
|
|
entity_id: "{{ climate_entity }}"
|
|
data:
|
|
hvac_mode: "off"
|
|
- wait_template: "{{ is_state(window_entity, 'off') }}"
|
|
timeout: "04:00:00"
|
|
continue_on_timeout: true
|
|
# Genberegn korrekt temperatur (nat/væk/komfort) efter vindue lukkes
|
|
- service: script.varme_recalculate
|
|
|
|
### Notifikation: Vindue åbner og ingen er hjemme
|
|
|
|
- alias: "Vindue åbent - ingen hjemme"
|
|
id: vindue_aabent_ingen_hjemme
|
|
description: "Send notifikation til Claus hvis et vindue åbner og ingen er hjemme"
|
|
trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- binary_sensor.andreas_vindue
|
|
- binary_sensor.daniel_vindue
|
|
- binary_sensor.sovevaerelse_vindue
|
|
- binary_sensor.badevaerelse_vindue
|
|
- binary_sensor.lille_bad_vindue
|
|
- binary_sensor.terrassedor
|
|
to: "on"
|
|
condition:
|
|
- condition: state
|
|
entity_id: binary_sensor.family_presence
|
|
state: "off"
|
|
action:
|
|
- variables:
|
|
vindue_navne:
|
|
binary_sensor.andreas_vindue: "Andreas' værelse"
|
|
binary_sensor.daniel_vindue: "Daniels værelse"
|
|
binary_sensor.sovevaerelse_vindue: "Soveværelset"
|
|
binary_sensor.badevaerelse_vindue: "Badeværelset"
|
|
binary_sensor.lille_bad_vindue: "Lille badeværelse"
|
|
binary_sensor.terrassedor: "Terrassedøren"
|
|
vindue_navn: "{{ vindue_navne[trigger.entity_id] }}"
|
|
- service: notify.mobile_app_claus_iphone_15pro
|
|
data:
|
|
title: "⚠️ Vindue åbnet - ingen hjemme"
|
|
message: "{{ vindue_navn }} er blevet åbnet, men der er ingen hjemme!"
|
|
data:
|
|
push:
|
|
sound:
|
|
name: default
|
|
critical: 0
|
|
|
|
### Notifikation: Sidste person forlader huset med åbent vindue
|
|
|
|
- alias: "Forlader huset - vindue åbent"
|
|
id: forlader_huset_vindue_aabent
|
|
description: "Send notifikation hvis family_presence slår fra og vinduer er åbne"
|
|
trigger:
|
|
- platform: state
|
|
entity_id: binary_sensor.family_presence
|
|
from: "on"
|
|
to: "off"
|
|
condition:
|
|
- condition: or
|
|
conditions:
|
|
- condition: state
|
|
entity_id: binary_sensor.andreas_vindue
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.daniel_vindue
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.sovevaerelse_vindue
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.badevaerelse_vindue
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.lille_bad_vindue
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.terrassedor
|
|
state: "on"
|
|
action:
|
|
- variables:
|
|
aabne_vinduer: >-
|
|
{% set vinduer = [] %}
|
|
{% if is_state('binary_sensor.andreas_vindue', 'on') %}
|
|
{% set vinduer = vinduer + ["Andreas' værelse"] %}
|
|
{% endif %}
|
|
{% if is_state('binary_sensor.daniel_vindue', 'on') %}
|
|
{% set vinduer = vinduer + ["Daniels værelse"] %}
|
|
{% endif %}
|
|
{% if is_state('binary_sensor.sovevaerelse_vindue', 'on') %}
|
|
{% set vinduer = vinduer + ["Soveværelset"] %}
|
|
{% endif %}
|
|
{% if is_state('binary_sensor.badevaerelse_vindue', 'on') %}
|
|
{% set vinduer = vinduer + ["Badeværelset"] %}
|
|
{% endif %}
|
|
{% if is_state('binary_sensor.lille_bad_vindue', 'on') %}
|
|
{% set vinduer = vinduer + ["Lille badeværelse"] %}
|
|
{% endif %}
|
|
{% if is_state('binary_sensor.terrassedor', 'on') %}
|
|
{% set vinduer = vinduer + ["Terrassedøren"] %}
|
|
{% endif %}
|
|
{{ vinduer | join(', ') }}
|
|
- variables:
|
|
# Find den person der sidst skiftede væk fra home
|
|
sidste_person: >-
|
|
{% set people = [
|
|
('person.claus_dethlefsen', 'notify.mobile_app_claus_iphone_15pro'),
|
|
('person.anne_schusler_dethlefsen', 'notify.mobile_app_annes_iphone_14_pro'),
|
|
('person.andreas_schusler_dethlefsen', 'notify.mobile_app_andreas_iphone_12'),
|
|
('person.daniel_schusler_dethlefsen', 'notify.mobile_app_daniels_iphone_13_mini')
|
|
] %}
|
|
{% set ns = namespace(latest='2000-01-01T00:00:00+00:00', svc='notify.mobile_app_claus_iphone_15pro') %}
|
|
{% for person_id, notify_svc in people %}
|
|
{% set changed = states[person_id].last_changed | string %}
|
|
{% if changed > ns.latest %}
|
|
{% set ns.latest = changed %}
|
|
{% set ns.svc = notify_svc %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{{ ns.svc }}
|
|
# Altid send til Claus
|
|
- service: notify.mobile_app_claus_iphone_15pro
|
|
data:
|
|
title: "🏠 Åbne vinduer - alle er væk"
|
|
message: "Alle har forladt huset, men disse vinduer er åbne: {{ aabne_vinduer }}"
|
|
data:
|
|
push:
|
|
sound:
|
|
name: default
|
|
critical: 1
|
|
volume: 1.0
|
|
# Send også til den der sidst forlod huset (hvis det ikke er Claus)
|
|
- condition: template
|
|
value_template: "{{ sidste_person != 'notify.mobile_app_claus_iphone_15pro' }}"
|
|
- service: "{{ sidste_person }}"
|
|
data:
|
|
title: "🏠 Åbne vinduer - alle er væk"
|
|
message: "Alle har forladt huset, men disse vinduer er åbne: {{ aabne_vinduer }}"
|
|
data:
|
|
push:
|
|
sound:
|
|
name: default
|
|
critical: 1
|
|
volume: 1.0
|
|
|
|
### Ventilation: Luft ud ved høj CO2 eller luftfugtighed (kl 6-22)
|
|
|
|
- alias: "Ventilation - luft ud påmindelse"
|
|
id: ventilation_luft_ud_paamindelse
|
|
description: "Send notifikation om at lufte ud ved høj CO2 eller luftfugtighed"
|
|
trigger:
|
|
- platform: numeric_state
|
|
entity_id: sensor.sovevaerelse_stue_carbon_dioxide
|
|
above: 1000
|
|
id: andreas_co2
|
|
- platform: numeric_state
|
|
entity_id: sensor.sovevaerelse_daniel_carbon_dioxide
|
|
above: 1000
|
|
id: daniel_co2
|
|
- platform: numeric_state
|
|
entity_id: sensor.sovevaerelse_carbon_dioxide
|
|
above: 1000
|
|
id: sovevaerelse_co2
|
|
- platform: numeric_state
|
|
entity_id: sensor.sovevaerelse_stue_luftfugtighed
|
|
above: 70
|
|
id: andreas_fugt
|
|
- platform: numeric_state
|
|
entity_id: sensor.sovevaerelse_daniel_luftfugtighed
|
|
above: 70
|
|
id: daniel_fugt
|
|
- platform: numeric_state
|
|
entity_id: sensor.sovevaerelse_luftfugtighed
|
|
above: 70
|
|
id: sovevaerelse_fugt
|
|
condition:
|
|
- condition: time
|
|
after: "06:00:00"
|
|
before: "22:00:00"
|
|
action:
|
|
- variables:
|
|
rum_navne:
|
|
andreas_co2: "Andreas' værelse (CO₂)"
|
|
andreas_fugt: "Andreas' værelse (luftfugtighed)"
|
|
daniel_co2: "Daniels værelse (CO₂)"
|
|
daniel_fugt: "Daniels værelse (luftfugtighed)"
|
|
sovevaerelse_co2: "Soveværelset (CO₂)"
|
|
sovevaerelse_fugt: "Soveværelset (luftfugtighed)"
|
|
rum_navn: "{{ rum_navne[trigger.id] }}"
|
|
- service: notify.mobile_app_claus_iphone_15pro
|
|
data:
|
|
title: "🌬️ Luft ud"
|
|
message: "{{ rum_navn }} har for høj værdi. Åbn vinduet for at lufte ud."
|
|
|
|
- alias: "Ventilation - luk vindue efter 15 min"
|
|
id: ventilation_luk_vindue_efter_15_min
|
|
description: "Påmind om at lukke vinduet 15 minutter efter det blev åbnet for udluftning"
|
|
mode: parallel
|
|
max: 3
|
|
trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- binary_sensor.andreas_vindue
|
|
- binary_sensor.daniel_vindue
|
|
- binary_sensor.sovevaerelse_vindue
|
|
to: "on"
|
|
condition:
|
|
- condition: time
|
|
after: "06:00:00"
|
|
before: "22:00:00"
|
|
- condition: or
|
|
conditions:
|
|
- condition: template
|
|
value_template: >-
|
|
{{ trigger.entity_id == 'binary_sensor.andreas_vindue' and
|
|
(states('sensor.sovevaerelse_stue_carbon_dioxide') | float(0) > 1000 or
|
|
states('sensor.sovevaerelse_stue_luftfugtighed') | float(0) > 70) }}
|
|
- condition: template
|
|
value_template: >-
|
|
{{ trigger.entity_id == 'binary_sensor.daniel_vindue' and
|
|
(states('sensor.sovevaerelse_daniel_carbon_dioxide') | float(0) > 1000 or
|
|
states('sensor.sovevaerelse_daniel_luftfugtighed') | float(0) > 70) }}
|
|
- condition: template
|
|
value_template: >-
|
|
{{ trigger.entity_id == 'binary_sensor.sovevaerelse_vindue' and
|
|
(states('sensor.sovevaerelse_carbon_dioxide') | float(0) > 1000 or
|
|
states('sensor.sovevaerelse_luftfugtighed') | float(0) > 70) }}
|
|
action:
|
|
- variables:
|
|
vindue_navne:
|
|
binary_sensor.andreas_vindue: "Andreas' værelse"
|
|
binary_sensor.daniel_vindue: "Daniels værelse"
|
|
binary_sensor.sovevaerelse_vindue: "Soveværelset"
|
|
vindue_navn: "{{ vindue_navne[trigger.entity_id] }}"
|
|
- delay: "00:15:00"
|
|
- condition: template
|
|
value_template: "{{ is_state(trigger.entity_id, 'on') }}"
|
|
- service: notify.mobile_app_claus_iphone_15pro
|
|
data:
|
|
title: "🪟 Luk vinduet"
|
|
message: "Vinduet i {{ vindue_navn }} har været åbent i 15 minutter. Husk at lukke det igen."
|