Elettrodomestici smart con Home Assistant

HassioHelp

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:

  1. mappare gli stati attraverso un entità input_select ed utilizzare delle automazioni per effettuare le transizioni tra i vari stati possibili.
  2. 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

Card 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:

  1. una temporale, semplicemente dopo un certo numero di minuti per esempio 15, effettuo la transazione allo stato iniziale
  2. 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

Card 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

Card 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.

Funzionalità 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 🙂

 

3 risposte

  1. Avatar Antonio ha detto:

    un ottimo lavoro, veramente ben fatto!

    Vorrei “schiacciare” un po il grafico della potenza, mi aiutate?

    grazie

  2. Avatar liuk4friends ha detto:

    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

  3. Avatar liuk4friends ha detto:

    grazie ho risolto grazie all’aiuto sul canale Telegram

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *