Repack DB: ridurre le dimensioni del file database

Repack DB: ridurre le dimensioni del file database

Come in molti avrete visto il database, di seguito DB, di Home Assistant che si trova nella cartella /config di Hassio cresce costantemente perché contiene lo stato di tutti sensori, interruttori, luci, automazioni etc del nostro Home Assistant.
Con il passare del tempo il DB, se non si effettuano delle configurazioni ad hoc, può diventare molto ingombrante con dimensioni nell’ordine dei gigabytes e rallentare il funzionamento di Home Assistant.
Per porre rimedio a questa situazione occorre agire in due modi:

  • attraverso un “fine tuning” della configurazione del componente “recorder
  • attraverso un’automazione che effettua il “repack” del Db cioè una ottimizzazione in termini di spazio occupato

Vediamo come funziona il salvataggio dei dati su Home Assistant.
Il motore di database predefinito di HA è SQLite che non richiede alcuna configurazione. Il database è memorizzato nella directory di configurazione Home Assistant (.homeassistant o /config) ed è chiamato home-assistant_v2.db.
Per modificare i valori predefiniti per il componente “recorder” occorre aggiungere quanto segue al file configuration.yaml.

 

I principali parametri del componente recorder sono i seguenti:
db_url:  URL che punta al tuo database, normalmente nel caso di utilizzo del DB standard non è configurato.
purge_keep_days:  specifica il numero di giorni di cronologia da conservare nel database
purge_interval:  frequenza (in giorni) con la quale viene eseguita l’operazione di eliminazione.
commit_interval indica ogni quanto tempo (in secondi) i dati sono inviati al DB
exclude:  indica quale entità sono da escludere dalle registrazioni su DB
include:  indica quale entità sono da includere nelle registrazioni su DB

 

Di seguito ho inserito una configurazione del componente recorder che salva solo quattro componenti principali (sensors, binary_sensors, climate, light) e mantiene gli ultimi 3 giorni di registrazioni, in questo modo il DB non dovrebbe crescere oltre qualche centinaia di MB. Per chi volesse mantenere lo stato di altri domini questi vanno aggiunti nella sezione include/domains (ad esempio si può aggiungere il dominio automation) ed escludere quelle particolari entità che non interessano nella sezione exclude/entities.

La configurazione prevedere anche un commit_interval a 60 secondi (il default è 1 sec) in modo da ridurre le scritture su scheda SD o su altro sistema di memorizzazione.

Questa logica in pratica registra solo quello che ci interessa, ma è possibile configurare anche la logica contraria e cioè registrare tutto ad esclusione di quello che viene specificato.

 

Oltre al tuning dei dati da salvare sul DB l’altra strategia è di effettuare il “repack” del DB in modo da ottimizzare lo spazio occupato.
Il package si basa sul servizio “recorder.purge”  ed è personalizzabile con l’orario in cui effettuare il “repack” e il numero di giorni da mantenere nel DB.

Veniamo ora al package e al dettaglio delle sue componenti:

input_boolean.repack_db: se attivo parte il repack ogni giorno all’orario indicato

input_datetime.repack_time: orario in cui parte il repack del DB

input_number.day_to_keep: numero di giorni con gli stati da mantenere

input_text.repack_status: indica lo stato del repack

input_text.previous_dimension_db: indica le dimensioni del DB alla partenza dell’automazione

sensor.home_assistant_v2_db: dimensioni del DB di HA

script.repack_db: script “nudo e crudo” che effettua il repack

Ed ora alcune avvertenze:

  • alcuni componenti hanno uno stato iniziale preimpostato, se si desidera cambiarlo occorre agire di propria iniziativa sul package andando a modificare dove è di interesse o in alternativa eliminando lo stato iniziale
  • il sensore “sensor.time” è obbligatorio per poter avviare l’automazione
  • occorre cambiare a proprio piacimento il servizio di notifica telegram
  • per il sensore che monitora la grandezza del DB di HA occorre aggiungere anche nel file configuration.yaml. sotto la sezione whitelist_external_dirs la cartella /config

 

Di seguito la configurazione Lovelace:

 

 

