Home Assistant: Come creare un monitoraggio "intelligente" per l'asciugatrice

Uno dei problemi classici della domotica è rendere "smart" un elettrodomestico che non lo è. Spesso ci limitiamo a monitorare i consumi elettrici o ad accendere/spegnere qualche lampadina o elettrodomestico collegato a qualche presa smart... Esattamente ciò che facevo fino a poco tempo fa, e sembraba anche "figo" poter sapere quanto consumava l'asciugatrice o la lavatrice in un dato momento o in un mese, in un anno.... Poi mi sono chiesto, perchè non mi spingo un po' oltre e cerchiamo di "domotizzare" maggiormente questi elettrodomestici "stupidi"? Ecco, per esempio il caso della mia asciugatrice collegata ad una presa smart da cui posso sapere quando è in funzione (grazie al monitoraggio consumi) e quanta energia ha consumato in un dato periodo.... ma poco altro. 

Allora mi sono deciso a integrare all'interno di Home Assistant delle scene per poter avere di più... molto di più.

Il prolema maggiore che mi ha spinto verso questa strada è il fatto che la mia asciugatrice Bosh non fa ripartire il ciclo se viene a mancare la corrente... anche per un solo istante, si ferma e non riparte.... con la conseguenza che se non te ne accorgi i panni restano umidi all'interno (con tutta la felicità della moglie...), quindi la prima cosa che mi è venuta in mente, DEVO creare un sistema che mi AVVISA quando ci sono problemi (tipo l'interruzione di un ciclo di asciugatura)

Probabilmente quello che scrivo di seguito è qualche cosa che per molti sarà scontata, semplice, o semplicemente poteva essere risolto in altro modo o con altri strumenti.... ma dato che uso Home Assistant anche per un milione di altre cose ho voluto farlo all'interno di Home Assistant! Non mi soffermo a spiegare cos'è e come si configura o utilizza Home Assistant, ci sono un miliardo di siti che parlano di questo.... Vorrei solo condividere con voi quella che è stata la mia esperienza e in qualche modo la mia sfida con questo progetto, e magari ispirare qualcuno di voi a replicare il progetto o a prendere spunto da questo per applicarlo in altri contesti....

 

Il primo ostacolo, come stabilisco in che stato reale si trova il ciclo di asciugatura?

...E qui è dove la faccenda si fa interessante. Per capire se l'asciugatrice sta lavorando, riposando o se è "morta" per un blackout, non basta guardare i Watt. Serve una logica che "interpreti" quei numeri.

Ho pensato allora, perchè non sfrutto i sensori della presa smart (power e lo switch in particolare) per "capire" se il ciclo è in funzione, se l'interruttore è acceso, spento o peggo, è saltata la corrente?

Ho creato allora un "aiutante" per prendere nota degli "stati" dell'asciugatrice" e diverse azioni per modificare lo stato in base a vari scenari e altre per inviare notifiche ad Alexa o WhatsApp per ricevere gli avvisi!

Il primo ostacolo: Definire lo Stato Reale

Ho creato un input_select, ovvero un menu a scelta rapida (che ho chiamato "stato_asciugatrice"), con sei voci: In Funzione, Sospesa,  Fine Ciclo, In Attesa, Ciclo Interrotto, Antipiega. Ognuna di queste voci viene "impostata" secondo questa logica: 

"In Funzione": Questo lo utilizziamo per identificare che l'asciugatrice sta girando ed il ciclo è in funzione. viene attribuito quando lo stato precedente di stato_asciugatrice è diverso da "In Funzione" e quando la potenza rilevata (nel mio caso "sensor.shelly1pm_asciugatrice_asciugatrice_potenza") è superiore a 50W per almeno 30 secondi

"Sospesa": Quando lo stato precedente del sensore stato_asciugatrice è diverso da "Sospesa" è lo stato dell'interruttore (nel mio caso "switch.shelly1pm_asciugatrice_asciugatrice") è "OFF"

"Fine Ciclo": Identifica quando il ciclo è realmente terminato. Questo stato sarà assegnato solo quando lo stato precedente del sensore stato_asciugatrice è uguale a "In Funzione" e quando la potenza rilevata (sensor.shelly1pm_asciugatrice_asciugatrice_potenza) è inferiore a 50W per almeno 30 secondi e quando lo stato dell'interruttore (switch.shelly1pm_asciugatrice_asciugatrice) è "ON"

"Antipiega": Se impostato sull'asciugatrice, dopo aver finito il ciclo di asciugatura, questa continua a fare piccoli giri del cestello per non stropicciare i panni. Un monitoraggio semplice interpreterebbe questi picchi di consumo come "L'asciugatrice è ripartita!", resettando tutto. Ho quindi creato una regola temporale: se siamo in "Fine Ciclo", passiamo ad "Antipiega" dopo 1 minuto di silenzio. Da quel momento, l'automazione diventa "sorda" ai piccoli picchi di consumo, evitando falsi positivi.

"In Attesa": Lo stato di riposo finale. Ci si arriva solo dopo che l'asciugatrice è stata spenta o ferma in antipiega (nel senso che l'interruttore è su ON ma il consumo resta inferiore ad una certa soglia) per molto tempo (nel mio caso 10 minuti di inattività totale o 90 minuti di timeout antipiega).

"Ciclo Interrotto": L'incubo di ogni marito. Questo stato si attiva solo se la presa smart diventa "Non disponibile" o si spegne improvvisamente "OFF" MENTRE lo stato era "In Funzione". È il segnale che è saltata la corrente e i panni sono ancora bagnati.

 

Il cuore del sistema: L'automazione a Stati (State Machine)

Per far funzionare tutto questo, non bastava una semplice automazione "Se potenza < 50W allora notifica". Serviva una vera e propria macchina a stati. Ho utilizzato la modalità restart per l'automazione principale: questo è fondamentale perché ogni volta che l'asciugatrice dà un "segno di vita" (un picco di potenza), i timer di spegnimento devono resettarsi.

Ecco il codice YAML dell'automazione principale (che ho chiamato V7 Final Corrected). Noterete l'uso dei trigger id per capire cosa ha scatenato l'evento e agire di conseguenza:

{{ states('sensor.shelly1pm_asciugatrice_asciugatrice_potenza')|float(0) < 50 and states('input_select.stato_asciugatrice') == 'In Funzione' }} for: "00:00:45" id: fine_ciclo_detect # 3. Passaggio ad Antipiega (Timer puro) - trigger: state entity_id: input_select.stato_asciugatrice to: Fine Ciclo for: "00:01:00" id: start_antipiega # 4. Reset Finale (Potenza zero per 10 min) - trigger: numeric_state entity_id: sensor.shelly1pm_asciugatrice_asciugatrice_potenza below: 50 for: "00:10:00" id: fine_totale_detect # 5. Timeout di Sicurezza (Se resta in antipiega troppo a lungo) - trigger: state entity_id: input_select.stato_asciugatrice to: Antipiega for: "01:30:00" id: timeout_antipiega # 6. Gestione Blackout/Spegnimento - trigger: state entity_id: switch.shelly1pm_asciugatrice_asciugatrice to: - "off" - unavailable - unknown id: switch_off - trigger: state entity_id: switch.shelly1pm_asciugatrice_asciugatrice to: "on" id: switch_on actions: - choose: # CASO A: SPEGNIMENTO IMPROVVISO - conditions: - condition: trigger id: switch_off sequence: - action: input_select.select_option target: entity_id: input_select.stato_asciugatrice data: option: > {% if is_state('input_select.stato_asciugatrice', 'In Funzione') %} Ciclo Interrotto {% else %} Sospesa {% endif %} # CASO B: RITORNO CORRENTE - conditions: - condition: trigger id: switch_on sequence: - action: input_select.select_option target: entity_id: input_select.stato_asciugatrice data: option: In Attesa # CASO C: IN FUNZIONE - conditions: - condition: trigger id: potenza_su sequence: - action: input_select.select_option target: entity_id: input_select.stato_asciugatrice data: option: In Funzione # CASO D: FINE CICLO (Solo se interruttore è ON) - conditions: - condition: trigger id: fine_ciclo_detect - condition: state entity_id: switch.shelly1pm_asciugatrice_asciugatrice state: "on" sequence: - action: input_select.select_option target: entity_id: input_select.stato_asciugatrice data: option: Fine Ciclo # CASO E: ANTIPIEGA - conditions: - condition: trigger id: start_antipiega - condition: state entity_id: switch.shelly1pm_asciugatrice_asciugatrice state: "on" sequence: - action: input_select.select_option target: entity_id: input_select.stato_asciugatrice data: option: Antipiega # CASO F: RESET FINALE (Timeout o Potenza zero) - conditions: - condition: or conditions: - condition: trigger id: fine_totale_detect - condition: trigger id: timeout_antipiega - condition: template value_template: >- {{ states('input_select.stato_asciugatrice') in ['Antipiega', 'Fine Ciclo'] }} sequence: - action: input_select.select_option target: entity_id: input_select.stato_asciugatrice data: option: In Attesa ?>

 




