Home Assistant - Oh no! ho dimenticato le finestre aperte!

Home Assistant - Oh no! ho dimenticato le finestre aperte!

di Luigi Duchi

07 Dicembre 2020

Home Assistant

Luigi Duchi

"Avrò chiuso le finestre?"

Chi non si è mai fatto questa domanda? 

... e se disgraziatamente siete sposati e la risposta alla precedente domanda è NO, NON LE HO CHIUSE.....indovinate di chi è la colpa???

Quindi, visto che ormai è noto che a fatica mi ricordo il mio nome, ho deciso di ingegnarmi per trovare una soluzione a questo increscioso problema.

A casa mia ho dei sensori Xiaomi per porte e finestre.

Li utilizzo solo per delle automazioni di vario genere, e vi sconsiglio di utilizzarli come sistema di allarme (anche se teoricamente sarebbe possibile) per il semplice fatto che qualsiasi malintenzionato potrebbe manometterli in poco tempo.

sensore xiaomi

(Affidatevi sempre ad allarmi professionali per la sicurezza del vostro appartamento)

I sensori Xiaomi sfruttano la tecnologia Zigbee. Questi sensori come noto sono poco energivori e le loro batterie durano moltissimo tempo, nel mio caso alcuni sono arrivati a quasi 2 anni. 

Possono essere naturalmente integrati all'interno di Home Assistant.

I sensori Xiaomi o anche di altri marchi che sfruttano la tecnologia Zigbee, possono essere inseriti mediante il Gateway proprietario (non tutti i gateway originali sono compatibili con Home Assistant) oppure mediante le le varie chiavette Zigbee programmabili che abbiamo visto nel corso del tempo.

La lista dei device compatibili con questi gateway alternativi la potrete trovare a questo link.

https://www.zigbee2mqtt.io/information/supported_devices.html 

I sensori Xiaomi sono perfetti per questo scopo, tuttavia si possono utilizzare anche altri sensori con tecnologia Zigbee.

I sensori Xiaomi possono essere acquistati QUI

I sensori Aqara possono essere acquistati QUI 

I due sensori sopra sono pressoché identici.

Un'altra alternativa potrebbero essere i sensori Sonoff sempre Zigbee.

Potrete acquistarli QUI

Se invece preferite utilizzare sensori con tecnologia wifi, che vi sconsiglio per la minor reattività ma soprattutto per il consumo superiore delle batterie rispetto alla controparte Zigbee, potrete orientarvi sullo Shelly Door windows 2 che potrete reperire sul sito ufficiale QUI.

C'è anche la tecnologia Zwave che si può sfruttare ma in questo caso i costi dei device lievitano.

In sintesi potrete utilizzare qualsiasi sensore porte e finestre purchè integrato nel vostro hub personale Home Assistant.

Questa guida non è difficile da realizzare, ma presuppone che abbiate già configurato Google Assistant sul vostro Home Assistant. Indifferente è che lo abbiate fatto tramite Nabucasa oppure tramite un progetto sulla console Google.

 Una volta integrati i vostri sensori su Home Assistant li potrete ritrovare tutti alla voce strumenti per sviluppatori nel sotto menù stati e saranno denominati come binary_sensor.xxxxxxxx dove le x saranno sostituite dal nome del vostro sensore.

schermata Home Assistant

Ecco, arrivati a questo punto dovrete creare un input_boolean un paio di script e una sola automazione.

Per capire cosa sono, Antonio Longo ha scritto un paio di articoli che vi invito ad andare a leggere:

https://www.vincenzocaputo.com/guide/input-boolean-gli-interruttori-virtuali-della-domotica-in-home-assistant-505

https://www.vincenzocaputo.com/guide/automazioni-in-home-assistant-concetti-di-base-494

Per agevolarvi vi ho creato un package, potrete copiarlo e inserirlo nella vostra cartella package 

Cosa sono i package?

Ne abbiamo parlato in passato ma nel complesso sono dei contenitori di elementi racchiusi in un unico file yaml. In questo caso potremmo inserire l'input boolean, gli script e l'automazione in un unico gruppo, definito appunto package in modo da non dover dividere i vari elementi nel configuration.yaml oppure nei vari file automation.yaml, script.yaml o automation.yaml.

Avendo tutto a portata di mano in un unico file è facilitata anche la rimozione o la modifica.

Per abilitare i package vi ricordo che dovrete inserire nel file configuration.yaml l'inclusione esattamente sotto la scritta homeassistant in questo modo:

homeassistant:
  packages: !include_dir_named packages

Successivamente dovrete creare una cartella chiamata appunto packages allo stesso livello dei vari file.yaml

packages

All'interno della cartella packages dovrete inserire tutti i vari file yaml che creerete, con all'interno i vari pacchetti di configurazione.

Nel caso specifico di questo progetto, create un file dentro la cartella packages chiamato ad esempio controllo_finestre.yaml (potrete ovviamente chiamarlo come preferite)

All'interno del file andate a copiare queste stringhe:

##########################################################
######################INPUT#BOOLEAN#######################
##########################################################
input_boolean:
  finestre:
   name: finestre
