##################################################
# 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 }}"
          scene_name: "vindue_varme_{{ trigger.entity_id.split('.')[1] }}"
      - service: scene.create
        data:
          scene_id: "{{ scene_name }}"
          snapshot_entities:
            - "{{ climate_entity }}"
      - 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
      - service: scene.turn_on
        target:
          entity_id: "scene.{{ scene_name }}"

### 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."
