Gestion de données et optimisation Home Assistant

Aujourd’hui, je vous propose un court article d’une nouvelle série consacrée à home-assistant. Vous y trouverez uniquement des billets courts qui auront pour objectif d’ajouter une fonctionnalité ou d’améliorer un point particulier de votre assistant préféré.Pour ce premier article, nous allons voir  une méthode d’optimisation de votre système. Si comme moi vous avez choisi d’utiliser Home assistant vous avez peut-être observé des ralentissements après quelques semaines/mois d’utilisation ou après l’ajout de nouveaux périphériques 😞. C’est en tout cas mon cas… Mais que se passe-t-il ?

La cause

Après des upgrades, redémarrages et quelques manip’ sans résultats je suis tombé sur le responsable ! Un fichier nommé home-assistant_v2.db d’une taille de 1,5Go !

Il faut savoir que par défaut Home assistant utilise une base de données Sqlite. Ce moteur écrit et lit dans notre fameux fichier ! Si vous ne le trouvez pas voici son chemin :

[shell]<chemin-home-assistant>/.homeassistant/home-assistant_v2.db[/shell]

Par défaut, tous les événements et changements de statut sont enregistrés. Ces informations sont ensuite restituées un peu partout sous forme de graphiques ce qui explique que notre système soit ralenti !

Depuis la version 0.51 le système ne s’appui plus sur une base Sqlite mais utilise une base mysql (pour justement améliorer les performances). Certains éléments de ce tuto ne sont donc plus entièrement d’actualités mais, si vous souhaitez optimiser vos logs et passé sur du postgre il devrait largement vous aider.

Purge et filtres

Le premier moyen – le plus simple – est de ne garder que le strict nécessaire afin d’éviter que votre fichier db ne grossisse trop dans le temps. Pour ce faire, nous avons un composant bien pratique : recorder. Il va nous permettre de filtrer les éléments à enregistrer et de nettoyer la base de données.

Dans un premier temps, intéressons-nous simplement à la purge.  Pour la mettre en place c’est très simple. Il suffit d’ajouter les lignes suivantes dans votre fichier de configuration (pour rappel voici son chemin <chemin-home-assistant>/.homeassistant/configuration.yaml et n’oubliez pas de redémarrer Home assistant pour que votre configuration soit prise en compte).

[shell]
recorder:
purge_days: 7
[/shell]

Avec cette configuration, tous les enregistrements de plus de 7 jours seront supprimés.

Dans un second temps, vous pouvez définir exactement ce que vous souhaitez enregistrer. Deux mots-clés vous seront alors utiles, include et exclude. Ils vous permettrons de définir la liste des domaines et/ou entités à suivre ou à exclure. Voici un exemple pour clarifier :

[shell]
exclude:
domains:
– automation
[/shell]

Grâce à ces quelques lignes, tous les événements et les états provenant du domaine automation ne seront plus pris en compte.

Domaine ? Entité ?  Au secours ! Il est vrai que nous n’avions jamais abordé ces notions, mais elles sont très simples. Une entité représente une spécificité d’un domaine. Par exemple, le domaine light est lié à la gestion de l’éclairage tandis que light.hue est une entité liée à hue.

Ces solutions peuvent être suffisantes dans certains cas. Cependant, elles ne le sont pas si vous souhaitez garder un grand nombre de données. Que faire dans ce cas ?

Changer de moteur de base de données

Bien qu’étant une très bonne solution, Sqlite n’est pas la meilleure technologie dans certains cas. En effet, ce moteur de base de données est assez gourmand en mémoire lorsque qu’il travaille avec de gros fichiers. C’est assez embêtant, car mon raspberry Pi 2 n’en a pas beaucoup… Voyons comment améliorer la situation!

Le plus simple et de changer de moteur de base de données. Plusieurs alternatives sont possibles et en toute objectivité, il est difficile de réellement savoir laquelle est la plus adaptée. J’ai donc choisi de tenter PostgreSQL.

