Sullo schermo dell'auto, aprendo Home Assistant, vedo una lista corta: «🚗 Esco di casa», «🏠 Arrivo a casa», «📋 Stato casa», «🤖 Robot pulisci», «🤖 Robot alla base». Un tocco e lo script parte. E quando esco dal cancello con qualcosa rimasto acceso, o quando mi avvicino a casa con l'allarme armato, sullo schermo arriva una notifica con due pulsanti.
Home Assistant gira in Docker su un mini PC di casa, il telefono è un Android con l'app ufficiale. A casa ci sono l'allarme Blink, luci e prese Smart Life, un condizionatore e una caldaia Tuya, un sensore gas, il robot Dreame e un gateway WhatsApp che manda conferme e avvisi. Questa guida racconta come li ho portati in macchina.
🚫 Perché niente dashboard
Volevo «una dashboard per Android Auto». Non esiste: Android Auto non mostra pagine web né dashboard Lovelace. L'app Home Assistant però ha un supporto diretto per Android Auto: mostra elenchi di entità (script, scene, luci, interruttori, pulsanti), una lista di Preferiti e le notifiche inviate con l'opzione car_ui: true.
Quindi la «dashboard» diventa un'altra cosa: pochi script fatti bene, con nomi chiari ed emoji, da mettere nei Preferiti, più notifiche con pulsanti per i due momenti in cui serve davvero, l'uscita e l'arrivo.
Il nome dello script è l'unica cosa che vedo prima di toccarlo, quindi deve dire da solo cosa succede. L'emoji in testa aiuta a riconoscerlo con un'occhiata, senza leggere. E ogni script deve fare tutto il lavoro da solo: in macchina non c'è spazio per scegliere opzioni o confermare passaggi intermedi.
🧱 L'architettura
→
→
Da fuori casa il telefono raggiunge Home Assistant con Tailscale, senza aprire porte sul router e senza servizi cloud: telefono e server sono nella stessa tailnet, e nell'app l'URL esterno è il nome Tailscale del server, con la porta di Home Assistant. L'ho raccontato in monitorare il mini PC.
📜 Gli script
Tutto sta in un package YAML. Il primo pezzo è lo script che manda le notifiche all'auto. Riceve titolo, messaggio e pulsanti e chiama il servizio di notifica del telefono con le opzioni giuste: car_ui per farla comparire sullo schermo dell'auto, un canale dedicato, priorità alta e un tag fisso, così la notifica nuova sostituisce la vecchia invece di accumularsi.
Avere un solo script per tutte le notifiche dell'auto ha un vantaggio pratico: le opzioni stanno in un posto solo. Se un giorno voglio cambiare il canale o la priorità, lo faccio lì e vale per uscita, arrivo e stato casa insieme.
script:
auto_notifica:
alias: Notifica in auto
fields:
titolo: {}
messaggio: {}
pulsanti: {}
sequence:
- action: notify.mobile_app_telefono
data:
title: "{{ titolo }}"
message: "{{ messaggio }}"
data:
car_ui: true
channel: Auto
importance: high
tag: auto
actions: "{{ pulsanti | default([]) }}"
🚗 Esco di casa
Spegne luci e condizionatore se sono accesi, arma l'allarme e manda un riepilogo. La lista si filtra prima: has_value scarta le entità che non rispondono, reject('is_state', 'off') quelle già spente.
auto_esco:
alias: "🚗 Esco di casa"
sequence:
- variables:
da_spegnere: >-
{{ ['light.studio', 'light.cucina', 'light.esterno', 'climate.condizionatore']
| select('has_value') | reject('is_state', 'off') | list }}
- if: "{{ da_spegnere | count > 0 }}"
then:
- action: homeassistant.turn_off
target:
entity_id: "{{ da_spegnere }}"
- action: alarm_control_panel.alarm_arm_away
target:
entity_id: alarm_control_panel.casa
- action: script.auto_notifica
data:
titolo: "🚗 Casa chiusa"
messaggio: "🛡️ Allarme armato · 💡 spenti: {{ da_spegnere | count }}"
🏠 Arrivo a casa
Disarma l'allarme riusando lo script che manda anche la conferma su WhatsApp, e accende le luci esterne solo se il sole è sotto l'orizzonte, secondo sun.sun.
auto_arrivo:
alias: "🏠 Arrivo a casa"
sequence:
- action: script.allarme_disarma
- if:
- condition: state
entity_id: sun.sun
state: below_horizon
then:
- action: light.turn_on
target:
entity_id: light.esterno
📋 Stato casa
Un'unica notifica con allarme, luci accese, temperatura interna, clima, gas e robot. Gli stati arrivano in inglese (armed_away, docked…), quindi una piccola mappa li traduce in italiano.
auto_stato:
alias: "📋 Stato casa"
sequence:
- variables:
it:
armed_away: armato
disarmed: disarmato
cool: freddo
heat: caldo
"off": spento
docked: alla base
cleaning: in pulizia
t: "{{ (it.get(states('alarm_control_panel.casa'), states('alarm_control_panel.casa'))) }}"
- action: script.auto_notifica
data:
titolo: "📋 Stato casa"
messaggio: >-
🛡️ {{ t }} · 💡 {{ states('sensor.luci_accese') }} accese ·
🌡️ {{ states('sensor.temperatura_interna') }} °C ·
❄️ {{ it.get(states('climate.condizionatore'), states('climate.condizionatore')) }} ·
🔥 gas {{ 'ok' if is_state('binary_sensor.gas', 'off') else 'ALLARME' }} ·
🤖 {{ it.get(states('vacuum.robot'), states('vacuum.robot')) }}
Gli ultimi due script, «🤖 Robot pulisci» e «🤖 Robot alla base», mandano il robot a pulire e lo riportano alla stazione. Per il primo vale quello che ho scoperto in robot Dreame da WhatsApp: avviare e riprendere spesso sono lo stesso servizio.
Un sensore di riepilogo
Un sensore template conta e nomina le luci accese. Lo uso nelle notifiche e nelle condizioni delle automazioni:
template:
- sensor:
- name: Luci accese
state: >-
{{ ['light.studio', 'light.cucina', 'light.esterno']
| select('is_state', 'on') | list | count }}
attributes:
nomi: >-
{{ ['light.studio', 'light.cucina', 'light.esterno']
| select('is_state', 'on') | map('state_attr', 'friendly_name') | join(', ') }}
📍 Zone e automazioni
La zona home di serie ha un raggio di 100 metri: quando scatta sono già davanti al cancello. Per l'arrivo serve una zona più larga, «Vicino a casa», con un raggio di 1 km. Le coordinate stanno nei secrets, non nel package.
zone:
- name: Vicino a casa
latitude: !secret casa_latitudine
longitude: !secret casa_longitudine
radius: 1000
icon: mdi:home-import-outline
La zona serve solo all'arrivo. Per l'uscita basta la zona di casa: appena il tracker del telefono la lascia, l'automazione controlla se c'è qualcosa da sistemare.
Le automazioni sono tre, e tutte dipendono da due cose: il sensore «Android Auto» dell'app, acceso solo quando il telefono è collegato all'auto, e un interruttore per spegnere gli avvisi. Così non partono in bici, a piedi o quando sono passeggero in un'altra auto.
automation:
- alias: Auto - uscita da casa
triggers:
- trigger: state
entity_id: device_tracker.telefono
from: home
conditions:
- condition: state
entity_id: input_boolean.avvisi_auto
state: "on"
- condition: state
entity_id: binary_sensor.telefono_android_auto
state: "on"
- condition: template
value_template: >-
{{ not is_state('alarm_control_panel.casa', 'armed_away')
or states('sensor.luci_accese') | int(0) > 0 }}
actions:
- action: script.auto_notifica
data:
titolo: "🚗 Stai uscendo"
messaggio: "Allarme non armato o luci accese"
pulsanti:
- action: AUTO_ESCO
title: Arma e spegni
- action: AUTO_NIENTE
title: Lascia così
L'avvicinamento è uguale, con un trigger di ingresso nella zona da 1 km e la condizione che l'allarme sia armato; i pulsanti sono «Disarma» (AUTO_ARRIVO) e «Non ora». La terza automazione ascolta i pulsanti e lancia lo script giusto:
- alias: Auto - pulsanti delle notifiche
triggers:
- trigger: event
event_type: mobile_app_notification_action
event_data:
action: AUTO_ESCO
id: esco
- trigger: event
event_type: mobile_app_notification_action
event_data:
action: AUTO_ARRIVO
id: arrivo
actions:
- choose:
- conditions: "{{ trigger.id == 'esco' }}"
sequence:
- action: script.auto_esco
- conditions: "{{ trigger.id == 'arrivo' }}"
sequence:
- action: script.auto_arrivo
I pulsanti «Lascia così» e «Non ora» non hanno un'automazione: chiudono la notifica e basta. Ci sono perché la scelta di non fare niente deve essere comoda quanto l'altra: se c'è solo «Arma e spegni», prima o poi lo premo per far sparire la notifica.
La condizione dell'uscita è volutamente stretta. La notifica arriva solo se c'è davvero qualcosa da sistemare, cioè l'allarme non armato o almeno una luce accesa, contata dal sensore di riepilogo. Se la casa è già a posto, esco senza che lo schermo dell'auto mi dica niente.
📱 Preparare il telefono
Questa è la parte che fa la differenza. Senza questi passaggi il codice è giusto ma non scatta niente.
✅ Checklist
- Tailscale sempre attivo; nell'app, URL esterno impostato sul nome Tailscale del server, con la porta di Home Assistant.
- Nell'app, in Impostazioni → Sensori, attivare «Android Auto», che di serie è disabilitato.
- Posizione su «Consenti sempre» e posizione in background attiva.
- Sui telefoni Xiaomi con MIUI o HyperOS, togliere le restrizioni della batteria all'app: altrimenti il tracker si aggiorna di rado e l'uscita non viene vista.
- In auto: aprire Home Assistant su Android Auto e aggiungere ai Preferiti gli script e le scene.
🎛️ Pulsanti e notifiche
| Pulsante | Dove compare | Cosa fa |
|---|---|---|
| 🚗 Esco di casa | Preferiti | Spegne luci e clima accesi, arma l'allarme, manda il riepilogo |
| 🏠 Arrivo a casa | Preferiti | Disarma con conferma su WhatsApp, luci esterne se è buio |
| 📋 Stato casa | Preferiti | Una notifica con allarme, luci, temperatura, clima, gas e robot |
| 🤖 Robot pulisci / alla base | Preferiti | Manda il robot a pulire o alla stazione |
| Arma e spegni | Notifica di uscita | Lancia «Esco di casa» |
| Disarma | Notifica di avvicinamento | Lancia «Arrivo a casa» |
| Lascia così / Non ora | Entrambe le notifiche | Niente |
🛡️ Allarme non armato · 💡 2 luci accese (studio, cucina)
[ Arma e spegni ] [ Lascia così ]
🛡️ L'allarme è armato
[ Disarma ] [ Non ora ]
🛡️ armato · 💡 0 accese · 🌡️ 21 °C · ❄️ spento · 🔥 gas ok · 🤖 alla base
Esempi di notifica con testi inventati
🧪 Come l'ho provato
Prima di scrivere ho controllato cosa c'era già. Nell'elenco delle entità del telefono, nel registro, il sensore Android Auto risultava disabilitato. Nella storia del tracker il telefono risultava sempre «home»: segno che la posizione non si aggiornava, quindi un'automazione di uscita non sarebbe mai partita. Ho verificato che Home Assistant risponda sull'indirizzo Tailscale.
Poi ho lanciato «Stato casa» e ho letto nella traccia dello script il messaggio e i dati inviati, con car_ui presente. La prova in macchina è il passo successivo. Le cose da controllare sono queste:
- gli script compaiono nell'elenco di Home Assistant su Android Auto e si possono mettere nei Preferiti;
- il sensore Android Auto diventa «on» quando il telefono si collega all'auto;
- uscendo con una luce accesa arriva la notifica, e «Arma e spegni» fa davvero quello che dice;
- entrando nel raggio di 1 km con l'allarme armato arriva «Disarma», con la conferma su WhatsApp.
🪤 Intoppi e lezioni
💡 Quello che ho imparato
- La dashboard per Android Auto non esiste. Si ragiona per entità e notifiche: pochi script con nomi chiari valgono più di una schermata piena.
- Una lista vuota passata a turn_off può dare errore. Meglio un
ifprima, come nello script di uscita. - In auto le notifiche devono essere brevi. Due pulsanti al massimo, e uno dei due deve essere «non fare niente».
- Un disarmo all'arrivo può essere annullato da un riarmo a tempo. Se hai un riarmo automatico, decidi quale regola vince.
- La geolocalizzazione è il punto debole. Senza «Consenti sempre» e senza le eccezioni della batteria, le automazioni di uscita e arrivo non scattano.