26 risposte

  1. Alessandro ha detto:

    “Per il sensore che monitora la grandezza del DB di HA occorre aggiungere anche nel file configuration.yaml. sotto la sezione whitelist_external_dirs la cartella /config”

    Ciao,mi sono perso a questo punto?Nel configuration.yaml dove trovo la sezione whitelist?
    grazie

  2. ANGELO ha detto:

    Ciao,
    essendo passato a maria db
    questo sensore:
    sensor:
    #https://www.home-assistant.io/components/sensor.filesize/
    – platform: filesize
    file_paths:
    – /config/home-assistant_v2.db
    come va configurato? ovvero la path qiale sarà?
    grazie

    • Giampi ha detto:

      qualcosa del genere:

      #https://www.home-assistant.io/components/sensor.sql/
      – platform: sql
      db_url: !secret mariadb_url
      scan_interval: 300
      queries:
      – name: DB size
      query: ‘SELECT table_schema “database”, Round(Sum(data_length + index_length) / 1048576, 1) “value” FROM information_schema.tables WHERE table_schema=”homeassistant” GROUP BY table_schema;’
      column: ‘value’
      unit_of_measurement: MB

  3. gabriele ha detto:

    Salve, stavo leggendo la guida su come realizzare il db repack, si parla di uno script. Non ho capito pero’ dove si recupera.
    Grazie e complimenti ancora per le ottime guide che pubblicate

    Gabriele

  4. Antonio ha detto:

    Salve.. ragazzi conoscete se è possibile effettuare un purge di un solo sensore specifico nella base di dati ?? Grazie

  5. Giacomo ha detto:

    ma purge_keep_days cancella anche i dati specificati sotto recorder: include?

  6. andbad ha detto:

    Ho un piccolo problema col package. L’ho installato e configurato, funziona come previsto (mi arrivano le notifiche del repack con le dimensioni e tutto).
    Nell’interfaccia, però, i campi “Dim. precedenti HA DB” e “Stato Repack” rimangono sempre vuoti (o meglio, sono valorizzati con “-“). Come detto questo non inficia la funzionalità, ma essendo un ossessivo compulsivo mi da fastidio. 😀

    By(t)e

    • Giampi ha detto:

      E’ un articolo di 2-3 anni fa, c’è sicuramente da rivedere il codice

    • daniele ha detto:

      strano a me funzionano perfettamente, non è che devi fare il passaggio:
      aggiungere anche nel file configuration.yaml. sotto la sezione whitelist_external_dirs la cartella /config

  7. daniele ha detto:

    Complimenti per il packege molto utile, volevo sapere: – se imposti in lovelace card,
    Giorni da mantenere” 8

    e il configuration.yaml è
    recorder:
    purge_interval: 1
    purge_keep_days: 3
    commit_interval: 60
    vale a dire 3 giorni da mantenere quale prevale?

  8. daniele ha detto:

    Scusami ho un’altra cosa, ho eseguito repack e inserito in configuration
    recorder:
    purge_interval: 4

    questo è il log che esce, è trascurabile o cosa bisogna fare?
    The ‘purge_interval’ option near /config/configuration.yaml:9 is deprecated, please remove it from your configuration

  9. daniele ha detto:

    Ok grazie della risposta, ma mi sono perso:
    – Se di default il servizio auto-purge è ogni notte, quando auto-purge si attiva (ore 4:12 di notte di default) interroga il packege e definisce così i paramatri impostati?
    – oppure il packege è escluso da questo purge e agisce in altro modo e altro tempo e a questo punto quando?

    • daniele ha detto:

      Scusa mi rispondo da solo:
      – l’auto-purge è un servizio di semplice pulizia meno profondo di repack e di default è aogni notte;
      – il pakage si basa su repack un servizio più pesante che riscrive l’intero database (se si usaSQLite o PostgreSQL) e se ” input_boolean.repack_db: è attivo parte il repack ogni giorno all’orario indicato”

      Essendo una attività di riscrittura ogni quanto conviene attivarlo secondo te?

      • Giampi ha detto:

        il package è stato fatto quando non c’era il purge automatico e:
        – il package si basa sul servizio “recorder.purge”
        – dalla doc ufficiale: If you disable auto_purge it is recommended that you create an automation to call the “recorder.purge” periodically.

        quindi scegli te cosa vuoi fare, tenendo a mente che su SD cmq avrai dei problemi alla lunga

  10. daniele ha detto:

    Come volevasi dimostrare non ho capito una mazza 🙂 –
    Problema SD in effetti ho già provveduto a spostare su SSD disco esterno, spero regga a lungo.
    Come si fa a disabilitare auto-purge?
    Grazie.

  11. leonardo ha detto:

    da qualche giorno mi appare il seguente errore:
    Logger: homeassistant.helpers.template
    Source: helpers/template.py:1292
    First occurred: 11:38:13 (4 occurrences)
    Last logged: 11:38:13

    Template warning: ‘float’ got invalid input ‘unknown’ when rendering template ‘{{ (states(‘sensor.home_assistant_v2_db’) |float ) automazioni ed il servizio è oscurato, posizionando il cursore sopra mi dice: solo le automazioni che hanno assegnato un ID univoco sono debuggabili”
    gentilmente potresti darmi una mano? grazie

  12. Andrea ha detto:

    la configurazione lovelace è ancora valida?

  13. Salva ha detto:

    Va bene anche se si usa MariaDB?

Lascia un commento

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

Advertisment ad adsense adlogger