HA- Optimisation de la base de données

Intro

Home Assistant utilise SQLAlchemy , qui est un Object Relational Mapper (ORM). Cela signifie que vous pouvez utiliser n’importe quel backend SQL pour l’enregistreur pris en charge par SQLAlchemy, comme MySQL , MariaDB , PostgreSQL ou MS SQL Server .

Le moteur de base de données par défaut est SQLite qui ne nécessite aucune configuration. La base de données est stockée dans votre répertoire de configuration de Home Assistant (‘/ config /’) et est nommée home-assistant_v2.db.

Afin de simplifier la gestion de la BD et d’améliorer les performances , j’ai choisi d’utiliser MariaDB qui est un système de gestion de base de données édité sous licence GPL et phpmyadmin comme gestionnaire de cette BD.

Mariadb et phpmyadmin sont deux Add-on disponibles sur HA.

Les principaux avantages de cette configuration sont:

  • dans les sauvegardes ou la restitution de « snapshot », vous pouvez traiter séparément la BD diminuant ainsi la taille des sauvegardes
  • les manipulations de la BD sont facilitées par phpmyadmin
  • En profiter pour optimiser la taille de la BD

Avertissements:
Dans cet article je ne traite que de la création et non de la migration de la bd, cette méthode vous permet de relancer votre HA avec une BD vierge.

Comment procéder?

La procédure se décompose en trois étapes:

  • installer l’Add-on mariadb
  • installer l’Add-on phpmyadmin
  • Configurer HA pour qu’il pointe vers cette BD.

Installation de l’Add-on mariadb

Tres simple, depuis la boutique des modules supplémentaires (nouvelle appellation de l’Add-on store), choisissez mariadb, puis install.

Une fois installé, cliquez sur configuration et modifier comme-suit:

databases:
  - homeassistant
logins:
  - username: votreusername
    password: votremotdepasse
rights:
  - username: homeassistant
    database: homeassistant

Choisissez un mot de passe fort mélangeant minuscules, majuscules, un ou deux chiffres et caractères spéciaux sous peine de voir l’installation échouer dans PhpMyadmin.

Je vous conseille de conserver le nom de la db et les droits proposés par défaut.

Cliquer sur start, vérifier votre log, il ne doit pas y avoir d’erreur

Si tout se déroule correctement, vous devriez arriver à ce résultat.

Installation de l’Add-on phpmyadmin

Tres simple, depuis la boutique des modules supplémentaires (nouvelle appellation de l’Add-on store), choisissez phpmyadmin, puis install.

L’installation terminée, cocher « Afficher dans la barre latérale », puis cliquez sur Démarrer, aucune configuration requise.

Si tout se déroule correctement, vous devriez arriver à ce résultat.

Sur le panneau latéral, vous pouvez accéder au tableau de bord de phpmyadmin. Vous constaterez sur le panneau gauche, que la base homeassistant a été créé.

Il reste à attribuer les privilèges globaux à votre nom d’utilisateur:

  • sur l’interface phphmyadmin, cliquez sur « comptes utilisateurs », sur « editer les privilèges » de votre nom d’utilisateur, cocher « privileges globaux tout cocher »
Puis cliquer « exécuter » en bas à droite

Configuration de HA

Dans le fichier « configuration.yaml », ajouter les commandes suivantes:

recorder:
  db_url: !secret db_mysql
  auto_purge: true
  commit_interval: 15
  include:
    domains:
      - binary_sensor
      - input_boolean
      - input_datetime
      - input_number
      - input_select
      - sensor
      - switch
      - person
      - device_tracker
      - light
  exclude:
    domains:
      - camera
      - zone
      - automation
      - sun
      - weather
      - cover
      - group
      - script
      - pool_pump

Dans votre fichier secrets.yaml, définissez db_url

# Base de données mariadb
db_mysql: mysql://votreusername:votremotdepasse@core-mariadb/homeassistant?charset=utf8mb4

Avec le votreusername et votremotdepasse tel que définis dans la configuration de mariadb.

Optimisation de la BD

Les trois options suivantes sont de mon point de vue indispensables, elles permettent de limiter la taille de la BD. En effet si vous ne prenez pas de disposition, celle ci va s’accroître indéfiniment et altérer les performances du système.

  • auto_purge: Purge automatiquement la base tous les matins à 04h12 ( heure locale ).
  • purge_keep_days: Indication du nombre de jours d’historique à conserver dans la BD après la purge ( par défaut 10 ).
  • EXCLUDE et INCLUDE permettent de sélectionner les domaines à exclure ou inclure dans la bd.

La liste des domaines étant propres à chaque installation, vous pouvez en copiant/collant les lignes de code ci-dessous dans « outils de développement/modèles » lister les domaines de votre système et faire votre choix.

{%- set unique_domains = states | map(attribute='domain') |list | unique | list -%}
{%- for domain in unique_domains -%}
- {{domain + "\n"}}
{%- endfor -%}
En exemple la liste de mes domaines

D’autres options sont disponibles, se reporter à la documentation HA.

