La sveglia di Ironman ora si attiva con l'AI in Home Assistant

La sveglia di Ironman ora si attiva con l'AI in Home Assistant

di Vincenzo Caputo

25 Dicembre 2025

Home Assistant

Vincenzo Caputo

Vi ricordate il progetto della Sveglia di Iron Man? Quella routine mattutina che ci fa sentire come Tony Stark, leggendo meteo, impegni e notizie appena apriamo gli occhi?

Bene, funzionava alla grande, ma col tempo ho notato un limite fastidioso: era rigida. Se decidevo di prendermi un giorno di ferie, dovevo aprire l'app di Home Assistant, cercare l'interruttore "Ferie" e disattivarlo a mano. Un vero assistente virtuale non dovrebbe funzionare così. Un vero J.A.R.V.I.S. dovrebbe capire se gli dico "Domani non svegliarmi" e agire di conseguenza, senza che io debba toccare il telefono.

In questo articolo vedremo come abbiamo evoluto il sistema integrando l'Intelligenza Artificiale per gestire il calendario in modo dinamico e, soprattutto, come abbiamo risolto un problema tecnico insidioso (la difficoltà di cancellazione degli eventi sul Google Calendar tramite Home Assistant) con un trucco da veri "maker".

Cosa ti serve prima di iniziare

Per replicare questo sistema, diamo per scontato che tu abbia già un'istanza di Home Assistant operativa. Nello specifico, avrai bisogno di queste due integrazioni già configurate:

  1. Google Calendar: È fondamentale aver integrato il calendario ufficiale. Se non l'hai ancora fatto, segui la documentazione ufficiale per collegare il tuo account Google. Ci servirà sia per leggere gli eventi che per scriverci sopra.

  2. Google Gemini (Google Generative AI): Questo è il "cervello". A differenza della mia vecchia guida su come integrare ChatGPT, qui utilizziamo l'integrazione nativa Google Generative AI.

    • Perché Gemini? Abbiamo scelto il modello Gemini 1.5 Flash (o 2.0 Flash-Lite) perché è incredibilmente veloce, ha una latenza quasi nulla ed è gratuito (entro certi limiti). Per un comando vocale come questo, la velocità è tutto.

Obiettivo: "Jarvis, domani non lavoro"

Volevamo ottenere due comportamenti semplici ma potenti:

  1. Impostare le ferie a voce: "Jarvis, ferie dal 23 al 25 dicembre". L'AI deve capire le date e scriverle sul calendario Google.

  2. Ripensamenti rapidi: "Jarvis, ho cambiato idea, domani lavoro". L'AI deve riattivare la sveglia immediatamente.

Per farlo, dobbiamo istruire l'AI tramite il Prompt di Sistema. Non basta dirgli "sei un assistente", bisogna dirgli quali strumenti usare.

Ecco la logica che abbiamo inserito nel prompt:

GESTIONE FERIE:

  • Se l'utente dice "domani non lavoro", calcola le date (AAAA-MM-GG) e usa lo script di creazione evento.

  • Se l'utente dice "domani lavoro comunque", usa lo script di ripristino locale.

Scrivere sul Calendario (La parte facile)

Per creare l'evento "Ferie", abbiamo creato uno script in Home Assistant che accetta due variabili (o fields): inizio e fine. L'AI calcola la data (es. se oggi è il 22 e dico "domani", lui sa che è il 23) e la passa allo script come parametro.

Lo Script imposta_ferie:

alias: "Imposta Ferie"
fields:
  inizio:
    description: "Data inizio (AAAA-MM-GG)"
  fine:
    description: "Data fine (AAAA-MM-GG)"
sequence:
  - action: calendar.create_event
    target:
      entity_id: calendar.vincenzo_google
    data:
      summary: "Ferie"
      start_date_time: "{{ inizio }} 00:00:00"
      end_date_time: "{{ fine }} 23:59:59"

Risultato: L'evento appare sul calendario, l'automazione della sveglia lo legge e sa che non deve suonare. Missione compiuta... o quasi.

Il problema del "Ripristino" (Il Bug)

Qui è dove le cose si sono complicate durante i test. Mettiamo il caso che io abbia preso ferie, ma all'ultimo decida di lavorare. Se dicevo a Jarvis "Cancella le ferie", lui provava a cancellare l'evento da Google.

Il problema? Home Assistant non legge il calendario in tempo reale. Fa un controllo (polling) ogni 15-30 minuti. Quindi, anche se cancellavo l'evento vocalmente, per la mia domotica ero ancora in ferie e la sveglia non sarebbe suonata! Un disastro per un lavoratore puntuale.

La Soluzione: L'Override Locale

Invece di lottare contro i tempi di sincronizzazione di Google, abbiamo applicato una strategia di "Override Locale". Abbiamo creato un Aiutante Interruttore (Input Boolean) chiamato Ignora Ferie Calendario.

La nuova logica è diventata questa:

  • Se dico "Ho cambiato idea, domani lavoro", Jarvis non tocca Google Calendar. Semplicemente accende questo interruttore.

  • È un'azione istantanea, locale e sicura al 100%.

Lo script di ripristino diventa semplicissimo:

alias: "Ripristina Sveglia (Override)"
sequence:
  - action: input_boolean.turn_on
    target:
      entity_id: input_boolean.ignora_ferie_calendario

L'Automazione Finale: Il "Cervello" della Sveglia

A questo punto, abbiamo dovuto aggiornare la logica della sveglia mattutina (quella delle 06:30). Ora deve ragionare in modo più sofisticato usando una condizione "OR" (Oppure).

La sveglia suona SE:

  1. Non è sabato o domenica (giorni lavorativi).

  2. E INOLTRE:

    • (A) Non c'è l'evento "Ferie" sul calendario.

    • OPPURE

    • (B) L'interruttore "Ignora Ferie" è ACCESO.

condition:
  - condition: or
    conditions:
      # Caso A: Nessuna ferie sul calendario
      - condition: template
        value_template: >
          {{ not (is_state('calendar.vincenzo_google', 'on')
          and 'Ferie' in state_attr('calendar.vincenzo_google', 'message')) }}
      # Caso B: Ho forzato la sveglia a voce (Override)
      - condition: state
        entity_id: input_boolean.ignora_ferie_calendario
        state: "on"

In questo modo, anche se sul calendario c'è scritto FERIE a caratteri cubitali, se io ho detto a voce "Svegliami lo stesso", l'interruttore (B) vince e la sveglia parte. E per non dimenticare l'interruttore acceso? Abbiamo aggiunto un'azione alla fine della sveglia che lo spegne automaticamente (input_boolean.turn_off).

Dietro le quinte: Perché Google Calendar e non il Calendario Locale?

Durante lo sviluppo di questo progetto, avremmo potuto scegliere la via più semplice: utilizzare l'integrazione nativa Local Calendar di Home Assistant. Sarebbe stato tecnicamente più facile: risposte istantanee, zero problemi di API e funzionamento offline.

Invece, abbiamo scelto la strada più complessa integrando Google Calendar. Perché questa complicazione?

  • Unica Fonte di Verità: La nostra vita quotidiana (lavoro, appuntamenti, famiglia) vive già sullo smartphone. Usare il calendario interno di Home Assistant ci avrebbe costretto a inserire le ferie due volte: una sul telefono per ricordarlo a noi stessi, e una su HA per la domotica.

  • Workflow Naturale: Con questa scelta, posso segnare "Ferie" dal PC dell'ufficio o tramite il widget del telefono mentre sono fuori casa, e la sveglia si adegua automaticamente. La domotica deve seguire il nostro stile di vita, non costringerci ad aprire la sua App per ogni modifica.

  • Il prezzo da pagare: L'uso del cloud introduce quel ritardo di sincronizzazione (polling) che abbiamo analizzato nell'articolo. Ma è proprio per questo che abbiamo inventato il sistema di Override Locale: per avere la comodità del Cloud unita alla reattività del controllo locale quando serve.

Conclusioni

Con queste modifiche, la "Sveglia di Iron Man" è passata da essere un semplice script statico a un vero assistente proattivo. Ora posso gestire i miei giorni di riposo parlando naturalmente, senza aprire app e senza temere che la sincronizzazione lenta di Google mi faccia fare tardi a lavoro.

Il prossimo passo? Stiamo già lavorando per chiedere a Jarvis: "Svegliami domani alle 8:30" e fargli cambiare dinamicamente l'orario dell'automazione... ma questa è una storia per il prossimo articolo!

Vedere per credere: Jarvis in azione

Spiegare il codice YAML è utile, ma vedere (e sentire) la conversazione fluida con la casa ha tutto un altro sapore.

Ho registrato una dimostrazione pratica dove metto alla prova il sistema: vedrete la creazione dell'evento ferie in tempo reale e, soprattutto, il test dell'override locale che accende la sveglia istantaneamente.

Guarda il video completo sul mio canale YouTube: MissingTech

Iscriviti al canale per non perdere i prossimi aggiornamenti su questo progetto!

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.

Vincenzo Caputo

Vincenzo Caputo

Nato a Matera, il 1° novembre 1977. Sono da sempre appassionato di tecnologia e ho un'esperienza lavorativa ventennale nel settore IT. Mi piace sperimentare e cercare sempre nuove soluzioni e soprattutto mi piace comunicare le mie esperienze agli altri.

Disqus loading...