SEZIONE 2: "Amore, è finita l'asciugatrice... o forse no?" (Le Notifiche)

In questa sezione spieghiamo come gestire le notifiche in modo che non siano fastidiose (evitando di svegliare la casa di notte) e come ottenere l'orario preciso di fine ciclo.

Avere gli stati corretti è inutile se il sistema non ci avvisa. Ma volevo evitare notifiche ad orari improponibili. Ho creato un'automazione che scatta su due eventi principali:

  1. Fine Ciclo: Quando il lavaggio vero e proprio finisce.
  2. Fine Antipiega: Quando la macchina si spegne definitivamente.

La chicca qui è il calcolo dell'orario: poiché l'automazione rileva la fine ciclo con un leggero ritardo (45 secondi di verifica), sottraggo questo tempo per dire a mia moglie l'ora esatta in cui il cestello si è fermato. Inoltre, se l'asciugatrice finisce di notte (tra le 23:00 e le 07:30), Alexa tace e WhatsApp aspetta: la notifica arriverà puntuale alle 07:30 del mattino successivo.

Ecco il codice per le notifiche intelligenti:

YAML

(Nota: Nel codice reale ho inserito le chiamate al mio script e a , personalizzabili secondo i propri servizi di notifica).


SEZIONE 3: Il problema del Blackout (La Salvezza)

Qui chiudiamo con la soluzione al problema originale: l'asciugatrice che non riparte da sola.

Infine, l'automazione che mi ha salvato da diverse discussioni familiari. Come dicevo all'inizio, se salta la corrente la mia Bosh si ferma e resta spenta anche quando la corrente torna.

La logica che ho implementato è questa:

  1. L'automazione degli stati (quella vista prima) segna lo stato come "Ciclo Interrotto" se lo Shelly va offline mentre stava lavorando.
  2. Quando la corrente torna ( torna su ), parte questa automazione specifica.
  3. Controlla se lo stato era "Ciclo Interrotto" (usando un input_boolean o controllando lo stato precedente).
  4. Aspetta qualche minuto (per dare tempo al WiFi di riconnettersi stabilmente) e poi lancia l'allarme su Alexa e WhatsApp, ricordandomi di andare fisicamente a premere "Start".

Ecco il codice del "Salvavita":

YAML

Conclusioni

Da quando ho implementato questo sistema (in particolare la versione V7 con i timer "blindati"), non ho più avuto falsi positivi. L'asciugatrice comunica esattamente quello che sta facendo, non mi sveglia di notte, ma soprattutto se salta la corrente mentre non sono in casa, so che al mio rientro dovrò farla ripartire, salvando il bucato dall'odore di umido.

 

 

in questo modo so se l'asciugatrice ha terminato il ciclo o è semplicemente nello stato di sospesa (magari perchè è andata via la corrente)

 

Grazie a una serie di automazioni basate sulle soglie di potenza della presa smart, Home Assistant sposta l'asciugatrice da uno stato all'altro. Ma la vera sfida non era solo sapere se fosse accesa, era gestire il "dopo".

La Resilienza: Gestire il Blackout (e la rabbia della moglie)

Torniamo al problema principale: salta la corrente, l'asciugatrice Bosch si spegne e, al ritorno dell'energia, resta lì, muta, con i panni umidi. Per risolvere questo, ho sfruttato la persistenza dei dati di Home Assistant. Quando il sistema si riavvia dopo un blackout, la prima cosa che fa è controllare l'ultimo stato noto. Se l'asciugatrice era "In Funzione" ma ora i consumi sono a zero, scatta il sistema di allarme.