Une fois ces modifications apportées, vérifier votre configuration et redémarrer HA.

Une notification vous informera d’un problème.

Connecter vous à PHMmyAdmin, visualiser votre BD « home_assistant », HA a automatiquement ajouter les tables et commencent à ajouter des enregistrements

Conclusion

Cette modification qui est de mon point de vue, indispensable, vous apportera une souplesse d’utilisation dans la gestion de votre bd. Vous pouvez aussi vous intéresser à phpMyAdmin et ses nombreuses possibilités dans la manipulation des bases de données.

10 Comments on “HA- Optimisation de la base de données”

  1. Salut, je viens de procéder à l’installation. Tout est clair et s’est bien passé.
    Je pense qu’il manque un mot à ta phrase : « Les trois options suivantes sont de mon point de vue, elles permettent de limiter la taille de la BD. En effet si vous ne prenez pas de disposition, celle ci va s’accroître indéfiniment et altérer les performances du système. »

    Il me vient suite à l’installation qques questions:
    – Si j’active auto purge je vide ma base tous les 10 jours ?
    – Comment garder un historique plus long pour pouvoir calculer des moyennes mensuelles ou annuelles ?

    Merci pour ton boulot et pour les réponses à venir ! 🙂
    Cdlt.

    Nicols.

    1. Bonjour Nicolas
      Merci pour l’intérêt que tu portes à mon site. le mot manquant était « indispensable ».. Concernant la purge, si « auto-purge » activé, seules les données des 10 derniers jours sont conservées (purge_keep_days=10 par défaut), si désactivé il est préférable de créer un automatisme avec « record_purge ». Depuis la version 2021.09 il existe la notion de « statistiques long terme », c’est un enregistrement chaque heure (soit 24/j) de certaines entités (type mesure) elles ne sont pas affectées par la purge et sont conservées indéfiniment. Vvoir la doc https://data.home-assistant.io/docs/statistics. tu peux utiliser la carte lovelace « graphique de statistiques » pour les afficher. J’espère avoir répondu à tes interrogations. Slts

      1. Re,
        c’est très clair ! 🙂 Je vais faire un petit résumé !:)
        Pour l’enregistrement des valeurs il y a la table statistics_short_term qui elle est purgée par le service recorder.purge
        Pour l’historisation, il y a les tables statistics_meta et statistics qui stockes les valeurs min max et moyenne.
        En fait cette config est à l’identique de ce qui se passait déjà auparavant par défaut.

        Il me vient maintenant trois autres questions :
        – Pas possible d’avoir une interface graphique permettant de cocher si oui ou non l’on veut inclure ou exclure le suivi de telle ou telle entité ?
        – Où est maintenant stocké cette base de données car avant j’avais juste à sauvegarder ma base home-assistant_v2.db mais là introuvable ?
        – Ayant un NAS Synology, ne serait il pas mieux que ma base de données soit stocké sur mon Syno plutôt que sur mon raspberry ?

        Merci pour tes éclaircissements.

        1. En réponse à tes questions:
          1- A ma connaissance pas d’interface graphique,
          2- C’est stocké dans le contenair de MariaDb, c’est peut être accessible avec l’addon « portenair » mais je n’ai jamais essayé. En fait j’utilise l’excellent addon https://github.com/sabeechen/hassio-google-drive-backup pour sauvegarder ma configuration compléte sur Google drive. Je t’invite à t’y interresser, c’est pratique de paramétrages et tes données sont en lieu sur.
          3- Si ton RPI est sur carte SD c’est préférable de sauvegarder sur ton NAS, sinon sur SSD pas d’interet, les temps d’accés à la BD sur le NAS rallonge les temps d’affichage, c’était mon idée première, mais je suis revenu en arrière, à moins d’avoir un NAS et un réseau très performant.
          Slts

  2. Bonjour,
    Merci pour cet article.

    HASSOS est installé sur une carte SD mais j’ai déplacé les données vers un SSD en utilisant l’option « Déplacer le disque de données ».
    Sais-tu si avec cette configuration, les conteneurs sont sur le SSD ou s’ils sont sur la carte SD?
    Et donc si en installant MariaDB en utilisant l’addon, ma base sera sur le SSD ou sur la carte SD?

    Merci pour ton aide.

    1. bonjour, désolé mais je ne sais pas te renseigner, ma config est toute simple avec un HASSOS sur un NUC et son SSD, je ne me soucie pas de l’emplacement de la BD.

    2. Salut,
      Perso j’ai récemment migré l’intégralité du système sur un SSD M2.
      Tout s’est très bien passé, ne pas oublier de prendre un snapshot avant de le faire of course 😉 )
      Plus exactement, j’ai réinstallé HASS sur le SSD et à la première connexion il propose nativement de restaurer un snapshot, donc c’est easy de migrer la totalité de sa config sur SSD…
      Seul bémol, mais ce n’est pas le sujet, je pense que le SSD génère des interférences qui perturbent mes capteurs bluetooth :/

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.