Advertisement
energywave

Tado - Finestre aperte

Nov 4th, 2022 (edited)
1,338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 9.01 KB | None | 0 0
  1. input_number:
  2.   ritardo_notifiche_finestre_min:
  3.     name: Ritardo notifiche finestre aperte (min)
  4.     min: 1
  5.     max: 60
  6.     step: 1
  7.     mode: slider
  8.     icon: mdi:timer-outline
  9.   ritardo_notifiche_finestre_seguenti_min:
  10.     name: Ritardo tra una notifica finestra aperta e l'altra (min)
  11.     min: 1
  12.     max: 30
  13.     step: 1
  14.     mode: slider
  15.     icon: mdi:timer-sand      
  16.  
  17. binary_sensor:
  18.   - platform: group
  19.     name: "Finestre mansarda"
  20.     device_class: opening
  21.     unique_id: 719f1a3c-b07d-4ebc-afb6-5898d08836fd
  22.     entities:
  23.      - binary_sensor.finestra_mansarda_letto
  24.       - binary_sensor.finestra_mansarda_pc
  25.       - binary_sensor.lucernario_pc_sx
  26.       - binary_sensor.lucernario_cameretta_erica
  27.  
  28.   - platform: group
  29.     name: "Finestre pian terreno"
  30.     device_class: opening
  31.     unique_id: dad0d5ec-10dc-4ba7-949f-4de5bb8c3c09
  32.     entities:
  33.      - binary_sensor.porta_ingresso
  34.       - binary_sensor.finestra_cucina
  35.       - binary_sensor.portafinestra_cucina
  36.       - binary_sensor.finestra_soggiorno_dx
  37.       - binary_sensor.finestra_soggiorno_sx
  38.  
  39.   - platform: group
  40.     name: "Finestre camera"
  41.     device_class: opening
  42.     unique_id: 7a4288e2-2794-4078-9726-1a88abde638d
  43.     entities:
  44.      - binary_sensor.finestra_camera
  45.       - binary_sensor.portafinestra_camera
  46.  
  47.   - platform: group
  48.     name: "Finestre cameretta"
  49.     device_class: opening
  50.     unique_id: 3b4e15f8-5996-42dd-a442-768801f41999
  51.     entities:
  52.      - binary_sensor.finestra_cameretta
  53.       - binary_sensor.portafinestra_cameretta
  54.  
  55.   - platform: group
  56.     name: "Finestre corridoio"
  57.     device_class: opening
  58.     unique_id: cf58a846-fee0-483e-9ec9-c42218808f21
  59.     entities:
  60.      - binary_sensor.finestra_corridoio
  61.       - binary_sensor.finestra_scale
  62.  
  63. # Automazione che gestisce l'apertura delle finestre di una stanza e attende fino alla chiusura, con ripristino riscaldamento
  64. # Funziona per qualunque stanza, basta aggiungere nei trigger il relativo gruppo (da creare qui sopra) che VA INSERITO NELL'AREA CORRETTA TRAMITE UI!
  65. automation:
  66.   - alias: "Stanza aperta"
  67.     mode: parallel
  68.     trigger:
  69.       - platform: state
  70.         entity_id:
  71.          - binary_sensor.finestre_mansarda
  72.           - binary_sensor.finestre_pian_terreno
  73.           - binary_sensor.finestre_camera
  74.           - binary_sensor.finestre_cameretta
  75.           - binary_sensor.finestra_bagno
  76.           - binary_sensor.lucernario_bagno_mansarda
  77.           - binary_sensor.finestre_corridoio
  78.         for: "00:00:30"
  79.         to: "on"
  80.     condition:
  81.       - condition: state
  82.         entity_id: input_boolean.estate
  83.         state: "off"
  84.     action:
  85.       - variables:
  86.           source_entity_id: "{{trigger.entity_id}}"
  87.           source_area_id: "{{area_id(source_entity_id)}}"
  88.           source_area_name: "{{area_name(source_area_id)}}"
  89.           climate_entity_id: "{{ expand(states.climate) | selectattr('entity_id', 'in', area_entities(source_area_id)) | selectattr('attributes.supported_features', 'eq', 17) | map(attribute='entity_id') | list | first | default('') }}"
  90.       #TODO: Rilevare se il source_entity_id non appartiene ad alcuna area e dare un messaggio specifico interrompendo l'automazione
  91.       # Se configurato di spegnere il riscaldamento dopo un tot che è aperta lo faccio
  92.       - if: "{{ climate_entity_id != '' and is_state('input_boolean.spegnimento_riscaldamento_finestre', 'on') }}"
  93.         then:
  94.           - service: script.spegni_riscaldamento
  95.             data:
  96.               entity: "{{climate_entity_id}}"
  97.       # Attendo un delay e loop notifiche finchè ancora aperta
  98.       - wait_template: "{{is_state(trigger.entity_id, 'off')}}"
  99.         timeout:
  100.           minutes: "{{ states('input_number.ritardo_notifiche_finestre_min') | int}}"
  101.       - repeat:
  102.           while:
  103.            - "{{is_state(trigger.entity_id, 'on')}}"
  104.             - condition: state
  105.               entity_id: input_boolean.notifiche_finestre
  106.               state: "on"
  107.           sequence:
  108.             - service: script.multinotify
  109.               data:
  110.                 title: "Finestre {{source_area_name}} aperte troppo a lungo"
  111.                 message: >
  112.                  {% set minuti = ((now().timestamp()-as_timestamp(trigger.to_state.last_changed)) / 60)|round(0) %}
  113.                   {{[ source_area_name ~ " ha le finestre aperte da " ~ minuti ~ " minuti!",
  114.                      "<say-as interpret-as='interjection'>etciù</say-as>, i pinguini scorazzano liberamente in " ~ source_area_name ~ " ormai da " ~ minuti ~ " minuti!",
  115.                      "<say-as interpret-as='interjection'>brrr</say-as>, il ghiaccio sta prendendo il sopravvento da " ~ minuti ~ " minuti, in " ~ source_area_name ~ "!",
  116.                      "<say-as interpret-as='interjection'>brrr</say-as>, fa freschino in " ~ source_area_name ~ ", le finestre sono aperte da " ~ minuti ~ " minuti!",
  117.                      "<say-as interpret-as='interjection'>hey</say-as>, io dico che dopo " ~ minuti ~ " minuti di cambio aria puoi chiudere le finestre di " ~ source_area_name ~ "!",
  118.                      "Secondo me " ~ minuti ~ " minuti di finestre aperte possono bastare in " ~ source_area_name ~ "!",
  119.                      "<say-as interpret-as='interjection'>hey</say-as>, che ne dici di chiudere le finestre di " ~ source_area_name ~ "? " ~ minuti ~ " minuti di cambio aria sono abbastanza!",
  120.                      "<say-as interpret-as='interjection'>accipicchia</say-as>, che freddo che fa in " ~ source_area_name ~ ": dopo " ~ minuti ~ " minuti è davvero ora di chiudere le finestre!",
  121.                      "<say-as interpret-as='interjection'>brrr</say-as> in " ~ source_area_name ~ " si gela dopo " ~ minuti ~ " minuti di finestre aperte!",
  122.                      "<say-as interpret-as='interjection'>buu</say-as> a chi ha lasciato le finestre in " ~ source_area_name ~ " aperte da " ~ minuti ~ " minuti!",
  123.                      "<say-as interpret-as='interjection'>cavolo</say-as> i pinguini che ho visto in " ~ source_area_name ~ " stanno iniziando a ghiacciare, dopo " ~ minuti ~ " minuti di finestre aperte...",
  124.                      "<say-as interpret-as='interjection'>caspita</say-as> che freddo che fa in " ~ source_area_name ~ "! Chiudi le finestre, dai!",
  125.                      "Stiamo risparmiando metano... Ah, no, <say-as interpret-as='interjection'>come non detto</say-as>. Le finestre aperte in " ~ source_area_name ~ " da " ~ minuti ~ " minuti stanno vanificando gli sforzi.",
  126.                      "<say-as interpret-as='interjection'>coraggio</say-as>, vai in " ~ source_area_name ~ " e chiudi le finestre, che sono aperte da ben " ~ minuti ~ " minuti!",
  127.                      "<say-as interpret-as='interjection'>eh già</say-as>. Perchè mai risparmiare metano! Lasciamo le finestre aperte in " ~ source_area_name ~ " finchè non ci si trasferisce l'uomo delle nevi!",
  128.                      "<say-as interpret-as='interjection'>etciù</say-as>. Mi sto ammalando, vista la temperatura artica in " ~ source_area_name ~ " dopo " ~ minuti ~ " di finestre aperte. <say-as interpret-as='interjection'>etciù</say-as>",
  129.                      "Perchè lasciare le finestre aperte in " ~ source_area_name ~ " per ben " ~ minuti ~ " minuti? <say-as interpret-as='interjection'>mistero</say-as>",
  130.                      "<say-as interpret-as='interjection'>tic-toc</say-as>. Il tempo passa. Sono già " ~ minuti ~ " minuti che le finestre in " ~ source_area_name ~ " sono aperte!",
  131.                      "Le finestre in " ~ source_area_name ~ " sono aperte da ben " ~ minuti ~ " minuti. <say-as interpret-as='interjection'>vabbè</say-as>, anche oggi si risparmia domani.",
  132.                      "<say-as interpret-as='interjection'>wow</say-as>, che belle le stallattiti di ghiaccio che si sono formate in " ~ source_area_name ~ " dopo " ~ minuti ~ " minuti di finestre aperte!",
  133.                      "<say-as interpret-as='interjection'>uffa</say-as>, voi umani aprite le finestre e non vi accorgete del tempo che passa. In " ~ source_area_name ~ " sono già passati " ~ minuti ~ " minuti!",
  134.                      "<say-as interpret-as='interjection'>oh no</say-as>, Elsa sta completando il ghiaccio che hai iniziato a produrre in " ~ source_area_name ~ " dopo " ~ minuti ~ " minuti di finestre aperte!",
  135.                      "Chiudere le finestre in " ~ source_area_name ~ "? <say-as interpret-as='interjection'>magari</say-as>, dopo " ~ minuti ~ " minuti direi che è il caso."] | random}}
  136.                 notify_app:
  137.                  - notify.all_android_devices
  138.                   - notify.all_ios_devices
  139.                 channel: warning
  140.                 tag: open_window_warning
  141.                 alexa_target: media_player.ovunque
  142.             - wait_template: "{{is_state(trigger.entity_id, 'off')}}"
  143.               timeout:
  144.                 minutes: "{{ states('ritardo_notifiche_finestre_seguenti_min') | int}}"
  145.       - wait_template: "{{is_state(trigger.entity_id, 'off')}}"
  146.       - if: "{{climate_entity_id != ''}}"
  147.         then:
  148.           - service: script.imposta_riscaldamento
  149.             data:
  150.               entity: "{{climate_entity_id}}"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement