Configurare correttamente “Recorder”, “History” e “LogBook” su Home Assistant

4 minuti di lettura

Qualcosa che molti non conoscono è l’impatto, enorme, che Home Assistant – per come è concepito – rischia di avere sulle sue stesse prestazioni nonché sulla salute dello storage sul quale è installato “per colpa” della sua configurazione di default.

Moltissimi utenti di Home Assistant lamentano, dopo parecchio tempo dall’adozione, un calo di prestazioni nella consultazione delle serie storiche dei dati raccolti; altri, tipicamente dotati di Raspberry Pi quale server per l’esecuzione dell’HUB, lamentano rotture improvvise della microSD (il suo “hard disk”) sul quale il server è installato.

database

Il punto è come i dati vengono archiviati presso il filesystem dell’unità a disco. Home Assistant, in configurazione base, semplicemente salva tutto, sempre, per sempre. Questo significa che qualsiasi cambio di stato di qualunque entità viene immediatamente scritta sul database dell’HUB. Questo fa sì che, per esempio, la semplice attivazione del componente “Time & Date” causi la generazione di un’entità “Sensor” che a sua volta causi centinaia, migliaia di scritture del tutto inutili sul database. Immaginiamo di avere un sensore termico che invii una lettura ogni minuto: in una giornata i minuti sono 1.440, in un mese 43.000. E se di sensori ne ho 10? 430.000 scritture in un mese, mica male. E se suddetti sensori inviano anche l’umidità relativa? Allora saliamo a 860.000 scritture in un mese, e questo solo per dei sensori termici, non considerando poi tutte le altre entità!

Ma cosa causa la rottura, tipicamente, di una SD? L’eccessiva attività di scrittura, specialmente nei modelli di qualità non eccelsa. Cosa causa un rallentamento in fase di interrogazione di un database? L’eccessiva ridondanza e quantità di dati (fermi, utenti DBA: è solo un’affermazione molto generica per far capire un concetto, non scaldatevi, lo sappiamo che il tema è un po’ più complesso di così).

Home Assistant è però ben realizzato, il che permette, tramite l’opportuna configurazione del componente “Recorder“, di limitare in modo importante i cattivi effetti di un’eccessiva memorizzazione dei dati. I componenti “History” e “Logbook“, invece, sono più che altro influenzati dalla configurazione del suddetto componente, ma dato che essi servono per la visualizzazione dati, anch’essi hanno necessità di essere configurati correttamente.

Cosa sono

Recorder” è il componente deputato alla registrazione dei dati storici su Home Assistant. Tipicamente salva tutto in un file chiamato home-assistant_v2.db presente nella cartella dove giacciono i file di configurazione dell’HUB e viene popolato automaticamente. Si tratta di un componente non escludibile (è caricato di default) ma che può essere configurato al fine di indicargli cosa e cosa non salvare presso il db – e quale profondità storica conservare.

History” attiva una voce presso l’interfaccia utente Lovelace UI la quale consente di visualizzare, in modo grafico, l’andamento degli stati delle entità presenti sull’HUB. Se non utilizzato, è possibile escluderlo.

Logbook“, infine, attiva una voce presso l’interfaccia Lovelace UI la quale consente di visualizzare la sequenza di azioni effettuate presso l’HUB.

Recorder

Come abbiamo anticipato, “Recorder” non è un componente disattibabile ma è, certamente, configurabile.
Per farlo è necessario aggiungere in configurazione la voce:

recorder:

seguita dalle specificità che si vuole mettere in campo.

“Recorder” consente di esplicitare cosa escludere e/o cosa includere, a partire dai domini (componenti/piattaforme eg. “Sensor”, “Switch” eccetera) per arrivare, in modo molto puntuale, alle entità.

Vediamo un esempio:

