Xiaomi Mi Smart Home e Home Assistant si possono utilizzare insieme per creare un antifurto casa e per automatizzare la nostra abitazione per renderla una Casa Domotica.
In quest’articolo vedremo come integrare i prodotti Xiaomi Mi Smart Home all’interno dei Home Assistant (Hass.io) installato su Raspberry Pi 3, i prodotti Xiaomi / Aqara compatibili sono:
- Sensore di temperatura e umidità (1a e 2a generazione)
- Sensore di movimento (1a e 2a generazione)
- Sensore di porte e finestre (1a e 2a generazione)
- Pulsante (1a e 2a generazione)
- Presa smart intelligente (versione Zigbee, segnala consumo, carico di alimentazione, stato e se il dispositivo è in uso)
- Aqara Wireless Switch (Single)
- Aqara Wireless Switch (doppio)
- Xiaomi Mi Magic Controller (cubo)
- Rilevatore di perdite di gas (segnala allarme e densità)
- Rilevatore di fumo (segnala allarme e densità)
- Gateway Smart Home (controlli luce, sensore di illuminazione e suoneria)
- Motore Tenda Smart
- Sensore di perdite d’acqua
Si tratta di un antifurto per la casa fai da te e non di tipo professionale, se sei alla ricerca di un sistema d’allarme per la casa di tipo professionale ti consiglio di leggere la recensione sul’allarme per casa di Ajax, probabilmente uno dei migliori come rapporto qualità/prezzo.
Xiaomi Mi Smart Home e Home Assistant (Hass.io) su Raspberry Pi 3 per la Casa Domotica
Per usare Xiaomi Mi Smart Home Gateway e i vari sensori con Home Assistant devi aver già acquistato Raspberry Pi 3 aver installato Hassi.io (Home Assistant) seguendo la procedura descritta nell’articolo: Come installare Home Assistant su Raspberry Pi 3 – Hass.io.
Inoltre devi avere uno Xiaomi Mi Smart Gateway di seconda generazione e aver configurato Gateway e sensori all’interno dell’applicazione Mi Home, per maggiori dettagli puoi leggere quest’articolo: Xiaomi Mi Smart Home come Allarme per la Casa Domotica.
Home Assistant (Hass.io) – Configurare Xiaomi Mi Smart Home Gateway
Una volta installato Home Assistant su Raspberry Pi 3 e aver installato e configurato Xiaomi Mi Gateway all’interno dell’applicazione Mi Home sarà molto semplice poter utilizzare il Gateway e i sensori Xiaomi Mi Smart Home all’interno di Home Assistant.
Il mio consiglio è quello di procedere per gradi, iniziare la configurazione con il gateway e pochi sensori, poi aggiungere successivamente i nuovi sensori, uno alla volta, questo per non creare troppa confusione.
Xiaomi Mi Smart Home Gateway come attivare le funzioni sviluppatore e local area network communication protocol
Aprire l’applicazione Mi Home sul proprio smartphone android, quindi tra l’elenco dei dispositivi selezionare il Mi Home Gateway di seconda generazione, nella schermata successiva fare tap sull’icona con tre puntini orizzontali in alto a destra dello schermo.
Fare tap su “about“, quindi attivare la modalità sviluppatore con tap ripetuti sulla scritta Version: 2.49.3 (la vostra versione potrebbe essere differente), a questo punto verranno visualizzate nuove voci, fare tap su “local area network communication protocol“.
Attivare il pulsante “local area network communication protocol” e memorizzare la password, andrà inserita nel file configuration.yaml su Home Assistant, tap su OK.
Sempre nella schermata about fare tap su “gateway information” e copiare il MAC ADDRESS (MAC: 28:xx:xx:yy:zz:x6) questo serve solo se avete intenzione di configurare più di uno Xiaomi Smart Home Gateway all’interno di Home Assistant
Ora passiamo alla configurazione su Home Assistant.
Come configurare Home Assistant per accedere a Xiaomi Mi Smart Home Gateway e relativi sensore associati
Aprire il file configuration.yaml e inserire il codice:
[code language=”python”]
# Xiaomi Aqara
xiaomi_aqara:
gateways:
– mac: !secret mac_mi_gateway_alarm
key: !secret key_mi_gateway_alarm
– mac: !secret mac_mi_gateway_smart_home
key: !secret key_mi_gateway__smart_home
[/code]
Key è la password precedentemente salvata, mac è l’indirizzo MAC. Riavviare Home Assistant.
Se tutto è andato per il verso giusto raggiungendo la schermata principale di Home Assistant e cliccando in States sotto la scritta Developer Tools dovreste trovare dei valori tipo:
- binary_sensor.door_window_sensor_158d0000efa0e2 (sensore porta finestra)
- binary_sensor.motion_sensor_158d0000ed3333 (sensore di movimento)
- binary_sensor.switch_158d0000eff3fd (pulsante smart)
- light.gateway_light_286c0785f1f6 (luce del Xiaomi Mi Gateway)
Ora ogni volta che verrà aggiunto un nuovo prodotto Xiaomi Mi Smart Home compatibile verrà aggiunto automaticamente a Home Assistant e si potrà utilizzare all’interno delle proprie automazioni e dell’allarme di casa realizzato con Home Assistant.
Xiaomi Mi Gateway come usarlo con Home Assistant per fare un Allarme Casa
Purtroppo Home Assistant non supporta l’attivazione/disattivazione dell’allarme sul Xiaomi Mi Gateway, cosa che si può fare solo attraverso l’applicazione Mi Home, l’unica cosa che possiamo fare è quella di far suonare l’allarme su Mi Gateway come se riproducessimo un file multimediale, quindi non riceveremo la notifica che sta suonando l’allarme da parte di Mi Home, a meno che non si stato attivato dall’applicazione Mi Home.
Ma vediamo di fare chiarezza con un esempio pratico, supponiamo di avere il Xiaomi Mi Gateway un sensore di movimento e un sensore porta finestra, l’idea è quella che di, una volta attivato l’allarme interno di Home Assistant, far suonare il Mi Gateway se viene rilevato un movimento oppure la porta/finestra viene aperta.
Home Assistant integra al suo interno un allarme generico manuale, che il cui nome di default è “HA Alarm” per attivare quest’allarme è sufficiente scrivere questo codice nel file configuration.yaml:
[code language=”python”]
alarm_control_panel:
– platform: manual
[/code]
Per il mio esempio io inserirò questo codice personalizzato:
[code language=”python”]
alarm_control_panel:
– platform: manual
name: Home Alarm
pending_time: 0
disarmed:
trigger_time: 0
armed_home:
pending_time: 0
delay_time: 0
armed_away:
pending_time: 30
delay_time: 20
[/code]
Analizziamo un attimo il codice, innanzitutto bisogna sapere che è possibile attivare l’allarme quando si è in casa “Armed Home” oppure quando si è fuori casa “Armed Away“, in questo modo possiamo suddividere i diversi sensori e, per esempio, escludere i sensori di movimento interni alla nostra abitazione quando siamo in casa e attiviamo l’allarme.
Ho configurato l’allarme per attivarsi dopo 30 secondi dal suo inserimento: pending_time: 30
, questo solo per “armed_away“, così ho 30 secondi per uscire di casa senza far suonare l’allarme, in gergo viene chiamato “ritardo di uscita“, allo stesso modo ho impostato il “tempo d’ingresso” (delay_time) su 20 secondi per avere il tempo di disattivare l’allarme una volta entrato in casa, per maggiori dettagli raggiungere la pagina Manual Alarm Control Panel sul sito di Home Assistant.
Il passo successivo è quello d’inerire il pannello di attivazione disattivazione allarme nel frontend di Home Assistant, io ho inserito nel file groups.yaml questo codice:
[code language=”python”]
default_view:
view: yes
entities:
– group.soggiorno
– group.ufficio
– group.firstfloor
– group.allarme
allarme:
name: Sicurezza Casa
view: yes
entities:
– binary_sensor.people_home
– group.aeotech_multisensor
– group.presence
– group.mi_alarm
– group.mi_smart_home
– group.telecamere_sicurezza
– group.inserisci_allarme
Inserisci Allarme:
– alarm_control_panel.home_alarm
[/code]
La prima parte (default_view) indica quali gruppi visualizzare nel frontend, poi ho creato il gruppo inserisci allarme (group.inserisci_allarme), con il pannello di controllo dell’allarme, che poi ho incluso nel gruppo allarme, il risultato è mostrato nella figura sotto.
Cliccando sul collegamento si apre una finestra come questa.
Cliccando su “ARM AWAY” attiviamo l’arme quando siamo fuori casa, mentre cliccando su “ARM HOME” attiviamo l’allarme quando siamo in casa.
Al momento attivando l’allarme non succede nulla perché dobbiamo ancora “creare” il nostro antifurto fai da te per la casa domotica realizzato con i prodotti Xiaomi Mi Home.
Senza entrare troppo nei dettagli scrivo direttamente il codice da copiare e incollare in modo da rendere più semplice la configurazione dell’allarme casa.
Creare un file scripts.yaml all’interno della cartella \\hassio\config\includes\ sul nostro Raspberry Pi 3 con installato Hass.io, abbiamo già visto io un altro articolo come fare per accedere ai file di configurazione di Home Assistant attraverso la rete LAN sfruttando Samba.
Includere il file scripts.yaml in configuration.yaml:
[code language=”python”]
script: !include includes/scripts.yaml
[/code]
Nel file scripts.yaml inserire questo codice
[code language=”python”]
### Scripts to play gateway sounds ###
play_sel_sound:
alias: "Loop Play Sound"
sequence:
– condition: state
entity_id: input_boolean.mute_gateway_sounds
state: ‘off’
– service: xiaomi_aqara.play_ringtone
data_template:
gw_mac: !secret mac_mi_gateway_alarm
ringtone_id: 10001
ringtone_vol: 100
– delay:
seconds: 5
– service: script.play_sel_sound_loop
play_sel_sound_loop:
alias: "Play selected sound in Loop"
sequence:
– condition: state
entity_id: input_boolean.mute_gateway_sounds
state: ‘off’
– delay:
seconds: 1
– service: script.play_sel_sound
# CANCEL Siren when Disarm – refer to Automation
xiaomi_alarm_siren_cancel:
alias: Stop Siren
sequence:
– delay:
seconds: 1
– service: script.turn_off
data:
entity_id: script.play_sel_sound
– service: script.turn_off
data:
entity_id: script.play_sel_sound_loop
[/code]
Analizziamo brevemente il codice degli script.
Scripts to play gateway sounds
Il primo script quando viene eseguito fa suonare la suoneria 10001 (ringtone_id: 10001) al massimo volume (ringtone_vol: 100) sul Xiaomi Mi Gateway con determinato indirizzo MAC (gw_mac: !secret mac_mi_gateway_alarm), dopo 5 secondi (seconds: 5) attiva lo script “script.play_sel_sound_loop”, tutto questo accade solo se entity_id: input_boolean.mute_gateway_sounds
è su “off”.
input_boolean.mute_gateway_sounds è un’entità che creiamo noi, andando a inserire questo codice all’interno del file configuration.yaml, serve se vogliamo silenziare la suoneria quando viene attivato, opzionale.
[code language=”python”]
input_boolean:
mute_gateway_sounds:
name: Mute
icon: mdi:volume-off
[/code]
play_sel_sound_loop
Lo script ” play_sel_sound_loop” server per creare un loop per far suonare l’allarme in modo continuativo.
xiaomi_alarm_siren_cancel
Lo script xiaomi_alarm_siren_cancel serve per interrompere riproduzione della suoneria sul Xiaomi Mi Gateway.
L’elenco delle suonerie con relativi codici lo trovi su sito Home Assistant, la prima suoneria personalizzata che carichi con il tuo smartphone sul Xiaomi Mi Gateway avrà come ringtone_id il valore 10001 e così via, nel mio esempio quindi uso una suoneria personalizzata, puoi scaricarla da qui.
Il passo successivo è quello di creare un’automazione, io tutte le automazioni le scrivo in un file nome_automazione.yaml che inserisco nella cartella \hassio\config\includes\automation che ho incluso nel file configuration.yaml grazie a questo codice:
[code language=”python”]
automation: !include_dir_merge_list includes/automation/
[/code]
Così ho creato il file mi_home.yaml con all’interno questo codice:
[code language=”python”]
### Play specific sound while alarm is arming ###
– alias: "Alarm arm pending"
trigger:
platform: state
entity_id: alarm_control_panel.home_alarm
from: ‘disarmed’
to: ‘pending’
action:
### Turn off gateway mute to play sound ###
– service: input_boolean.turn_off
data:
entity_id: input_boolean.mute_gateway_sounds
### Play ringtone sound in loop until arm is done ###
– service: xiaomi_aqara.play_ringtone
data:
gw_mac: !secret mac_mi_gateway_alarm
ringtone_id: 10006
ringtone_vol: 100
– alias: "Auto Arm Alarm if Away"
trigger:
platform: state
entity_id: group.all_devices
from: ‘home’
to: ‘not_home’
for:
minutes: 1
condition:
– condition: state
entity_id: alarm_control_panel.home_alarm
state: disarmed
action:
– service: alarm_control_panel.alarm_arm_away
data:
entity_id: alarm_control_panel.home_alarm
– alias: "Auto Disarm Alarm if Home"
trigger:
platform: state
entity_id: group.all_devices
from: ‘not_home’
to: ‘home’
for:
seconds: 10
condition:
– condition: state
entity_id: alarm_control_panel.home_alarm
state: armed_away
action:
– service: alarm_control_panel.alarm_disarm
data:
entity_id: alarm_control_panel.home_alarm
– alias: ‘Trigger alarm while armed away’
trigger:
– platform: state
entity_id: binary_sensor.motion_sensor_158d00015dbf8f
to: ‘on’
– platform: state
entity_id: binary_sensor.motion_sensor_158d0000ed3333
to: ‘on’
– platform: state
entity_id: binary_sensor.motion_sensor_158d00015dc039
to: ‘on’
– platform: state
entity_id: binary_sensor.door_window_sensor_158d0000efa0e2
to: ‘on’
condition:
– condition: state
entity_id: alarm_control_panel.home_alarm
state: armed_away
action:
– service: alarm_control_panel.alarm_trigger
entity_id: alarm_control_panel.home_alarm
### Play Sound Mi Gateway when the alarm is triggered###
– alias: ‘Play Mi Sound when alarm triggered’
trigger:
platform: state
entity_id: alarm_control_panel.home_alarm
to: ‘triggered’
action:
– service: input_boolean.turn_off
data:
entity_id: input_boolean.mute_gateway_sounds
– service: homeassistant.turn_on
data:
entity_id: switch.plug_158d00015f0a93
– service: script.play_sel_sound
### Turn off Xiaomi gateway ###
– alias: "Stop Alarm"
trigger:
platform: state
entity_id: alarm_control_panel.home_alarm
to: ‘disarmed’
action:
– service: script.xiaomi_alarm_siren_cancel
– service: xiaomi_aqara.stop_ringtone
data:
gw_mac: !secret mac_mi_gateway_alarm
– service: xiaomi_aqara.stop_ringtone
data:
gw_mac: !secret mac_mi_gateway_smart_home
– service: input_boolean.turn_on
data:
entity_id: input_boolean.mute_gateway_sounds
– service: homeassistant.turn_off
data:
entity_id: switch.plug_158d00015f0a93
### Sending a notification when the alarm is triggered###
– alias: ‘Send notification when alarm triggered’
trigger:
platform: state
entity_id: alarm_control_panel.home_alarm
to: ‘triggered’
action:
– service: notify.telegram_home
data:
message: "ALLARME Intrusione!"
### Sending a notification when the alarm is Arm###
– alias: ‘Send notification when alarm is Arm Away’
trigger:
platform: state
entity_id: alarm_control_panel.home_alarm
to: ‘armed_away’
action:
– service: notify.telegram_home
data:
message: "ATTIVATO Allarme!"
### Sending a notification when the alarm is Arm###
– alias: ‘Send notification when alarm is disarmed’
trigger:
platform: state
entity_id: alarm_control_panel.home_alarm
to: ‘disarmed’
action:
– service: notify.telegram_home
data:
message: "DISATTIVATO Allarme!"
[/code]
Analizziamo brevemente il codice:
Play specific sound while alarm is arming
Questo codice mi permette di far suonare una suoneria di 30 secondi, il tempo per uscire di casa, che ho creato io, quando lo stato dell’allarme passa da “disarmed” a “pending“, cioè quando lo attiviamo dal panello di controllo. Se vuoi puoi scaricare la suoneria da qui
Auto Arm Alarm if Away
Ho creato un’automazione che attiva automaticamente l’allarme quando non c’è nessuno in casa, ovvero quando il gruppo group.all_devices
passa da “home” a “not_home“, questo accade solo se tutti i device del gruppo sono “not_home“, all’interno del gruppo ho inserito il mio smartphone e quello di mia moglie. Per maggiori dettagli puoi leggere l’articolo: Automazioni in base alla geolocalizzazione dei propri device – Home Assistant, consiglio di utilizzare Nmap per il tracking dei device, che sfrutta la connessione alla rete WiFi di casa, l’aggiornamento della posizione con OwnTracks non è immediato.
Auto Disarm Alarm if Home
In questo caso l’allarme si disattiva appena uno dei device nel gruppo group.all_devices
passa da “not_home” a “home“, nel mio caso succede quando si collega alla rete wifi di casa.
Trigger alarm while armed away
Questa è la parte più importante del nostro allarme di casa realizzato con i prodotti Xiaomi Mi Smart Home, Raspberry Pi 3 e Home Assistant.
Quando uno dei sensori da me indicati viene eccitato (trigger), in questo esempio passa dalla condizione “off” a “on“, se l’allarme è inserito (condition armed_away), allora l’allarme da inserito passa ad attivo (action service: alarm_control_panel.alarm_trigger). Ora il nostro allarme è stato “eccitato” si è attivato significa che c’è stata un’intrusione, in questa condizione (triggered) possiamo eseguire tutte le automazioni del caso, far suonare una sirena, inviare una notifica sul nostro smartphone, far suonare il Xiaomi Mi Gateway ecc.
Play Sound Mi Gateway when the alarm is triggered
Questa automazione esegue lo script script.play_sel_sound
, visto in precedenza, solo se alarm_control_panel.home_alarm
è su “triggered“, oltre a questo ho inserito anche l’attivazione della presa intelligente Xiaomi (switch.plug) collegata ad una sirena per interni, eventualmente si può collegare anche ad un sirena esterna.
Stop Alarm
Questo codice permette di interrompere la riproduzione della suoneria quando disattiviamo l’allarme, imposto il valore di input_boolean.mute_gateway_sounds
su “on” e spengo la presa intelligente Xiaomi per disattivare la sirena.
Send notification when alarm triggered
Questo codice lo utilizzo per inviarmi una notifica su Telegram, in particola la invio in un canale privato da me creato dove ho aggiunto anche mia moglie. La notifica arriva quando l’allarme suona con al suo interno il messaggio “ALLARME Intrusione!”. Per configurare l’invio di notifiche ad un canale Telegram utilizzo questo codice:
[code language=”python”]
# Telegram
notify:
– name: telegram_home
platform: telegram
chat_id: !secret telegram_chat_id
[/code]
chat_id è l’ID del mio canale Telegram privato, per trovare questo valore bisogna seguire una procedura che vedremo in seguito, è molto importate essere avvisati quando suona l’allarme.
Send notification when alarm is Arm Away
Ricevo un notifica sul canale Telegram quando viene attivato l’allarme.
Send notification when alarm is disarmed
Ricevo un messaggio sul canale Telegram quando l’allarme viene disattivato.
Come inviare messaggi/notifiche ad un canale Telegram privato con Home Assistant e trovare il chat id
La prima cosa da fare è creare un nuovo boot che poi inseriremo tra gli amministratori del nostro canale privato.
Cercare il BotFather e creare un uovo boot digitando nella casella messaggio: /newbot
Scegliere il nome per il nuovo boot, invio.
Scegliere uno username per il bot, deve terminare con bot, invio.
Ora il bot è stato creato e viene visualizzata la HTTP API o API Token che va copiata perché ci servirà per trovare la chat id o id del gruppo/canale.
Creare un nuovo canale telegram, dalla schermata principale tap sul simbolo del menù in alto a sinistra, tap su nuovo canale.
Dare un nome al canale, volendo si può personalizzare anche con una foto e una descrizione.
Selezionare canale pubblico, questo è importante altrimenti non riusciremo a trovare l’id del canale, una volta trovato l’ID, renderemo il canale privato, scegliere un link per il canale e poi tap sul simbolo di spunta per salvare le impostazioni.
Ora Telegram chiede di aggiungere dei contatti al tuo canale, per il momento lasciamo stare questa parte, in seguito potrete aggiungerne altri contatti, tap sul simbolo di spunta e il canale viene creato.
Su nostro canale ci sarà sol un contatto, ovvero noi, aggiungiamo come amministratore il bot creato in precedenza.
Tap in alto sul nome del canale, tap su impostazioni (simbolo ingranaggio in alto a destra), tap su amministratori, tap su Aggiungi amministratore, tap sul simbolo di ricerca e inserire il nome del bot in precedenza creato, seleziona il bot, fornire tutte le autorizzazioni tranne quella di creare nuovi amministratori, tap sul simbolo spunta per salvare la configurazione.
Inviare un messaggio qualsiasi al canale, in modo che ci sia almeno un messaggio, altrimenti le fasi successive non andranno a buon fine.
A questo punto saremo in grado di scoprire l’ID del nostro canale Telegram, per ottenere l’ID si dovrà inviare una richiesta HTTP, questo significa copiare nella barra degli indirizzi del vostro browser preferito l’URL mostrato sotto (opportunamente modificato) e cliccare su invio.
https://api.telegram.org/botYOUR_API_TOKEN/getUpdates
dove YOUR_API_TOKEN va sostituito con API Token copiato al termine della creazione del bot che abbiamo aggiunto come amministratore al nostro canale, attenzione “bot” va lasciato.
Inviata la richiesta HTTP avremo una risposta del tipo {"ok":true,"result":[{"update_id":6xxxxxx,
come mostrato nella figura sotto.
"channel_post":{"message_id":2,"chat":{"id":-100xxxxxxxx,"title":
Copiare il valore chat id, in questo caso è -100xxxxxxxx
, e inserirlo nel file configuration.yaml
In ultimo dobbiamo rendere privato il canale, per fare questo andare su Telegram, selezionare il canale, impostazioni, info canale quindi selezionare Canale Privato, tap sul simbolo di spunta per salvare le impostazioni.
Home Assistant e Xiaomi Mi Smart Home come allarme per la Casa Domotica – Conclusioni
Abbiamo visto come creare un antifurto per la casa utilizzando Raspberry Pi 3 con installato Home Assistant (hass.io) sfruttando Xiaomi Mi Gateway e relativi sensori Xiaomi / Aqara Smart Home.
In questo esempio ho inserito solo pochi sensori, ma si possono inserire molti altri sensori Xiaomi / Aqara. Il bello di utilizzare Home Assistant e che a questi sensori se ne possono aggiungere altri di marche differenti, per esempio io utilizzo anche il multisensore Z-Wave Aeon Aeotec Multi Sensor 6 Gen 5, che comprende sensore di luminosità, umidità, temperatura, movimento, vibrazione e raggi UV, che può stare anche all’esterno a patto che sia in una posizione riparata dalla pioggia.
Nei prossimi articoli aggiungeremo altri sensori al sistema d’allarme di casa fai da te (DIY) per renderlo ancora più sicuro, una delle prime cosa da fare è collegare il modem router wifi e Raspberry Pi 3 ad un gruppo di continuità economico, io utilizzo Itek ITUGP848.
A questo gruppo di continuità si può anche collegare uno switch di rete PoE, in modo da poter alimentare anche telecamere e altri prodotti che richiedono correnti da 5v a 12v, per esempio io Raspberry Pi 3 lo alimento con un PoE Splitter 5V 2A collegato ad uno switch PoE.
Di seguito i link per acquistare altri prodotti Xiaomi / Aqara Mi Smart Home.
- Sensore di temperatura e umidità (1a e 2a generazione)
- Sensore di movimento (1a e 2a generazione)
- Sensore di porte e finestre (1a e 2a generazione)
- Pulsante (1a e 2a generazione)
- Presa smart intelligente (versione Zigbee, segnala consumo, carico di alimentazione, stato e se il dispositivo è in uso)
- Aqara Wireless Switch (Single)
- Aqara Wireless Switch (doppio)
- Xiaomi Mi Magic Controller (cubo)
- Rilevatore di perdite di gas (segnala allarme e densità)
- Rilevatore di fumo (segnala allarme e densità)
- Gateway Smart Home (controlli luce, sensore di illuminazione e suoneria)
- Motore Tenda Smart
- Sensore di perdite d’acqua