Introduzione
Quando si parla di allarme casa, si pensa subito a un abbonamento mensile, magari costoso e ricorrente, oppure all’acquisto di hardware extra con un centro di controllo — la centrale — da nascondere in un armadietto. Con Home Assistant il ragionamento cambia: costruiamo un allarme domestico usando i sensori e l’hardware che abbiamo già.
In questa guida costruiamo quindi un allarme con Home Assistant senza centrale — il centro di controllo è Home Assistant stesso — usando il Manual Alarm Control Panel, un’integrazione nativa: zero HACS, zero acquisti, solo i sensori porta/finestra che già abbiamo. Partiamo da una configurazione semplice, pensata anche come base didattica: una volta capito il meccanismo, ognuno può evolverla in qualcosa di più complesso. Niente abbonamenti, niente hardware nuovo: solo YAML, i sensori che hai già, e notifiche push in tempo reale sul telefono.
Perché un allarme “fatto in casa” con Home Assistant
Alcune precisazioni prima di iniziare, per essere chiari su cosa non stiamo costruendo.
Innanzitutto non è un sistema certificato, non sostituisce un allarme con polizza assicurativa e vigilanza professionale. Un aspetto da tenere presente: se salta la corrente o cade la connessione internet, l’allarme smette di funzionare. Non abbiamo batterie di backup o una SIM dedicata come nei sistemi commerciali più evoluti.
Cosa costruiamo, allora? Un deterrente reale con notifiche immediate. Una volta armato il sistema, se la porta o le finestre vengono aperte lo saprai all’istante sul telefono, ovunque tu sia. Per la maggior parte delle case può bastare, magari affiancato a un progetto di videosorveglianza — con Home Assistant o con soluzioni native — che mi riservo di trattare in un articolo futuro.
Punto di forza: zero acquisti. Se possiedi già sensori porta/finestra che usi per altre automazioni (luci, riscaldamento, notifiche), non serve comprare altro. Aggiungiamo solo la logica, attraverso un componente nativo: l’Alarm Control Panel.
Come funziona l’Alarm Control Panel: la macchina a stati
Quando creiamo un pannello allarme, questo non si limita a dirci se è inserito o disinserito: gestisce un sistema leggermente più complesso, con varie casistiche spiegate qui sotto, per coprire anche la dimensione temporale dei vari stati. Per esempio, inseriamo l’allarme ma il sistema si trova in una fase di attesa perché abbiamo impostato che si armi effettivamente solo dopo 20 secondi — il tempo per uscire davvero di casa o dal perimetro. Ovviamente tutti questi stati, e i loro cambiamenti, possono essere usati come trigger per le automazioni.
La macchina a stati dell'Alarm Control Panel: dal disinserimento all'allarme scattato
Gli stati principali sono otto:
disarmed— sistema spento, nessun controllo attivoarming— stato di transizione: hai appena armato, ma il conto alla rovescia per uscire di casa non è ancora finitoarmed_home— armato in modalità “casa” (tipicamente solo porte/finestre, non i sensori interni)armed_away— armato in modalità “fuori casa” (perimetro completo)armed_night— armato per la nottearmed_vacation— armato per assenze prolungatepending— un sensore ha rilevato qualcosa, ma c’è ancora tempo per disarmare prima che scatti l’allarme vero e propriotriggered— l’allarme è scattato
A questi si aggiunge armed_custom_bypass, una modalità armata “personalizzata” che nella pratica quasi nessuno usa: serve a escludere volontariamente una parte dei sensori, e la logica di quali escludere la scrivi comunque tu nelle automazioni.
Il comportamento di questi stati è governato da timer: in particolare ne abbiamo tre, tutti modificabili con valori personalizzati.
| Timer | Cosa controlla | Default |
|---|---|---|
| arming_time | Quanto dura lo stato arming prima di passare effettivamente ad “armato”. È il tempo per uscire di casa dopo aver attivato il sistema | 60 secondi |
| delay_time | Quanto dura lo stato pending prima che l’allarme passi a triggered. È il tempo per disarmare al rientro, prima che scatti | 60 secondi |
| trigger_time | Quanto resta il sistema in stato triggered una volta scattato, prima di tornare allo stato precedente (o a disarmed) | 120 secondi |
arming_time
Quanto dura lo stato arming prima di passare effettivamente ad “armato”. È il tempo per uscire di casa dopo aver attivato il sistema
delay_time
Quanto dura lo stato pending prima che l’allarme passi a triggered. È il tempo per disarmare al rientro, prima che scatti
trigger_time
Quanto resta il sistema in stato triggered una volta scattato, prima di tornare allo stato precedente (o a disarmed)
Per esempio, se impostiamo e armiamo l’allarme con arming_time a 20 secondi, il sistema ci dà 20 secondi per uscire di casa prima che l’allarme diventi effettivamente attivo.
Il passaggio tra stati funziona così: inserisco l’allarme e lo stato passa ad arming; se durante questa fase (o dopo, da armato) un sensore rileva qualcosa, si passa a pending e hai ancora tempo per disarmare. Se invece non viene rilevato nulla, da arming si passa direttamente a uno degli stati armati (armed_home, armed_away, ecc.), a seconda della modalità scelta. Ognuno di questi stati “armati” può avere una configurazione diversa — lo vediamo nel prossimo capitolo con il blocco YAML.
Cosa ti serve prima di iniziare
Per iniziare serve davvero poco: nessun HACS, nessuna app diversa da quelle native, e i sensori porta/finestra che hai già (o che pensi di acquistare). Per questa guida uso un sensore Zigbee TS0203, che ho chiamato “Portone Varco”, installato sul telaio del mio portone d’ingresso:
Questo modello espone contact, battery, voltage, tamper e battery_low — vedremo tra poco come usare sia contact che tamper nell’automazione.
Configurare il Manual Alarm Control Panel in YAML
Come esempio, ecco la mia configurazione reale:
alarm_control_panel:
- platform: manual
name: "Allarme Casa"
unique_id: allarme_casa_wearesmart
code: !secret alarm_code
code_arm_required: true
arming_time: 30
delay_time: 20
trigger_time: 120
arming_states:
- armed_away
- armed_home
- armed_night
armed_home:
arming_time: 0
delay_time: 0Nota: nell’esempio uso
!secret alarm_codeinvece di scrivere il PIN in chiaro. Basta aggiungere una rigaalarm_code: "1234"nel filesecrets.yaml— così il codice non resta visibile nel file di configurazione principale. Il meccanismo è spiegato nella documentazione ufficiale sui secrets.
Questo blocco va inserito nel file configuration.yaml di Home Assistant. Sono ovviamente valori personali: modificali in base alle tue esigenze.
Perché questi tempi: 30s per uscire, 20s per disarmare al rientro
arming_time: 30 è il tempo che il sistema impiega per passare da “disinserito” a “inserito” effettivo. In pratica: hai 30 secondi per uscire di casa prima che l’allarme diventi davvero attivo.
delay_time: 20 fa l’esatto contrario. Quando rientri in casa hai 20 secondi per disarmare inserendo il codice, prima che il sistema faccia scattare l’allarme e invii la notifica di intrusione.
Nello stato armed_home, invece, mi trovo già dentro casa e voglio che il sistema si armi subito: imposto quindi 0 secondi sia per l’attivazione che per la disattivazione, con questo blocco specifico:
armed_home:
arming_time: 0
delay_time: 0Codice PIN
Ho anche impostato un codice obbligatorio per armare e disarmare: secondo me un sistema di allarme senza PIN non avrebbe molto senso. La richiesta del codice è comunque opzionale — se non vuoi usarla, basta impostare code_arm_required: false — ma per me resta un passaggio fondamentale.
Ripeto: questi valori rispecchiano le mie esigenze personali. 30 secondi per uscire di casa per me sono più che sufficienti, per altri potrebbero non bastare. Modifica i valori per trovare la configurazione giusta per te.
Il pannello nella dashboard
A questo punto possiamo creare il pannello sulla dashboard: si va su una dashboard, si inserisce una nuova card, e di default abbiamo 3 opzioni tra cui scegliere — una estesa (Alarm panel) e le altre più compatte (Tile e Tile - Alarm modes):
Io ne ho inserite un paio per farti vedere la differenza:
Quando creiamo la dashboard possiamo ovviamente posizionare le card dove preferiamo. Se muoverti tra card e sezioni non ti è ancora familiare, ne ho parlato in dettaglio nella guida su come aggiungere una card alla dashboard.
Nel video qui sotto vediamo come si comporta graficamente il sistema con il tempo che trascorre tra i vari stati di armamento (a differenza dello YAML sopra, nel video l’arming_time è stato accorciato a 10 secondi per comodità di ripresa):
Inserimento reale: da disarmed ad arming, poi armed, con il conto alla rovescia visibile
La creazione della dashboard con il pannello manuale è comunque opzionale: possiamo collegare l’armamento dell’allarme in automatico, per esempio alla posizione del telefono e alla presenza in casa. Creiamo un’automazione che dice: se ci allontaniamo da casa, arma automaticamente l’allarme. Così non dobbiamo fare più nulla, è tutto automatico — lo vediamo nel dettaglio più avanti.
Collegare i sensori porta/finestra esistenti
Ora siamo pronti per collegare i sensori e creare la prima automazione: far scattare l’allarme, che useremo nel passaggio successivo per notificare l’intrusione sul telefono.
alias: "Allarme - trigger su Portone Varco"
description: "Guida sull'allarme"
triggers:
- trigger: state
entity_id: binary_sensor.0xa4c138dccb4cb231_contact
to: "on"
- trigger: state
entity_id: binary_sensor.0xa4c138dccb4cb231_tamper
to: "on"
conditions:
- condition: state
entity_id: alarm_control_panel.allarme_casa
state:
- armed_away
- armed_home
- armed_night
actions:
- action: alarm_control_panel.alarm_trigger
target:
entity_id: alarm_control_panel.allarme_casa
mode: singleL’azione alarm_control_panel.alarm_trigger è una delle azioni standard esposte dal dominio: le trovi tutte nella documentazione dell’integrazione Alarm Control Panel. Se preferisci costruire questa automazione senza scrivere YAML, l’editor grafico basta e avanza: ho spiegato come usarlo nella guida sulle automazioni di Home Assistant senza codice.
Nota: il blocco che riguarda il
tamper, ovvero la manomissione, è facoltativo. Il dispositivo dispone di questo ulteriore passaggio di sicurezza: se qualcuno tenta di manomettere il sensore, si attiva l’allarme — ma ripeto, è del tutto facoltativo.
- trigger: state
entity_id: binary_sensor.0xa4c138dccb4cb231_tamper
to: "on"Nota tecnica: se rinomini un dispositivo dopo il pairing, Home Assistant a volte mantiene l’indirizzo IEEE originale nell’entity_id invece di aggiornarlo al nuovo nome — è il mio caso con 0xa4c138dccb4cb231. Verifica il tuo entity_id reale in Impostazioni → Entità prima di copiare il YAML.
Notifiche quando l’allarme scatta
Ora la notifica sul telefono:
alias: "Notifica allarme su mobile"
description: ""
triggers:
- trigger: state
entity_id: alarm_control_panel.allarme_casa
to: "triggered"
conditions: []
actions:
- action: notify.mobile_app_iphone_di_massimo
data:
title: "Allarme"
message: "Rilevata intrusione!"
mode: singleSostituisci notify.mobile_app_iphone_di_massimo con il tuo servizio notify reale — lo trovi in Impostazioni → App companion, o nella sezione notify degli Strumenti per sviluppatori. La struttura del servizio notify.mobile_app_* è descritta nella documentazione della companion app.
Per notifiche più avanzate — con immagini, pulsanti actionable o livello critico — ho scritto una guida dedicata: Notifiche avanzate in Home Assistant.
Armare e disarmare senza toccare YAML
Ora che abbiamo scritto tutto il codice YAML, per armare e disarmare l’allarme dovremmo aprire la dashboard di Home Assistant, andare sulla pagina o pannello dedicato, inserire il codice e armare manualmente. Vogliamo invece che tutto sia automatico, per esempio con la geolocalizzazione o con un tasto fisico. Vediamo come fare.
Geofencing: arma quando esci, disarma quando rientri
La logica è questa: armare l’allarme quando in casa non ci sono più persone. Andiamo su Automazioni e creiamo una nuova automazione. Come trigger mettiamo lo stato di un person — nel mio caso person.massimo — con passaggio a not_home. Come azione: alarm_control_panel.alarm_arm_away, ricordandoci di inserire il codice. Questo YAML è scritto per una sola persona in casa: se vuoi che l’allarme non si attivi quando esce solo una persona ma le altre restano dentro, nella condizione devi verificare che tutte le person abbiano stato not_home.
alias: "Armare allarme con geolocalizzazione"
description: "Arma l'allarme quando esco di casa"
triggers:
- trigger: state
entity_id: person.massimo
to: "not_home"
conditions: []
actions:
- action: alarm_control_panel.alarm_arm_away
target:
entity_id: alarm_control_panel.allarme_casa
data:
code: !secret alarm_code
mode: singlePulsante fisico: arma e disarma con una pressione
Se hai uno Smart Knob o un pulsante Zigbee vicino all’ingresso, puoi assegnargli arm/disarm con una pressione, senza aprire l’app. Creiamo sempre una nuova automazione e assegniamo un’azione a uno dei tasti che vogliamo.
alias: "Armare allarme con hold destro - pulsante cucina"
description: ""
triggers:
- trigger: device
domain: mqtt
device_id: 68a561af3dfbdfc305748ef82d6ac0ec
type: action
subtype: hold_right
conditions: []
actions:
- action: alarm_control_panel.alarm_arm_away
target:
entity_id: alarm_control_panel.allarme_casa
data:
code: !secret alarm_code
mode: singleIl device_id è specifico della mia installazione — sostituiscilo con quello del tuo pulsante, lo trovi in Impostazioni → Dispositivi.
Questi due esempi sono davvero semplici da implementare, eppure risolvono un problema concreto di frizione: aprire l’app, inserire il codice e così via fa perdere tempo. Automatizzando, tutto diventa più rapido e più fluido. Questa secondo me è la strada migliore.
La mia configurazione reale
Tutti gli esempi e le impostazioni che vedi sopra provengono dalla mia configurazione reale, con le migliorie che ho apportato nel tempo. Non è un concetto difficile, e le cose da implementare non sono complesse. Come ripeto, questo sistema non sostituisce impianti di allarme evoluti e professionali, ma ci aiuta a tenere la casa un po’ più sicura.
Il concetto di “armare l’allarme” è ovviamente collegato ai sensori porta/finestra, ma anche alle notifiche sul telefono e all’attivazione di altri sensori, che quando siamo in casa fanno cose diverse rispetto a quando siamo fuori. Per esempio, abbiamo già parlato di simulazione di presenza in Home Assistant: possiamo far partire la simulazione proprio a partire dal momento in cui armiamo l’allarme.
Un ultimo consiglio pratico: dopo qualche giorno di uso reale vale la pena aprire il registro attività e ripercorrere i cambi di stato del pannello. È il modo più veloce per capire se i tempi che hai scelto sono davvero adatti alle tue abitudini, o se stai correndo verso il telefono ogni volta che rientri.
Estensioni: dal radar mmWave alla simulazione di presenza
In un altro articolo abbiamo parlato del radar mmWave per la luce di ingresso, che uso soprattutto per l’accoglienza all’ingresso: accensione luci, verifica presenza. Il mio si trova all’esterno, e quando armo l’allarme potrei impostarlo per inviare una notifica se registra movimento. Quando sono in casa svolge un compito, quando sono via ne svolge un altro.
Alarmo: l’alternativa HACS se vuoi di più
Per dovere di cronaca, su HACS esiste anche un componente aggiuntivo chiamato Alarmo, per chi cerca qualcosa di più completo (e più complesso). Devo essere sincero: non l’ho mai usato e non l’ho testato approfonditamente, quindi te lo cito per completezza, senza esprimere un giudizio. È comunque scaricato moltissimo e ha molte stelle su GitHub.
Non l’ho mai utilizzato perché non ne ho sentito il bisogno: il componente nativo è più che sufficiente, e con qualche automazione in più possiamo ottenere praticamente tutto quello che vogliamo. Aggiungere un ulteriore grado di complessità non è il mio modo di vedere la domotica — preferisco che sia semplice, di aiuto e di supporto, non un’altra cosa da mantenere.
Ti lascio comunque una breve tabella comparativa per quello che ho potuto constatare:
| Criterio | Manual Alarm Control Panel | Alarmo (HACS) |
|---|---|---|
| Tipo di integrazione | Nativa (Core) | Custom, indice ufficiale HACS |
| Configurazione | Solo YAML | UI completa |
| Modalità supportate | Fino a 5 | Fino a 4-5, da UI |
| PIN multi-utente | No | Sì |
| Aree multiple | No | Sì |
| Difficoltà setup | Bassa | Media |
Tipo di integrazione
Configurazione
Modalità supportate
PIN multi-utente
Aree multiple
Difficoltà setup
Domande frequenti
Serve HACS per creare un allarme in Home Assistant?
No: il Manual Alarm Control Panel usato in questa guida è un’integrazione nativa, disponibile di default in ogni installazione. HACS serve solo se vuoi passare ad Alarmo o ad altre soluzioni custom con più funzionalità.
Home Assistant può sostituire un sistema di allarme assicurativo?
No. Quello che costruiamo qui è un deterrente con notifiche in tempo reale, non un sistema certificato con vigilanza professionale. Se la tua assicurazione richiede un impianto certificato, questa guida non è un sostituto.
Cosa succede se internet o la corrente cadono?
L’allarme smette di funzionare: non ci sono batterie di backup né una SIM dedicata come nei sistemi commerciali evoluti. È uno dei limiti da tenere presente nella scelta.
Posso usare più sensori nella stessa automazione?
Sì, e in una casa reale è la norma. Basta aggiungere altri blocchi trigger: state con gli entity_id degli altri sensori porta e finestra: la logica del pannello e il resto dell’automazione restano identici.
Conclusione
Costruire un allarme con Home Assistant senza centrale non richiede acquisti né componenti aggiuntivi: bastano il Manual Alarm Control Panel, i sensori porta e finestra che hai già in casa, e tre automazioni. Il valore non è nel singolo blocco YAML, ma nel fatto che l’allarme diventa un pezzo del resto della casa: può accendere le luci, far partire la simulazione di presenza, cambiare il comportamento dei sensori quando esci.
Resta un deterrente, non un impianto certificato — e ci tengo a ripeterlo. Ma è un deterrente che ti avvisa in tempo reale, che non costa nulla al mese, e che puoi modificare esattamente come vuoi. Per la mia casa, da un paio d’anni, è più che sufficiente.

