Dedurre lo stato di un elettrodomestico non-domotico su Home Assistant (con Sonoff POW o similari)

8 minuti di lettura
SCOPI DEL PROGETTO
  • Utilizzare un approccio deduttivo per determinare lo stato di un elettrodomestico non-domotico
  • Livello di difficoltà: medio
  • Costo: nullo (al netto del sensore di rilevazione)
CONCETTI AFFRONTATI:
COMPONENTI SOFTWARE UTILIZZATE:
DISPOSITIVI FISICI UTILIZZATI:
  • Il dispositivo in cui è in esecuzione Home Assistant, oltre, ovviamente, all’elettrodomestico da censire e il sensore domotico necessario alla determinazione dello stato (spiegato nel progetto)
  • Un sensore di assorbimento (eg. Sonoff POW)
PROGETTO MAGGIORMENTE INDICATO PER:

Tutti gli ambienti

Note e disclaimer
  • qualsiasi modifica all'impianto elettrico dev'essere effettuata da personale qualificato;
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (la presente guida ha puro scopo didattico);
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere la garanzia.
Revisione progetto: 2.0

Abstract

Forno elettricoGli elettrodomestici tradizionali – ovvero quelli non dotati di un’anima domotica – non sono esclusi a priori dalla possibilità “di essere domotizzati”: le tecniche per domotizzare il non-domotico sono infatti le più disparate. Basti pensare ai condizionatori: in pochi e semplici passi è possibile renderli pienamente domotici pur non essendo concepiti per essere sfruttati in questo modo.

Ciò che invece è spesso più difficile da ottenere è lo stato operativo di un elettrodomestico non domotico: tornando all’esempio dei condizionatori, piuttosto facile è riuscire a comandarli, difficile è capire se quel comando sia andato a buon fine o meno.

Per stato operativo dell’elettrodomestico, va da sé, si intende “ciò che sta facendo in un dato momento“.

Un forno elettrico, un ferro da stiro possiedono sostanzialmente due stati operativi: quello “di riscaldamento” e quello “di inattività“, intervallate ovviamente dall’agire automatico di un termostato; anche una lavatrice possiede due stati – quello “di lavaggio” e quello “di inattività” – ma in realtà è dotata un ventaglio di dettaglio molto più ampio: “‘carico acqua“, “riscaldamento acqua“, “lavaggio“, “risciacquo“, “scarico acqua” giusto per elencare i principali.

LavatriceStessa cosa anche per i condizionatori/climatizzatori: possono ovviamente essere “accesi” o “spenti“, ma le loro molte funzionalità e modalità chiaramente si esprimono in una gran varietà di diversi stati operativi.

Conoscere lo stato operativo di un elettrodomestico è utile (se non necessario) per dotare la propria domotica personale di ulteriori “sensi” ai fini di notifica, di automazione (per esempio se togliere / non togliere alimentazione all’elettrodomestico in caso di abbandono dell’ambiente da parte degli inquilini), di monitoraggio.

Home Assistant, tramite il proprio modello a entità, ci permette di definire dei sensori virtuali i quali assumano uno stato (arbitrario) piuttosto che un altro partendo dall’analisi di assorbimento dell’elettrodomestico stesso. Ogni elettrodomestico, infatti, assorbe energia elettrica: il modo in cui lo fa può aiutarci a capire cosa l’elettrodomestico stia facendo in un dato istante.

Cosa ci serve

ITEAD Sonoff POW R2
Sonoff POW.

Semplice: innanzitutto ci serve un elemento (un sensore) che rilevi la quantità di assorbimento elettrico misurato immediatamente a monte dell’elettrodomestico e che a valle di esso sia presente solo l’elettrodomestico da monitorare. Questo perché eventuali altre utenze collegate a valle del sensore confonderebbero le misure, che sarebbero per l’appunto falsate.

In secondo luogo è importante come tale elemento sia integrato con Home Assistant, il quale appunto riceva le misure presso uno o più sensori virtuali definiti in configurazione. Elementi di misura ne esistono molti; noi suggeriamo l’adozione del Sonoff POW R2 con firmware Tasmota, sensore per il quale abbiamo speso una guida ad hoc dedicata all’integrazione presso Home Assistant proprio alla scopo di raccogliere informazioni di assorbimento elettrico.

Per il resto del presente progetto si darà per scontato che i sensori Home Assistant ai quali si farà riferimento siano alimentati da dati raccolti da elementi fisici collegati come spiegato sopra e quindi già integrati all’HUB personale.

Analisi

STATO OPERATIVO ACCESO/SPENTO

La teoria ci dice che un elettrodomestico spento assorba 0 Watt. La logica ci dice, pertanto, che qualunque lettura maggiore di 0 corrisponda a uno stato acceso – operativo.

Questa affermazione è corretta, seppur puramente teorica. Tutti sappiamo infatti come gli elettrodomestici spenti ma collegati alla rete elettrica in realtà spesso rappresentino un consumo, seppur minimo. Una moderna TV, in standby, può assorbire anche 1-2 Watt (se non di più), assorbimento che applicato all’affermazione di cui sopra lo considererebbe erroneamente acceso. Altro parametro importante è la risoluzione del dato di assorbimento: una lettura precisa al decimo di Watt potrebbe essere ancora più accurata nell’aiutarci a capire il modello di assorbimento legato all’elettrodomestico in questione.

Prima cosa da fare, dunque, è verificare “in stato di attesa” (standby) quanto l’elettrodomestico assorba, così da avere un valore minimo da assumere come valore di riferimento per lo stato “spento“. Qualunque valore maggiore del valore minimo verrà dunque attribuito allo stato “acceso – operativo“.

Questo approccio è il più elementare ed è solitamente utilizzato per realizzare sensori virtuali binari, i quali posseggano appunto un semplice stato on/off.
Più avanti vedremo come fare.

STATO OPERATIVO DETTAGLIATO

L’ottenimento di dati dettagliati relativi allo stato operativo è tanto più complesso quanto la è la variabilità del comportamento dell’elettrodomestico stesso e dal grado di dettaglio che si vuole ottenere.

La cosa da fare, in primis, è osservare il comportamento dell’elettrodomestico durante un ciclo completo d’utilizzo, quale sia l’elettrodomestico, quale sia l’utilizzo e la sua durata. In questo ci viene in soccorso lo storico di Home Assistant: durante e dopo l’esecuzione del ciclo sarà possibile capire se le varie fasi dell’operatività dell’elettrodomestico forniscano o meno un’evidenza “di modello” nel grafico di assorbimento.

Home Assistant Sonoff POW Lavatrice - Watt
Esempio di grafico di assorbimento presso il frontend di Home Assistant

Se una lavatrice assorbe, diciamo, un valore medio di 1500 Watt nella prima mezz’ora del lavaggio (per effetto del riscaldamento dell’acqua, il quale è un processo particolarmente energivoro), una media di 300 Watt nella seconda metà (lavaggio) e 150 Watt nell’ultima (risciacquo), allora saremo in grado di definire tre diversi stati operativi di dettaglio relativi a tale elettrodomestico. Tale modello è ricostruito, appunto, dall’analisi empirica del grafico di assorbimento presso Home Assistant, il quale ci aiuta a capire i comportamenti dell’elettrodomestico.

Va da sé che un elettrodomestico con un “comportamento” tendenzialmente molto variabile, purtroppo, non ci agevola tale compito.

Come creare i sensori

Assunzioni

In questo progetto assumiamo di avere a disposizione – come spiegato sopra – una entità sensore che fornisca l’assorbimento istantaneo (in Watt) a monte di uno specifico elettrodomestico. Lo chiameremo sensor.power.

Sensore acceso/spento

Dato che lo stato operativo è rappresentato di base da due possibili condizioni (acceso/spento – 1/0) utilizzeremo un “Template Binary Sensor” per definire un’entità che appunto rappresenti, automaticamente, lo stato dell’elettrodomestico a partire dai dati di assorbimento istantanei forniti da sensor.power.

binary_sensor:
  - platform: template
    sensors:
      stato_operativo_elettrodomestico:
        friendly_name: "Stato Operativo Elettrodomestico"
        value_template: "{{ states('sensor.power')|int > 0 }}"
        device_class: power
        delay_on:
          seconds: 30
        delay_off:
          minutes: 2

Il significato è semplice: il sensore entra in stato acceso (“on”) quando il valore di sensor.power supera lo 0;  viceversa, torna su spento (“off”) quando il valore scende a 0.

Qualche considerazione:

  • dato che molti elettrodomestici moderni presentano un valore minimo di assorbimento (pochi Watt) anche quando sostanzialmente inattivi (standby), potrebbe essere necessario regolare lo “0” a un valore leggermente più alto, da valutare da caso a caso;
  • alcuni elettrodomestici moderni, quando vengono attivati (per quanto non ancora in piena operatività, vedi una lavatrice con pannello di controllo digitale sul quale impostare i programmi) tendono a produrre dei picchi di consumo (vari Watt) della durata di pochi istanti. Per evitare che la domotica interpreti quel valore di assorbimento >0 (o maggiore al valore impostato sulla base della prima considerazione) come piena operatività, si utilizza un delay_on, ovvero un valore in secondi che il valore di superamento soglia venga mantenuto stabile per considerare il sensore effettivamente “acceso” (“on”);
  • analogamente, durante l’effettivo periodo di operatività dell’elettrodomestico potrebbero esserci dei momenti di sospensione apparente dell’attività (eg. un ferro da stiro che accende/spegne la propria resistenza interna): per evitare cattive interpretazioni si utilizza un delay_off in secondi, periodo nel quale un valore di assorbimento =0 (o comunque minore al valore impostato sulla base della prima considerazione) venga mantenuto stabile per considerare il sensore effettivamente “spento” (“off”).

Un sensore di stato binario è già, di per sé, qualcosa di molto utile.

SENSORE DI DETTAGLIO

Dato che lo stato operativo dettagliato dell’elettrodomestico è rappresentato da molti possibili, diverse condizioni, utilizzeremo un “Template Sensor” per definire un’entità che appunto rappresenti, automaticamente, lo stato dell’elettrodomestico a partire dal modello di assorbimento ottenuto tramite l’osservazione empirica di sensor.power.

Ipotizziamo di avere una lavatrice che funzioni come segue:

  • tot minuti di riscaldamento dell’acqua, con un consumo medio di 1500 Watt;
  • tot minuti di lavaggio, con un consumo medio di 400 Watt;
  • tot minuti di risciacquo, con un consumo medio di 150 Watt.

Creeremo, in primis, tre sensori binari:

binary_sensor:
  - platform: template
    sensors:
      riscaldamento_lavatrice:
        value_template: {{ states('sensor.power')|int > 1500 }}
        delay_on:
          minutes: 2
        delay_off:
          minutes: 2
      lavaggio_lavatrice:
        value_template: {{ states('sensor.power')|int < 1500 and states('sensor.power')|int > 400 }}
        delay_on:
          minutes: 2
        delay_off:
          minutes: 2
      risciacquo_lavatrice:
        value_template: {{ states('sensor.power')|int < 400 and states('sensor.power')|int > 0 }}
        delay_on:
          minutes: 2
        delay_off:
          minutes: 2

Questi tre sensori:

  • binary_sensor.riscaldamento_lavatrice
  • binary_sensor.lavaggio_lavatrice
  • binary_sensor.risciacquo_lavatrice

provvederanno a cambiare automaticamente stato (“on“/”off“) in base ai range di assorbimento in Watt (osservati precedentemente nel modello di consumo) e in base ai delay impostati in configurazione.

Ora definiremo un “Template Sensor” che utilizzeremo come “collettore” degli stati dei tre “Binary Sensor” precedentemente definiti:

sensor:
  - platform: template
    sensors:
      stato_operativo_lavatrice:
        friendly_name: "Stato Operativo Lavatrice"
        value_template: >-
          {% if is_state('binary_sensor.riscaldamento_lavatrice', 'on') %}
          Riscaldamento
          {% elif is_state('binary_sensor.lavaggio_lavatrice', 'on') %}
          Lavaggio
          {% elif is_state('binary_sensor.risciacquo_lavatrice', 'on') %}
          Risciacquo
          {% else %}
          Ciclo terminato
          {% endif %}

