Ridurre le scritture dati di sensori “ipertrofici” su Home Assistant

3 minuti di lettura
SCOPI DELLA GUIDA:
  • Ridurre il numero di dati scritti sul database Home Assistant a partire da sensori che raccolgono moltissime letture
  • Livello di difficoltà: basso
CONCETTI AFFRONTATI:
  • Utilizzo e configurazione software
COMPONENTI SOFTWARE UTILIZZATE:
PREREQUISITI:
DISPOSITIVI FISICI UTILIZZATI:
GUIDA maggiormente indicatA per:

Tutti gli ambienti

Note e disclaimer
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata ed realizzata SOLO da personale qualificato;
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno puro scopo didattico);
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere garanzia, omologazioni e certificazioni di qualità.
Revisione guida: 1.0

Abstract

I sensori, su Home Assistant, sono tra le entità più utilizzate sia nelle automazioni sia nella normale consultazione presso il frontend Lovelace UI. Di temperatura, umidità, luminosità, assorbimento elettrico, qualità dell’aria, presenza e così via: moltissimi sono infatti le tipologie di sensori derivanti dalle integrazioni effettuabili con questo potente HUB personale.

Sandisk microSDCiò che molti non sanno – o meglio, su cui magari non ragionano – è la grande differenza in termini di impatto da sensore a sensore. Esistono infatti grandi differenze relative alla mole di dati salvata dall’HUB in base alle letture fornite dai sensori: alcuni infatti forniscono letture molto distanziate, nel tempo, l’una dall’altra; altri, invece, bombardano la domotica di letture continue, costanti, a volte anche decine in un solo minuto.

Si tratta di aspetti tutt’altro che secondari. Innanzitutto, grandi quantità di dati si traducono nel peggioramento, talvolta anche marcato, nelle prestazioni in lettura: la consultazione degli storici diventa lenta, poco responsiva. Cosa più grave, però, è l’impatto sullo storage: sopratutto gli utilizzatori di Raspberry Pi quale server sul quale eseguire Home Assistant (leggi: quasi tutti) dovrebbero rizzare le antenne, consapevoli che un grande numero di scritture sulla microSD è la causa, nove volte su dieci, della sua rottura irreversibile.

Per mitigare gli effetti deleteri di un sensore “ipertrofico” la soluzione può essere quella di escluderlo dal “Recorder”, così da non salvare su disco il grande volume di dati da esso prodotti: presso il frontend sarà sempre disponibile l’ultima lettura ricevuta ma non, ovviamente, l’andamento storico.

Questa è una buona soluzione,  ma crea un problema: la perdita, appunto, dell’andamento storico. Se questo non è un problema allora la lettura della presente guida non è necessaria; diversamente, proponiamo in questa occasione una soluzione per salvare i proverbiali capra e cavoli.

Approccio

Home Assistant dispone di un componente molto importante e utile, ovvero “Filter Sensor“: tale componente permette di definire delle entità sensore a partire dal collezionamento di dati provenienti da altri sensori, filtrandoli tramite varie metodologie statistiche.

N.b. Questa guida non ha un approccio marcatamente scientifico. Le metodologie di filtraggio statistico sono temi complessi i quali non sapremmo illustrare in modo opportuno, pertanto eviteremo di farlo. Ciò che faremo è proporre delle configurazioni grossomodo funzionali allo scopo. Se qualche membro della community con competenze in materia volesse proporre un approfondimento, siamo ben disposti a fornirgli lo spazio necessario.

Ciò che faremo sarà quindi escludere dalla scrittura su disco i (troppi!) dati provenienti da un dato sensore, fornendoli invece a un sensore “Filter Sensor” il quale, in base alla metodologia/e scelta/e provvederà a ridurre la numerosità di informazioni fornendo comunque un andamento leggibile.

Definizione del sensore

Ipotizziamo che il sensore “ipertrofico” sia un sensore che fornisce l’assorbimento istantaneo in Watt dell’impianto domestico chiamato “sensor.hem_power“. Ipotizziamo che questo sensore stia inviando una lettura ogni due secondi: decisamente troppo, nonché inutile.

Definiamo in configurazione un sensore così fatto:

sensor:
  - platform: filter
    name: "hem power filtered"
    entity_id: sensor.hem_power
    filters:
      - filter: outlier
        window_size: 4
        radius: 2.0
      - filter: lowpass
        time_constant: 60
      - filter: time_simple_moving_average
        window_size: 00:05
        precision: 0

Questo sensore di tipo “Filter Sensor” utilizza tre modalità di filtraggio (applicate una dopo l’altra, in sequenza):

  • lo “outlier“, ovvero un filtro “passa banda“, il quale taglia valori fuori da un range medio specifico;
  • il “lowpass“, ovvero un filtro “passa basso“, il quale “taglia” picchi improvvisi nei dati;
  • il “time simple moving average“, ovvero la “media mobile“.

Questa configurazione “tipo” genera un sensore chiamato sensor.hem_power_filtered il quale produce un numero di molto inferiore rispetto all’origine dati, fornendo comunque all’utente l’andamento storico della misura.

N.b. La configurazione proposta è una delle possibili rispetto al sensore preso in analisi; si consiglia la lettura attenta della pagina relativa al componente “Filter Sensor” al fine di identificare quale filtro (e come configurarlo) faccia al caso proprio.
Home Assistant - sensore pre-filtering
pre filtraggio…
Home Assistant - sensore post-filtering
…e post filtraggio.

N.b. Le due immagini sopra sono relative alle serie storiche dei due sensori sensor.hem_power e sensor.hem_power_filtered (con medesimo “friendly name“, ovvero “Consumo CASA“).

Esclusione dal recorder

A questo punto è necessario escludere il sensore originale dalle registrazioni del componente “Recorder”, così da non salvare la serie storica (ed evitare quindi il “bombardamento” di dati verso il nostro storage) e dotarsi della sola lettura istantanea, lasciando al nuovo filtro il ruolo di consultazione.

Per effettuare tale esclusione si consiglia la lettura della guida che spiega il funzionamento di tale componente.


Home Assistant Official Logo ATTENZIONE: 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.


Telegram News Channel