Non è solo un log nel sistema; è una notifica prioritaria su WhatsApp che mi dice:

"⚠️ Attenzione: L'energia è tornata, ma il ciclo di asciugatura si è interrotto bruscamente. Vai a riavviarla!"

Il Cronometro "Intelligente" e la sfida del tempo

Mentre risolvevo il problema del blackout, mi è venuta un'altra idea: perché non calcolare quanto manca alla fine? Ma un'asciugatrice non è un timer da cucina. Se metti in pausa o se il sensore di umidità decide che i panni sono già asciutti, il tempo cambia.

Ho creato un Accumulatore di Tempo (input_number.durata_corrente). Invece di calcolare "Ora Fine meno Ora Inizio", ho scritto un'automazione che aggiunge un minuto al contatore solo se lo stato è "In Funzione".

  • Manca la corrente? Il contatore si ferma.
  • Metti in pausa? Il contatore si ferma.
  • L'energia ritorna? Il contatore riprende esattamente da dove era rimasto.

Imparare dal passato: La Media Storica

Per sapere quanto manca, serve un termine di paragone. Qui ho usato un Sensore Statistico. Ho "costretto" Home Assistant a memorizzare la durata reale di ogni ciclo completato con successo (escludendo i tempi morti). Dopo qualche lavaggio, il sistema ha iniziato a capire: "Ehi, solitamente i tuoi cicli durano 95 minuti".

Ora, con un semplice calcolo matematico tra la Media Storica e il Tempo Corrente, ho ottenuto quello che cercavo: un sensore di Tempo Residuo dinamico. Non è una stima campata in aria, è basata su quello che l'asciugatrice ha fatto veramente nelle ultime settimane a casa mia.

Il gran finale: WhatsApp come assistente personale

La chiusura del cerchio è la notifica di fine ciclo. Non ricevo più un generico "Lavoro finito". Il messaggio WhatsApp ora è un vero e proprio report:

"✅ Ciclo terminato con successo! Durata effettiva: 92 min (Media solita: 95 min). Il cestello è pronto per essere svuotato."

In conclusione, sono passato da una "presa che misura i Watt" a un sistema che monitora, impara, mi avvisa se c'è un problema e mi dice quanto manca alla fine. Tutto questo senza cambiare asciugatrice, ma semplicemente spremendo un po' di più quel fantastico strumento che è Home Assistant.

E la moglie? Beh, ora che non trova più i panni umidi dopo un blackout, ha iniziato a guardare la mia "domotica" con occhio molto più benevolo... e forse questa è la vittoria più grande!

 

Resilienza ai Blackout e Notifiche Intelligenti

In un sistema domotico serio, non possiamo permettere che un'interruzione di corrente mandi in "tilt" le nostre automazioni. Ecco come abbiamo gestito il ritorno dell'energia e la comunicazione con l'utente.

1. Il trucco della Persistenza

Il vantaggio di usare un input_select per lo stato e un input_number per il tempo è che Home Assistant ne memorizza il valore anche se il server si spegne improvvisamente. Al ritorno della corrente, Home Assistant riparte e "vede" che l'asciugatrice era, ad esempio, in stato "In Funzione".

2. Automazione di Ripristino e Notifica Blackout

Abbiamo creato una logica che si attiva all'avvio di Home Assistant: se l'energia torna e l'asciugatrice non ha ancora completato il ciclo, il sistema invia un avviso immediato.

YAML

3. Notifiche WhatsApp a Fine Ciclo

Per le notifiche usiamo l'integrazione di WhatsApp. La notifica di fine ciclo non è un semplice "ha finito", ma include i dati reali che abbiamo calcolato, rendendo il messaggio molto più utile.

YAML

Perché WhatsApp?

A differenza delle notifiche push classiche, WhatsApp permette di mantenere una cronologia dei cicli anche fuori dall'app di Home Assistant, utile se vogliamo controllare a fine settimana quante volte abbiamo usato l'elettrodomestico semplicemente scorrendo la chat.


Cosa aggiungere nel post per questa parte:

Nel tuo articolo, ti suggerisco di evidenziare come questa logica risolva il problema dell'ansia da interruzione:

  • Durante il blackout: Il sistema non perde il conteggio (grazie agli ).
  • Al ritorno della corrente: Sei subito informato che il sistema è di nuovo online e pronto a riprendere.
  • A fine lavoro: Ricevi un report completo direttamente sul tuo telefono.

Oggi vi racconto una semplice asciugatrice 

vogliamo sapere esattamente quanto manca alla fine del ciclo, anche se salta la corrente o se mettiamo in pausa la macchina?

In questo articolo vedremo come costruire un sistema basato sulla media storica reale, capace di ignorare le interruzioni e di fornire una stima precisa della fine del ciclo.

La Sfida: Oltre il semplice timer

Un timer standard (es. "fai partire un countdown di 90 minuti") fallisce se:

  1. L'asciugatrice viene messa in pausa per aggiungere un capo.
  2. Salta la corrente (blackout).
  3. Il carico è più leggero del solito e il sensore di umidità dell'elettrodomestico accorcia il ciclo.

Per risolvere questi problemi, abbiamo creato una catena di monitoraggio suddivisa in quattro fasi.

1. Il Cuore Logico: Gli Stati dell'Asciugatrice

Invece di basarci solo sui Watt, usiamo un aiutante di tipo "Scelta" (input_select) che definisce lo stato di lavoro:

  • Spenta: Consumo vicino allo zero.
  • In Funzione: Il motore gira o la resistenza scalda.
  • In Attesa/Pausa: L'elettrodomestico è acceso ma il timer deve fermarsi.
  • Fine Ciclo: Lo stato finale che scatena il salvataggio dei dati.

2. La Gestione della Corrente e delle Pause

Per evitare che il tempo scorra "a vuoto", abbiamo configurato un'automazione che agisce come un cronometro cumulativo.

L'Accumulatore (input_number.durata_corrente)

Invece di misurare la differenza tra ora di inizio e ora di fine, usiamo una logica a incrementi. L'automazione controlla ogni minuto:

"Se lo stato è In Funzione, allora aggiungi +1 al contatore."

In caso di blackout, Home Assistant si spegne. Al riavvio, il valore del contatore è ancora lì (grazie alla persistenza degli input_number) e il conteggio riprende solo quando l'asciugatrice torna effettivamente a consumare energia. Le pause non vengono conteggiate.

3. L'Integrazione Statistica: Imparare dal passato

Qui entra in gioco la vera intelligenza. Abbiamo creato un Sensore Statistico che osserva i dati storici.

Il trucco del "Sensore Template"

Gli aiutanti numerici non supportano nativamente le statistiche a lungo termine. Per ovviare a questo, abbiamo creato un Sensore Template che "copia" il valore finale del lavaggio e gli assegna una state_class: measurement.

Questo permette a Home Assistant di:

  1. Archiviare ogni ciclo nel database a lungo termine.
  2. Calcolare la media degli ultimi 5 cicli attraverso l'integrazione statistics.

4. Calcolo del Tempo Residuo Predittivo

Una volta ottenuta la media storica (es. 95 minuti) e conoscendo il tempo già trascorso (es. 20 minuti), il calcolo per la nostra Dashboard è semplicissimo:

$$Tempo\ Residuo = Media\ Storica - Tempo\ Corrente$$

Abbiamo racchiuso questa logica in un sensore finale che mostra i minuti mancanti. Se l'asciugatrice "sfora" la media, il sensore rimane elegantemente a 0 senza mostrare numeri negativi.

5. Visualizzazione con Mushroom Cards

Per la parte estetica, abbiamo optato per le Mushroom Cards. Il colore dell'icona e il testo secondario cambiano dinamicamente:

  • In funzione: Icona blu animata e stima della fine.
  • Pausa: Icona arancione e tempo "congelato".
  • Fine: Messaggio di completamento.
YAML


Conclusione

Grazie a questo setup, la nostra casa domotica "impara" dalle abitudini dell'asciugatrice. Non è più un semplice timer statico, ma un sistema resiliente ai guasti elettrici e capace di adattarsi nel tempo (se ad esempio cambiamo filtro o l'elettrodomestico invecchia, la media si sposterà di conseguenza).