A questo punto avremo un sensore (“sensor.stato_operativo_lavatrice“) il quale ci fornirà, in tempo reale, lo stato di avanzamento della lavatrice:

  • Riscaldamento
  • Lavaggio
  • Risciacquo
  • Ciclo terminato

Ovviamente l’esempio di cui sopra può esser valido anche per molti altri scenari, ad esempio termoventilatori (da bagno e non), scaldabagni elettrici, forni, condizionatori eccetera. Sarà sufficiente definire il modello, i relativi stati, i sensori e nient’altro.

ESEMPIO PRESSO IL FRONTEND

Un esempio di rappresentazione grafica dei sensori dichiarati in precedenza:

Home Assistant - Indicatori di assorbimento

Automazione

A questo punto, essendoci dotati di sensori in grado di rilevare lo stato operativo (semplice e/o di dettaglio) dell’elettrodomestico non-domotico, oltre a consultarne gli stati e gli andamenti nel tempo potremo provvedere a utilizzarli come trigger, condizioni e/o oggetto di azioni nelle nostre automazioni.

Cambio di stato semplice

Un esempio è quello di fare in modo di venire allertati al cambio di stato (da “on” a “off” e viceversa – o altro) dell’elettrodomestico.

Nell’automazione che segue, lo stato semplice dell’elettrodomestico (censito tramite “binary_sensor.stato_operativo_elettrodomestico“) è l’innesco (trigger) di un’automazione che provvede ad allertare un utente tramite una notifica Pushbullet convogliata tramite un’entità chiamata “notify.marco“:

- alias: "Notifica per cambio di stato"
  trigger:
    platform: state
    entity_id: binary_sensor.stato_operativo_elettrodomestico
  condition: []
  action:
     service: notify.marco
     data_template:
       title: "Elettrodomestico"
       message: "L'elettrodomestico è passato da {{ trigger.from_state.state }} a {{ trigger.to_state.state }}"
Scenari più complessi

Proviamo ad immaginare di aver censito una lavatrice (stato semplice “on“/”off“) e immaginiamo anche di aver domotizzato l’afflusso di acqua in casa rappresentandolo con un interruttore chiamato switch.acqua.

Ipotizziamo inoltre di avere definito una scena che venga automaticamente eseguita quando tutti escono di casa (tramite una o più entità “Device Tracker” e relativa automazione) e che provveda a chiudere automaticamente l’acqua impostando a “off” tale interruttore.

scene:
- name: Uscita di casa
  entities:
    switch.acqua: off

Ovviamente non vorremmo questo comportamento automatico in caso lasciassimo la lavatrice a lavorare in nostra assenza, perché avremmo l’ovvia necessità di lasciare operativo l’afflusso d’acqua.

A questo punto definiremmo uno script come segue:

script:
  uscita_di_casa_sequence:
    sequence:
      - condition: state
        entity_id: binary_sensor.stato_operativo_elettrodomestico
        state: 'off'
      - service: switch.turn_off
        entity_id: switch.acqua

e modificheremmo la scena come segue:

scene:
- name: Uscita di casa
  entities:
    script.uscita_di_casa_sequence: on

Così facendo la scena “scene.uscita_di_casa” farebbe in modo di innescare lo script “script.uscita_di_casa_sequence, il quale valuterebbe lo stato della lavatrice (tramite”binary_sensor.stato_operativo_elettrodomestico“) e, solo in caso esso fosse “off” (quindi “lavatrice non operativa“), provvederebbe a chiudere l’acqua impostando a “off” l’interruttore “switch.acqua“.

Si noti come “binary_sensor.stato_operativo_elettrodomestico” sia utilizzato, in questo scenario, come condizione per valutare un’azione conseguente.


Home Assistant Official LogoATTENZIONE: ricorda che sul nostro community FORUM c'è una sezione ad hoc dedica a Home Assistant, per qualsiasi dubbio, domanda, informazione nel merito specifico di queste componenti.


Please comment below