Dans la suite de l’article <utilisateur_home_assistant>  représente le profil avec lequel vous exécutez home-assistant sur votre raspberry

Dans un premier temps, installons les outils nécessaires :

[shell]sudo apt install postgresql-9.4 postgresql-server-dev-9.4[/shell]

Ensuite, ajoutez l’utilisateur exécutant Home assistant dans Postgres :

[shell]sudo -u postgres createuser <utilisateur_home_assistant>[/shell]

Créons maintenant un base de données hass qui accueillera nos données :

[shell]sudo -u postgres createdb -O <utilisateur_home_assistant> hass[/shell]

Normalement côté Postgres tout est bon. Passons aux manipulations côté python/home-assistant.
Dans un premier temps identifiez-vous.

[shell]sudo su – <utilisateur_home_assistant>[/shell]

Ensuite, il est nécessaire d’installer un adapter Postgres pour python.

[shell]pip3 install psycopg2[/shell]

Enfin, mettons en place notre nouvelle configuration Home assistant. Pour ce faire, rendez-vous dans le fichier de configuration <chemin-home-assistant>/.homeassistant/configuration.yaml et ajoutez la ligne db_url dans le composant recorder.

[shell]recorder:
db_url: postgres://@/hass[/shell]

Un petit redémarrage et hop, le tour est joué, votre système enregistre tout dans votre nouvelle base Postgres. Pour le vérifier rien de plus simple. Ouvrez un client Postgres :

[shell]sudo psql hass <utilisateur_home_assistant>[/shell]

Vous pouvez maintenant consulter votre base de données. Par exemple, avec \d vous pourrez voir la liste des tables créées. Normalement vous devriez y retrouver les éléments suivants :

  • events_event_id_seq
  • recorder_runs
  • recorder_runs_run_id_seq
  • schema_changes
  • schema_changes_change_id_seq
  • states
  • states_state_id_seq

Conclusion

Normalement, vous devriez rencontrer beaucoup moins de ralentissement. De mon côté ces manipulations ont bien fonctionné et j’ai l’impression que même avec une base de données vide mon système répond plus rapidement. N’hésitez pas à nous faire part de vos expériences et à bientôt !

 

9 réponses

  1. Chevalier Pierre dit :

    Bonsoir
    je recherche un tuto pour customiser le fichier configuration.yaml ainsi que les fichiers groups.yaml et automations.yaml
    cordialement

  2. liel dit :

    Merci pour ces articles sur home-assistant que je connaissais pas du tout.

    Juste une remarque sur les extraits de fichier de conf, comme celui-ci
    recorder:
    purge_days: 7

    il manque l’indentation avec les espaces.

  3. liel dit :

    J’ai rien dit concernant l’indentation.
    Un rafraichissement de la page les a remises !

    • Pas de soucis, merci pour le retour 😉

      Juste pour information, le système de sauvegarde de données de home-assistant a changé depuis la version 0.51 certain éléments de cette article ne sont donc plus tout à jour.

  4. Ohlin dit :

    merci pour l article
    Est ce c est possible d exporter les Donnees des sonsors dans un CSV Fichier?

  5. Bonjour,

    En vous connectant à votre base postgreSql via votre client il semble possible de faire ce type d’export grâce à la commande Copy

    Copy (Select * From foo) To ‘/tmp/test.csv’ With CSV DELIMITER ‘,’;

    Je n’ai pas testé personnellement par contre.

    Source: https://stackoverflow.com/questions/1517635/save-pl-pgsql-output-from-postgresql-to-a-csv-file

  6. Ohlin dit :

    merci pour la réponse rapide.
    le truc c’est que je veux importer les données dans la base de données d’ elasticsearch. Une autre question: est ce que Elasticsearch supporté par HA? comme ça je peux relier Elasticsearch directement à HA

  1. 28 avril 2017

    […] Lire l’article complet sur le site original […]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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