community italiana di domotica personale
 
Ridurre le scritture dati di sensori “ipertrofici” su Home Assistant

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

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 INDICATA A UTENTI CON ISTALLAZIONE:
Ambienti Home Assistant HassOS-Supervised-Core
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione guida: 1.1

Abstract

I sensori, su Home Assistant, sono tra le entità più utilizzate sia nelle automazioni sia nella normale consultazione presso l’interfaccia dell’HUB. 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. Comunque, anche i possessori di Intel NUC o Mini PC possono beneficiare delle considerazioni qui riportate.

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.

⚠️ Se di Home Assistant ne sai poco ma sei interessato a capirne di più, ti suggeriamo di partire da qui.

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.