##########################################################
######################SCRIPT##############################
##########################################################
script:
  finestre:
    sequence:
    - service: tts.google_translate_say
      data:
        message: "hai lasciato aperta {{ 'la finestra piloty' if states('binary_sensor.door_window_sensor_158d0001062cab') == 'on' else '' }}, {{ 'la finestra piloty lato portico' if states('binary_sensor.door_window_sensor_158d0001070b85') == 'on' else '' }}, {{ 'la finestra della camera dei bimbi' if states('binary_sensor.door_window_sensor_158d0001067313') == 'on' else '' }}, {{ 'la finestra della sala da pranzo' if states('binary_sensor.door_window_sensor_158d0001067412') == 'on' else '' }}, {{ 'la finestra della camera matrimoniale' if states('binary_sensor.door_window_sensor_158d000110bbe1') == 'on' else '' }}, {{ 'la finestra del bagno' if states('binary_sensor.door_window_sensor_158d0001119f62') == 'on' else '' }}, {{ 'la finestra della camera gialla' if states('binary_sensor.door_window_sensor_158d00011303b3') == 'on' else '' }}, {{ 'la finestra della cucina' if states('binary_sensor.door_window_sensor_158d000127b1db') == 'on' else '' }}, {{ 'la porta ingresso' if states('binary_sensor.door_window_sensor_158d00012d77c4') == 'on' else '' }}"
        entity_id: media_player.pc_gaming

  finestre_chiuse:
    sequence:
    - service: tts.google_translate_say
      data:
        message: "non ci sono finestre aperte"
        entity_id: media_player.pc_gaming
##########################################################
######################AUTOMATION##########################
##########################################################
automation:
  - alias: boolean finestre auto off
    initial_state: true
    trigger:
      - platform: state
        entity_id: input_boolean.finestre
        to: 'on'
    action:
      - delay: "00:00:01"
      - service: input_boolean.turn_off
        entity_id: input_boolean.finestre

  - alias: stato finestre
    initial_state: true
    trigger:
      - platform: state
        entity_id: input_boolean.finestre
        to: 'on'
    action:
      - choose:
          - conditions: >
              {{ is_state('binary_sensor.door_window_sensor_158d0001062cab', 'on') }}
            sequence:
              - service: script.finestre
          - conditions: >
              {{ is_state('binary_sensor.door_window_sensor_158d0001062cab', 'on') }}
            sequence:
              - service: script.finestre
          - conditions: >
              {{ is_state('binary_sensor.door_window_sensor_158d0001067313', 'on') }}
            sequence:
              - service: script.finestre
          - conditions: >
              {{ is_state('binary_sensor.door_window_sensor_158d0001067412', 'on') }}
            sequence:
              - service: script.finestre
          - conditions: >
              {{ is_state('binary_sensor.door_window_sensor_158d000110bbe1', 'on') }}
            sequence:
              - service: script.finestre
          - conditions: >
              {{ is_state('binary_sensor.door_window_sensor_158d0001119f62', 'on') }}
            sequence:
              - service: script.finestre
          - conditions: >
              {{ is_state('binary_sensor.door_window_sensor_158d00011303b3', 'on') }}
            sequence:
              - service: script.finestre
          - conditions: >
              {{ is_state('binary_sensor.door_window_sensor_158d000127b1db', 'on') }}
            sequence:
              - service: script.finestre
          - conditions: >
              {{ is_state('binary_sensor.door_window_sensor_158d00012d77c4', 'on') }}
            sequence:
              - service: script.finestre
        default:
          - service: script.turn_on
            entity_id: script.finestre_chiuse

Per adattarlo alla vostra configurazione dovrete sostituire diverse cose.

Nel primo script, oltre a sostituire il nome del vostro media player che dovrà riprodurre il testo audio (che nel mio caso si chiama media_player.pc_gaming), dovrete sostituire il nome di tutti i binary_sensor ed eventualmente aggiungerli o rimuoverli se avete rispettivamente più o meno finestre.

Nel secondo script dovrete invece solo sostituire il nome del mediaplayer in riproduzione e eventualmente il messaggio che volete che riproduca.

Anche l'automazione presente nel package andrà sistemata di conseguenza, modificando e eventualmente aggiungendo o eliminando i vari binary_sensor presenti nella vostra configurazione.

Aalvate e riavviate Home Assistant.

Dovrete esporre gli input_boolean verso Google Assistant.

Lo dovrete fare semplicemente inserendolo su file relativo alla configurazione di Google Assistant in configuration.yaml sotto la voce exposed_domains come nell'esempio qui sotto.

google_assistant:
  project_id: nome del vostro progetto
  service_account: !include test12345.json
  exposed_domains:
    - switch
    - light
    - vacuum
    - media_player
    - climate
    - input_boolean
    - cover

Una volta riavviato Home Assistant sarà sufficiente chiedere a Google di sincronizzare i dispositivi semplicemente pronunciando: "Hey Google sincronizza dispositivi".

Noterete che tra i device presenti sarà disponibile uno switch chiamato finestre. 

Adesso teoricamente pronunciando la frase:"Hey Google accendi finestre" dovrebbe partire l'automazioni per la quale Google vi risponderà se e quali finestre sono aperte.

Brutto vero?

Per ovviare a questo sarà necessario creare una routine sull'applicazione Google Home facendo in modo che, al pronunciare una frase a vostro piacimento, lui comprenda "accendi finestre"

Ad esempio "Quali finestre sono aperte" potrete aggiungere quante frasi di attivazione preferite tutte collegate al solito comando "accendi finestre".

Nel video sottostante potrete vedere tutta la configurazione.

Produrre e aggiornare contenuti su vincenzocaputo.com richiede molto tempo e lavoro. Se il contenuto che hai appena letto è di tuo gradimento e vuoi supportarmi, clicca uno dei link qui sotto per fare una donazione.

Luigi Duchi

Luigi Duchi

Nato a Grosseto il 24 Dicembre 1982 perito elettrotecnico che lavora nel mondo della domotica e installazione di impianti elettrici, impianti di allarmi, videosorveglianza e automazioni in genere. Appassionato da sempre di tecnologia e aperto alla conoscenza di nuove soluzioni.

Disqus loading...