Home Assistant - Come creare un sistema di allarme domestico
di Luigi Duchi
09 Giugno 2018
Domotica
Negli articoli precedenti abbiamo configurato vari dispositivi nel nostro Home Assistant, oggi vedremo come far collaborare alcuni di questi per creare un sistema di allarme domestico con tanto di sirena e notifica sul nostro telefono.
Per prima cosa vi faccio un elenco dei dispositivi che ho utilizzato per realizzare questo sistema di allarme:
- Una Smart Plug (Xiaomi)
- Una sirena da interni
- Uno o più sensori di movimento (Xiaomi)
- Uno o più sensori porta finestra (Xiaomi)
- Gateway Xiaomi
- Naturalmente un Raspberry con Home Assistant a bordo
- Un UPS per aumentare il livello di sicurezza
C'è un componente base che ci aiuterà a creare il pannello di controllo nel nostro Home Assistant ed e' chiamato appunto Manual Alarm Control panel.
Questo component sarà necessario inserirlo all'interno del nostro file configuration.yaml, lo potrete copiare esattamente come indicato qua sotto:
alarm_control_panel:
- platform: manual
name: Allarme Casa
pending_time: 10
delay_time: 50
trigger_time: 10000
andiamo ad analizzare le voci:
pending_time: è il tempo che intercorre prima che l'allarme inizi la fase di attivazione o la fase di disattivazione, nel mio caso ho impostato 10 secondi.
delay_time: è il tempo che passerà prima che l'allarme si attivi, se impostato a 0 dopo il pending time l'allarme si attiverà subito, nel mio caso ho impostato a 50 secondi che sommati ai 10 di pending time fanno 60 secondi, infatti nella mia impostazione quando attivo l'allarme ho 60 secondi per lasciare l'edificio e la sirena suonerà 60 secondi dopo che una porta o una finestra sarà aperta.
trigger_time: e' il tempo di durata del trigger ad esempio il suono di una sirena una volta che l'allarme viene innescato.
Dopo aver salvato il nostro configuration.yaml ciò che vi troverete davanti nell'interfaccia grafica sarà questo:
Benissimo, adesso vediamo come configurare il nostro pannello.
Innanzitutto noteremo che avremo due possibilità di attivazione per il nostro allarme: ARM HOME e ARM AWAY
Il primo (arm home) sta ad indicare un attivazione dell'allarme quando siamo presenti in casa, ad esempio i soli sensori perimetrali (sensore porte e finestre) escludendo i volumetrici (rilevatori di presenza).
Il secondo (arm away) sta ad indicare un attivazione dell'allarme totale per quando saremo lontani dalla nostra abitazione e di conseguenza farà scattare l'allarme tramite ogni tipologia di sensore (sensore porte e finestre e rilevatori di presenza).
Dovremo poi decidere cosa far accadere una volta che l'allarme è scattato nel mio caso farò suonare una sirena collegata ad una smart plug e farò inviare una notifica sul mio telefono tramite Telegram (come abbiamo visto in un articolo precedente che potete trovare QUI).
Andiamo a vedere come come programmare Home Assistant per entrambe le scene:
La prima cosa da fare sarà creare lo switch virtuale che farà accendere/spegnere la sirena. Il sistema fisico sarà composto da una presa smart che, nel mio caso (lo consiglio a tutti), sarà alimentata da un UPS (gruppo di continuità) in modo che anche se la corrente del mio appartamento venisse a mancare, il funzionamento della presa smart sarebbe comunque garantito. Io ho utilizzato una presa smart wifi della xiaomi, ovviamente vi posterò l'esempio della creazione dello switch in funzione di questa presa, se voi foste dotati di altra tipologia di presa smart, dovrete creare lo switch seguendo le regole di integrazione con Home Assistant del vostro dispositivo. Andiamo a configurare lo switch nel seguente modo:
switch:
- platform: xiaomi_miio
name: Sirena allarme
host: 192.168.x.xxx indirizzo ip smartplug
token: token segreto ricavato da mihome
ovviamente sostituite l'indirizzo ip con quello della vostra presa smart, che vi consiglio di prenotare in fase di configurazione sul router in modo che sia assegnato sempre e in ogni caso il solito indirizzo.
e il token segreto che potrete ricavare con il backup di MiHome seguendo questa guida QUI
Adesso andiamo nel nostro file automation.yaml (nel caso abbiate tutte le automazioni in un file dedicato). Andiamo a configurare l'automazione che farà scattare l'allarme nel caso di arm home:
- alias: 'allarme se sensori attivati home'
trigger:
- platform: state
entity_id: binary_sensor.door_window_sensor_xxx
to: 'on'
- platform: state
entity_id: binary_sensor.door_window_sensor_yyy
to: 'on'
- platform: state
entity_id: binary_sensor.door_window_sensor_zzz
to: 'on'
condition:
- condition: state
entity_id: alarm_control_panel.allarme_casa
state: armed_home
action:
- service: alarm_control_panel.alarm_trigger
entity_id: alarm_control_panel.allarme_casa
- delay: 60
- service: switch.toggle
entity_id: switch.sirena_allarme
ovviamente al posto dei nomi dei sensori xxx yyy e zzz dovrete inserire il nome dei sensori porte e finestre che avrete impostato in Home Assistant. Nel mio caso sono sensori Xiaomi che necessitano del loro Gateway anche questo messo sotto UPS.
Questa automazione permetterà, se l'allarme e' inserito in modalità home, alla sirena di suonare dopo 60 secondi che uno dei sensori porta e finestre risulterà aperto. Ovviamente potrete aggiungere tutti i sensori che desiderate (io ne ho inseriti solo 3 per rendere piu snello l'esempio) e potrete eventualmente eliminare o aumentare il tempo (delay) necessario prima che la sirena si attivi dopo che un sensore dia il segnale.
Andiamo a vedere invece come programmare l'allarme in caso di arm away:
La programmazione e' pressochè identica eccezione fatta per la presenza questa volta dei sensori volumetrici (sensori di presenza) che attiveranno l'allarme:
- alias: 'allarme se sensori attivati away'
trigger:
- platform: state
entity_id: binary_sensor.door_window_sensor_xxx
to: 'on'
- platform: state
entity_id: binary_sensor.door_window_sensor_yyy
to: 'on'
- platform: state
entity_id: binary_sensor.door_window_sensor_zzz
to: 'on'
- platform: state
entity_id: binary_sensor.motion_sensor_hhh
to: 'on'
condition:
- condition: state
entity_id: alarm_control_panel.allarme_casa
state: armed_away
action:
- service: alarm_control_panel.alarm_trigger
entity_id: alarm_control_panel.allarme_casa
- delay: 60
- service: switch.toggle
entity_id: switch.sirena_allarme
ovviamente anche in questo caso sostituirete le hhh con il nome del vostro sensore pir, questa automazione come l'altra permetterà, se l'allarme e' inserito in modalità away di far suonare la sirena dopo 60 secondi che uno dei sensori porta e finestre risulta aperto. Ovviamente potrete aggiungere tutti i sensori che desiderate (io ne ho inseriti solo 4 per rendere più snello l'esempio) e potrete eventualmente eliminare o aumentare il tempo (delay) necessario prima che la sirena si attivi dopo che un sensore da il segnale.
Bene adesso andiamo a vedere come creare l'automazione per disattivare l'allarme e di conseguenza fermare la sirena nel caso sia scattato. Copiate questo codice nel file automation.yaml :
- alias: "disattiva sirena"
trigger:
- platform: state
entity_id: alarm_control_panel.allarme_casa
to: disarmed
condition:
- condition: state
entity_id: switch.sirena_allarme
state: 'on'
action:
- service: switch.turn_off
entity_id: switch.sirena_allarme
Il nostro allarme è pronto!
Adesso vediamo come preparare la notifica Telegram in caso di attivazione/disattivazione oppure nel caso in cui l'allarme rilevi un intrusione.
Vi ricordate che nella guida relativa alle notifiche telegram vi avevo fatto mettere in white list una cartella chiamata photo? Benissimo, scaricate da internet 3 immagini che userete associate alla notifica Telegram. Le tre immagini dovranno raffigurare l'attivazione, la disattivazione e allarme attuato. Potrete scegliere quelle che vorrete e le potrete chiamare come vi aggrada anche se vi consiglio di chiamarle con un nome che raffiguri l'azione che andranno a compiere.
le mie 3 ad esempio le ho chiamate lucchettochiuso, lucchettoaperto e allarme
Copiatele appunto nella cartella photo a questo percorso sul vostro raspberry:
home/homeassistant/.homeassistant/photo
una volta fatto, andate nel vostro file automation.yaml ed incollate le seguenti automazioni:
- alias: 'allarme scattato'
hide_entity: true
trigger:
platform: state
entity_id: alarm_control_panel.allarme_casa
to: 'triggered'
action:
service: notify.telegram
data:
message: "ALLARME! qualcuno e' entrato in casa"
data:
photo:
- file: /home/homeassistant/.homeassistant/photo/allarme.jpg
caption: "ALLARME! qualcuno e' entrato in casa"
- alias: 'allarme attivato home'
hide_entity: true
trigger:
platform: state
entity_id: alarm_control_panel.allarme_casa
to: 'armed_home'
action:
service: notify.telegram
data:
message: "allarme inserito"
data:
photo:
- file: /home/homeassistant/.homeassistant/photo/lucchettochiuso.jpg
caption: "allarme inserito"
- alias: 'allarme attivato away'
hide_entity: true
trigger:
platform: state
entity_id: alarm_control_panel.allarme_casa
to: 'armed_away'
action:
service: notify.telegram
data:
message: "allarme inserito"
data:
photo:
- file: /home/homeassistant/.homeassistant/photo/lucchettochiuso.jpg
caption: "allarme inserito"
- alias: 'allarme disattivato'
hide_entity: true
trigger:
platform: state
entity_id: alarm_control_panel.allarme_casa
to: 'disarmed'
action:
service: notify.telegram
data:
message: "allarme disattivato"
data:
photo:
- file: /home/homeassistant/.homeassistant/photo/lucchettoaperto.jpg
caption: "allarme disattivato"
ovviamente metterete il nome dell'immagine che avrete scelto e potrete cambiare il messaggio che volete che telegram vi notifichi. Io ho inserito lo stesso messaggio e la stessa immagine sia per arm away che per arm home ma ovviamente se vorrete potrete creare due notifiche con messaggi e immagini diverse.
Anche per questa guida abbiamo concluso, vi ricordo di contattarci per ulteriori chiarimenti.
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.