Elettrodomestici smart con Home Assistant

.
Argomento: Elettrodomestici
Livello: Esperto (Novizio,Esperto, Pro)
Difficoltà: Media(Bassa, Media, Alta)
Introduzione
“Cosaaaa, ancora un articolo su come rendere smart una lavatrice? Ma ce ne sono a decine!! Basta, non se ne può più!!”
Questa è una domanda più che legittima, in effetti cercando su Google si trova tantissimo materiale, ma allora perché fare un ulteriore articolo? Il motivo è che cercheremo di aggiungere qualcosa di originale, come facciamo di solito, anche su questo argomento.
In particolare sarà molto curato l’aspetto grafico di ciascuna card Lovelace che conterrà anche le informazioni relative al programma in uso al nostro elettrodomestico.
Alla base di questo articolo c’è quindi l’ambizione di rendere smart i nostri elettrodomestici che non lo sono senza sostituirli con apparati che nascono già smart, per fare questo abbiamo bisogno di un sistema che monitori in tempo reale il consumo elettrico in watt del nostro elettrodomestico, quindi una presa “intelligente” come Blitzwolf o Xiaomi oppure un Sonoff POW o uno Shelly 1PM o EM.
Su github nel link in fondo all’articolo troverete tre packages, la configurazione per Lovelace e le immagini da utilizzare.
Mi raccomando prestate attenzione a collegare il vostro dispositivo ad una presa che sia in grado di supportarne il carico: faccio un esempio per essere più chiaro, se la vostra presa smart è certificata per funzionare con correnti fino a 10A e voi collegate un apparato potenzialmente in grado di consumare 16A potreste incombere in spiacevoli incidenti.
Prerequisiti
La parte grafica si basa su due custom component disponibili sullo store HACS:
- card-mod: per l’abilitazione degli effetti CSS
- mini-graph-card: per il grafico della potenza
Dispositivi
Come detto è fondamentale avere una presa o altro relay “smart” che restituisca il consumo in watt, nell’articolo utilizzerò una nomenclatura standard, dovrete quindi andare a sostituire nei package i nomi delle entità sotto riportate con i vostri dispositivi già configurati o in alternativa adottare questa nomenclatura e cambiare i nomi delle entità ai vostri dispositivi.
- switch.plug_DEVICE: è lo switch ON/OFF che comanda lo stato della presa SMART del DEVICE in oggetto
- sensor.DEVICE_power: è il sensore che restituisce la potenza in Watt
- sensor.DEVICE_energy_today: è il sensore che restituisce l’energia giornaliera in kWh
- sensor.DEVICE_status: è il sensore che visualizza lo stato dell’elettrodomestico
- input_select.DEVICE_staus, è l’entità input_select che contiene gli stati permessi del DEVICE
- sensor.DEVICE_time_left: è il sensore che monitora il tempo rimasto alla fine del programma
- sensor.DEVICE_cost: è il sensore che indica il costo giornaliero dell’energia consumata dall’elettrodomestico
DEVICE è il vostro elettrodomestico: Washing machine = lavatrice, Oven = forno, Dishwasher = lavastoviglie.
Come funziona
L’idea che c’è alla base è che grazie alle informazioni restituite dalla presa smart siamo in grado di capire in che stato si trova il nostro elettrodomestico e quindi possiamo costruire una serie di sensori che diano delle informazioni da visualizzare nella UI di Home Assistant o piuttosto per avvertirci quando stendere i panni i tramite un servizio di notifica come Telegram.
Vediamo in dettaglio quali sono gli stati per tre elettrodomestici:
- Lavatrice:
Pronto, Lavaggio, Risciacquo, Centrifuga, Completamento, Svuotare
- Lavastoviglie:
Avviare, Lavaggio, Asciugatura, Svuotare
- Forno:
Off, Riscaldamento, Mantenimento, Idle
Le alternative possibili dal punto di vista dei costrutti di Home Assisatnt sono a mio avviso due:
- mappare gli stati attraverso un entità
input_select
ed utilizzare delle automazioni per effettuare le transizioni tra i vari stati possibili. - utilizzare un sensore che restituisce lo stato dell’elettrodomestico basandosi sul valore della potenza elettrica istantanea.
Il primo approccio permette di definire le transizioni tra stati in maniera più precisa utilizzando oltre il valore della potenza anche una durata temporale e uno stato attuale (ad esempio una possibile automazione potrebbe essere se la potenza è inferiore a 2 Watt per 10 minuti e mi trovo nello stato “Completamento” allora passa allo stato “Svuotare“).
Nell’articolo userò questo approccio per la lavastoviglie e per la lavatrice mentre per il forno userò l’approccio 2 visto che fondamentalmente il forno ha un comportamento abbastanza semplice: richiede potenza per riscaldarsi e una volta raggiunta la temperatura la potenza richiesta è più contenuta.
Per rendere efficaci le configurazioni occorre però procedere con una “fase di test” dei consumi dei propri elettrodomestici, cioè verificare se effettivamente i valori di potenza e i tempi che troverete negli esempi sono adatti alla propria situazione, inoltre nessuno vieta di semplificare o complicare la logica delle automazioni/sensori a proprio piacimento.
Configurazioni
Lavatrice
La logica della configurazione è basata su 6 stati che in effetti ricalcano il funzionamento reale di un lavatrice, di seguito li descrivo insieme alle transizioni della lavatrice tra i vari stati:
Avviare: è lo stato iniziale in cui si trova la lavatrice, quello di riposo
Lavaggio: è il primo stato operativo in cui la lavatrice si trova, la transazione che guida il passaggio in questo stato è una potenza rilevata superiore a 5 W, in maniera opzionale si può introdurre un fattore tempo, per esempio una potenza >5 W per almeno 1 minuto. Durante il lavaggio, i panni vengono agitati in una soluzione detergente che dissolve lo sporco, tuttavia sui panni rimangono sporco e detergente.
#Detect Washing State - alias: Lavatrice Washing initial_state: true trigger: - platform: numeric_state entity_id: sensor.lavatrice_power above: 5 condition: - condition: state entity_id: input_select.washing_machine_status state: Pronto action: - service: input_select.select_option data: entity_id: input_select.washing_machine_status option: Lavaggio
Risciacquo: se la potenza rilevata va sotto i 1000 W per un tempo superiore ai 15 minuti lo stato da Lavaggio passa a Risciacquo, questo stato è simile al lavaggio, ma più breve, di solito solo con acqua fredda, e la sua funzione è diluire lo sporco e il detergente.
# Detect Rinse State - alias: Lavatrice Rinse initial_state: true trigger: - platform: numeric_state entity_id: sensor.lavatrice_power below: 1000 for: minutes: 15 condition: - condition: state entity_id: input_select.washing_machine_status state: Lavaggio for: minutes: 15 action: - service: input_select.select_option data: entity_id: input_select.washing_machine_status option: Risciacquo
Centrifuga: La centrifuga è attivata alla fine della fase di risciacquo quando la potenza rilevata supera i 70 W per almeno un minuto, in questa fase tutta l’acqua viene scaricata completamente, quindi vestiti ed indumenti sono fatti girare molto velocemente per rimuovere l’acqua in eccesso.
# Detect Spin State - alias: Lavatrice Spin trigger: - platform: numeric_state entity_id: sensor.lavatrice_power above: 60 for: minutes: 1 condition: - condition: state entity_id: input_select.washing_machine_status state: Risciacquo action: - service: input_select.select_option data: entity_id: input_select.washing_machine_status option: Centrifuga
Completamento: Siamo arrivati alla fase finale del ciclo di lavaggio, se la potenza rimane sotto la soglia dei 3 W per almeno un minuto allora si passa nello stato Completamento.
# Detect Finish State - alias: Lavatrice Finishing trigger: - platform: numeric_state entity_id: sensor.lavatrice_power below: 3 for: minutes: 1 condition: condition: or conditions: - condition: state entity_id: input_select.washing_machine_status state: Lavaggio - condition: state entity_id: input_select.washing_machine_status state: Risciacquo - condition: state entity_id: input_select.washing_machine_status state: Centrifuga action: - service: input_select.select_option data: entity_id: input_select.washing_machine_status option: Completamento
Svuotare: Il lavaggio è stato completato, se non sono rilevati aumenti di potenza per 10 minuti la lavatrice va nello stato finale pronta per essere svuotata.
# Wait 10 minutes for us to be in the Finishing state before we # decide the washing machine has finished. - alias: Lavatrice Clean initial_state: true trigger: - platform: state entity_id: input_select.washing_machine_status to: Finita for: minutes: 10 condition: - condition: state entity_id: input_select.washing_machine_status state: Completamento action: - service: input_select.select_option data: entity_id: input_select.washing_machine_status option: 'Svuotare'
Nello stato finale Svuotare è possibile inviare una notifica, per esempio con Telegram, che vi avverte di andare a stendere i panni. Per completare la simulazione della lavatrice occorre prevedere il ritorno allo stato iniziale Avviare, questo è possibile con due strategie:
- una temporale, semplicemente dopo un certo numero di minuti per esempio 15, effettuo la transazione allo stato iniziale
- l’altra basato sull’uso di un sensore porta/finestra applicato all’oblo della lavatrice in modo che è rilevato esattamente il momento in cui questo oblò viene aperto per togliere i panni dall’interno.
Lavastoviglie
La logica di funzionamento che simula il funzionamento della lavastoviglie è più semplice rispetto alla lavatrice e si basa su 4 stati che descrivo di seguito:
Avviare: è lo stato iniziale in cui si trova la lavastoviglie, ed è quello di riposo in attesa di iniziare il lavaggio di piatti e stoviglie
Lavaggio: quando la presa rileva una richiesta di potenza superiore a 10 W la lavastoviglie passa nello stato lavaggio, in maniera opzionale si può introdurre un fattore tempo, per esempio una potenza >10 W per almeno 1 minuto.
- alias: Lavastoviglie active quando rileva potenza initial_state: true trigger: - platform: numeric_state entity_id: sensor.lavastoviglie_power above: 10 condition: condition: or conditions: - condition: state entity_id: input_select.dishwasher_status state: Avviare - condition: state entity_id: input_select.dishwasher_status state: Svuotare - condition: state entity_id: input_select.dishwasher_status state: Asciugatura action: - service: input_select.select_option data: entity_id: input_select.dishwasher_status option: Lavaggio
Asciugatura: la transizione nello stato di Asciugatura avviene quando la potenza richiesta scende sotto i 6 W
- alias: lavastoviglie drying quando non rileva potenza initial_state: true trigger: - platform: numeric_state entity_id: sensor.lavastoviglie_power below: 6 condition: - condition: state entity_id: input_select.dishwasher_status state: Lavaggio action: - service: input_select.select_option data: entity_id: input_select.dishwasher_status option: Asciugatura
Svuotare: Dopo 20 minuti nello stato di Asciugatura, lo stato diventa Svuotare.
- alias: lavastoviglie clean initial_state: true trigger: - platform: state entity_id: sensor.dishwasher_status to: Asciugatura for: minutes: 20 condition: - condition: state entity_id: input_select.dishwasher_status state: Asciugatura action: - service: input_select.select_option data: entity_id: input_select.dishwasher_status option: Svuotare
Nello stato finale Svuotare è possibile inviare una notifica, per esempio con Telegram, che vi avverte di mettere a posto piatti e bicchieri. Per completare la simulazione della lavastoviglie occorre prevedere il ritorno allo stato iniziale Avviare, questo è possibile in maniera analoga a quanto fatto con la lavatrice.
Forno
Per la simulazione del funzionamento del forno si è utilizzato un approccio più semplice con un template sensor
che immediatamente restituisce lo stato del forno in base alla potenza rilevata dalla presa smart.
Gli stati possibili in cui si può trovare il forno sono:
- Off: forno spento
- Idle: il forno è acceso ma non sto cuocendo cibi (per esempio ho acceso solo la lampadina interna)
- Riscaldamento: forno nella fase di riscaldamento nella quale c’è il massimo consumo
- Mantenimento: il forno ha raggiunto la sua temperatura e il consumo di corrente e quindi di potenza è minimo
- platform: template sensors: oven_status: entity_id: sensor.forno_power, switch.plug_forno friendly_name: 'Status forno' value_template: > {%- if is_state("switch.plug_forno","off") %} Off {% elif states("sensor.forno_power")|int > 100 %} Riscaldamento {% elif states("sensor.forno_power")|int > 38 %} Mantenimento {% elif states("sensor.forno_power")|int > 0 %} Idle {% else %} Off {%- endif %}
Selezione del programma
Una novità rispetto ad altri articoli che si trovano comunemente online è la possibilità di selezionare attraverso l’interfaccia grafica ma in maniera manuale il programma di lavaggio, nel caso della lavatrice o della lavastoviglie, e una pietanza da cucinare nel caso del forno.
Nella card nell’interfaccia Lovelace apparirà quindi il tempo necessario a completare quel tipo di programma di lavaggio o in alternativa il tempo necessario per cucinare un cibo e una volta avviato l’elettrodomestico scatterà anche il conto alla rovescia che potrete utilizzare per costruire le automazioni che più vi servono.
Di seguito l’esempio di sensore che tiene traccia del tempo necessario a completare i programmi di lavaggio della lavatrice
- platform: template sensors: washing_machine_time_left: entity_id: input_select.washing_machine_status, input_select.washing_machine_program, sensor.time value_template: > {% set timer = ((states.input_datetime.washing_machine_time_end.attributes.timestamp - as_timestamp(now())) / 60 ) | round(0) %} {% if states('sensor.washing_machine_status') != 'Avviare' %} {{ timer if timer>0 else 0 }} min {% else %} {% set program = states('input_select.washing_machine_program') %} {% set dict_time_program = { 'Cotone': '03:20:00', 'Misti': '01:10:00', 'Sintetici': '01:40:00', 'Delicati': '00:40:00', 'Lana': '00:40:00', 'Rapido': '00:30:00', 'Colorati': '01:20:00', 'Centrifuga': '00:15:00', 'Off': '00:00:00' } %} {{ dict_time_program[program] if program in dict_time_program }} {% endif %} friendly_name: 'Finish in '
Interfaccia Grafica
Come avrete visto le card per l’interfaccia grafica di Home Assistant sono particolarmente curate e contengono diverse informazioni utili, inoltre è possibile cliccando sull’icona di presa o sull’elettrodomestico accendere o spegnere la presa smart. Come ciliegina sulla torta sono presenti degli effetti animati che dipendono dallo stato in cui si trovano gli elettrodomestici; la schermata seguente visualizza le principali informazioni presenti nella card.
Personalizzazioni dei packages
Come detto in precedenza ci sono una serie di cose da personalizzare prima che i tre packages possano funzionare bene:
- il codice YAML si basa sulla nomenclatura delle entità che io utilizzo abitualmente, è quindi necessario personalizzarlo con le proprie entità;
- i sensori di energia e potenza non sono configurati nei packages, ma sono solo utilizzati, occorre quindi verificare i nomi delle entità;
- le transizioni degli elettrodomestici nei vari stati vanno personalizzate andando a vedere quanto consuma il proprio elettrodomestico; in particolare occorre calibrare bene le soglie di potenza della centrifuga della lavatrice e quelle delle fasi finali di tutti gli apparati;
- la durata dei programmi o dei tempi di cottura è quella dei miei dispositivi, inutile dire che i vostri elettrodomestici potrebbero avere tempistiche diverse;
- personalizzate il servizio di notifica come più vi aggrada, nei packages è configurato
notify.telegram
; - per quanto riguarda il costo dell’energia elettrica è stato inserito un sensore (sensor.DEVICE_cost) che calcola il costo dell’energia con una tariffa pari a 0,21 €/kWh, anche per questo sensore occore inserire il valore appropriato;
- il grafico della potenza presente nelle card si basa sul custom component mini-graph-card che trovate sullo store HACS.
I files sono disponibili nel repository https://github.com/jumping2000/elettrodomestici, qui troverete :
- tre packages,
oven.yaml dishwasher.yaml, washing_machine.yaml
; - il file di visualizzazione lovelace con tre picture-elements una per ogni elettrodomestico, uno per modalità yaml e uno per la modalità storage (UI), per la modalità storage occorre copiare il codice dell’elettrodomestico nella UI di HA;
- le immagini che compongono le picture-elements da inserire nella cartella
/config/www/images/devices
.
Ringraziamenti
- Phil Hawtorne: l’articolo ispiratore per questi packages è il suo: Making dumb dishwashers and washing machines smart
- Enrico: creatore instancabile di ogni sorta di immagine presente su HassioHelp e degli effetti speciali per gli elettrodomestici! P.S. Anche Claudio ha collaborato ma non diciamo niente 🙂
asciugatrice Automazioni blitzwolf consumo elettrodomestici forno Hass.io Hassio home asistant lavastoviglie lavatrice package shelly 1PM shelly em smart
28 risposte
un ottimo lavoro, veramente ben fatto!
Vorrei “schiacciare” un po il grafico della potenza, mi aiutate?
grazie
buonasera a tutti,
per chi è passato alla 0.115 come vanno riconfigurati i packages degli elettrodomestici ora che entity_id è diventato ‘deprecated’ per i ‘template sensors’?
grazie
grazie ho risolto grazie all’aiuto sul canale Telegram
potrebbe essere utile utilizzare la platform filter per ridurre le scritture dei sensori legati ai consumi; questo permetterebbe si salvaguardare sia SD CARD che SSD.
Direi di no, esiste il parametro commit-interval nel componente recorder per fare questa funzionalità
bellissimo lavoro.
è possibile pubblicare anche l’elettrodomestico Asciugatrice sulla falsa riga della lavatrice, ovviamente togliendo tutti i programmi? quindi lasciando solo “Avvio”, “Asciugatura”, ” Completamento”, ma utilizzando la stessa grafica della lavatrice?
Grazie
Ma se io ho una lavatrice smart? Quindi con tutti i sensori che mi indicano già gli stati del lavaggio?
Basta che usi questi sensori nella parte di interfaccia grafica Lovelace.
Ciao Giampi e complimenti per i package realizzati!
Ho bisogno di un chiarimento, io utilizzo uno shelly plug S sulla mia lavatrice vorrei configurare il tuo package ma non mi è chiaro dove devo andare a sostituire ad esempio switch.plug_DEVICE con la mio switch che si chiama switch.lavatricexcc non riesco a trovare nel yaml switch.plug_DEVICE..
Grazie
trovi: switch.plug_lavastoviglie, switch.plug_lavatrice etc etc
come scritto nell’articolo: “DEVICE è il vostro elettrodomestico: Washing machine = lavatrice, Oven = forno, Dishwasher = lavastoviglie”
Ciao Giampi e grazie per la risposta credo di essere riuscito a configurare il package, l’unica cosa che le mie prese collegate rimangono sempre accese e per ovviare a questo problema nel package ad esempio controllo carichi ho utilizzato dei template switch.. qui possono creare problemi?
Il Package sembra funzioanre solo che rimane sempre nello stato Avviare..
Il package è da personalizzare in base al comportamento del tuo elettrodomestico, andando a settare le varie soglie. Purtroppo ogni elettrodomestico si comporta in maniera diversa
Salve complimenti per l’articolo unica cosa non ho capito dove vanno inseriti questi – platform: template
sensors:
washing_machine_time_left:
sono alle prime armi se può spiegarmi come posso inserirle.Grazie in anticipo e spero nel suo aiuto un po più dettagliato per meno esperti,GRAZIE
Quando dici “adottare questa nomenclatura e cambiare i nomi delle entità ai vostri dispositivi”: intendi in inglese (oven, dishwashing..) oppure in italiano (forno, lavastoviglie…)? grazie e complimenti per il progetto.
Ciao Giampi e grazie per il tuo prezioso contributo.
Ho modificato il grafico consumi nella card perchè non era trasparente, non so se dipende da qualche aggiornamento successivo dei moduli.
Di seguito quello che ho modificato, magari se ti interessa puoi aggiornare la guida ed il repository:
– type: custom:mini-graph-card
entities:
– sensor.lavastoviglie_power
style:
‘–paper-card-background-color’: rgba(255,255, 255, 0.0)
.: |
ha-card {
–ha-card-box-shadow: none;
background-color: transparent;
}
top: 60%
left: 65%
width: 40%
hours_to_show: 8
icon: mdi:flash
name: Potenza consumata
font_size: 2
unit: W
hour24: true
points_per_hour: 60
show:
icon_adaptive_color: true
name_adaptive_color: true
name: true
icon: true
state: false
fill: fade
points: false
extrema: true
labels: hover
Grazie. purtroppo nel tempo le cose cambiano. puoi proporre la modifica su GitHub se vuoi
Sulla versione attuale anche cambiando il codice non riesco a farlo vedere trasparente il grafico, è cambiato qualcos’altro sull’ultima versione di home assistant?
Ciao e grazie per il tuo contributo.
A partire da quello che hai realizzato, con opportune modifiche grafiche e di codice ho integrato la macchina del caffè frog, la friggitrice proscenic ed il frigo ariston ?
Ottimo lavoro, funziona tutto alla perfezione.
Come hai messo il sensore sull’ oblò per vedere aperto /chiuso
Sarebbe possibile aggiornare l’articolo ?
faremo una nuova versione ad inizio 2023 con i seguenti elettrodomestici: forno, lavatrice, lavastoviglie, asciugatrice, termostato, inverter. ciao
non funziona la reposity del suo progetto , e’ stato abbandonato ?
https://github.com/jumping2000/ha-packages/tree/main/elettrodomestici_2023
novità per la nuova versione? 🙂
E’ in fase di preparazione, vediamo di pubblicarla nel giro di 10 giorni. ciao
disponibile qui: https://github.com/jumping2000/ha-packages/tree/main/elettrodomestici_2023
https://github.com/jumping2000/ha-packages/tree/main/elettrodomestici_2023