recorder:
  purge_keep_days: 7
  db_url: sqlite:////home/user/.homeassistant/test
  exclude:
    domains:
      - sensor
      - automation
      - script
    entities:
      - light.ingresso
  include:
    entities:
      - sensor.temperatura_sala

Il campo “purge_keep_days” serve a mantenere il database snello e performante. Indicare questo campo serve a far capire a Home Assistant dopo quanti giorni sbarazzarsi dei dati collezionati; in questo caso, tutti i dati più vecchi di una settimana vengono spazzati via.

Il secondo campo, “db_url“, serve ad indicare dove salvare, alternativamente, il database, e in che formato. In questo caso, salviamo i dati su un SQLite installato localmente. Solitamente, nella configurazione standard di Home Assistant, non c’è bisogno di indicarlo.

Il blocco “exclude”, va da sé, esclude domini ed entità. I sensori producono moltissimi dati, quindi li escludiamo; magari tra le tante luci integrate la light.ingresso cambia stato troppo spesso e, non volendo escludere l’intero dominio, la esplicitiamo tra le entità escluse.

Il blocco “include” va a compensare il blocco “exclude“: avendo escluso tutti i sensori, mi precludo la possibilità di analizzare delle serie storiche magari di sensori importanti: ecco perché, nell’esempio, esplicitiamo il sensore d’esempio sensor.temperatura_sala nelle entità incluse.

La strategia è quindi quella di utilizzare, più che altro, i domini nel blocco “exclude” e le entità nel blocco “include“: ciò mi permette di mitigare immediatamente il problema delle tante scritture e dei tanti accessi al database, isolando interi domini, ma consentendo alcuni mirati censimenti di dati per alcune entità specifiche.

Maggiori informazioni sono disponibili sulla pagina del componente.

History

History” invece attiva presso Lovelace UI un’interfaccia per la consultazione degli andamenti degli stati delle entità (registrate dal componente “Recorder“) su un’asse temporale:

Home Assistant - Component_history_24h

Ovviamente possono esistere entità che, malgrado “Recorder” sia configurato per registrarle, non abbia senso o comunque non si voglia visualizzarne lo storico presso la rappresentazione di “History“.

Pertanto, esattamente nella logica descritta per “Recorder“, è possibile escludere/includere esplicitamente interi domini e/o entità dalla rappresentazione.

Un esempio:

history:
  exclude:
    domains:
      - automation
      - weblink
      - updater
    entities:
      - sensor.last_boot
      - sensor.date
  include:
    domains:
      - sensor
      - switch
      - media_player

Il componente è totalmente escludibile, basti ricordare di eliminare dalla configurazione la voce “default_config:” (attenzione, però: questa voce attiva molte altre cose importanti, le quali andrebbero a questo punto attivate singolarmente) e, ovviamente, l’eventuale voce “recorder:“.

Maggiori informazioni sono disponibili sulla pagina del componente.

Logbook

Infine, “Logbook” serve a definire presso Lovelace UI una cronistoria di azioni e stati effettuati o variati presso l’HUB:

Home Assistant - Logbook

Anche in questo caso, come per “History”, possono esistere entità che, malgrado “Recorder” sia configurato per registrarle, non abbia senso o comunque non si voglia visualizzarne lo storico presso l’elenco di log.

Pertanto, esattamente nella logica descritta per “Recorder“, è possibile escludere/includere esplicitamente interi domini e/o entità dalla rappresentazione.

Un esempio:

logbook:
  exclude:
    entities:
      - sensor.last_boot
      - sensor.date
    domains:
      - sun
      - weblink
  include:
    domains:
      - sensor
      - switch
      - media_player

Il componente è totalmente escludibile, basti ricordare di eliminare dalla configurazione la voce “default_config:” (attenzione, però: questa voce attiva molte altre cose importanti, le quali andrebbero a questo punto attivate singolarmente) e, ovviamente, l’eventuale voce “recorder:“.

Maggiori informazioni sono disponibili sulla pagina del componente.


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