✍️ Scribe : Historique Longue Durée pour Home Assistant (TimescaleDB)

Bonjour à tous ! :waving_hand:

Je partage avec vous Scribe (GitHub - jonathan-gtd/scribe), une intégration pour enregistrer l’historique de Home Assistant dans une base de données TimescaleDB.

:handshake: Vos avis m’intéressent !

Je débute avec ce projet et je suis très ouvert aux conseils !

  • L’architecture vous semble-t-elle solide ?
  • Y a-t-il des fonctionnalités qui vous manquent ?
  • Des astuces pour l’optimisation ?

J’ai hâte de lire vos retours ! :chart_increasing:


:baby: Pour tout le monde (Le « Pourquoi »)

Si vous souhaitez conserver des années de données de capteurs sans ralentir Home Assistant, Scribe est fait pour vous. Il fonctionne en parallèle de votre enregistreur par défaut.

:white_check_mark: Avantages :

  • Historique Infini : Gardez vos données pendant des années sans gonfler votre base de données HA principale.
  • Performance : Votre Home Assistant reste rapide car il n’a pas à gérer des fichiers d’historique massifs.
  • Visualisation : Parfait pour créer de superbes tableaux de bord dans Grafana.

:cross_mark: Inconvénients :

  • Installation Requise : Vous avez besoin d’une instance TimescaleDB en cours d’exécution (Docker ou Add-on).
  • Visualisation Externe : Ces données sont optimisées pour des outils externes (comme Grafana), pas pour l’onglet « Historique » intégré. (Bien que vous puissiez utiliser des cartes personnalisées comme apexcharts-card ou history-explorer-card pour les voir dans vos tableaux de bord).

:nerd_face: Pour les Utilisateurs Avancés (Le « Comment »)

Scribe est conçu pour être un enregistreur haute performance « set and forget ».

  • Async-First : Construit sur asyncpg. Il écrit les données de manière asynchrone et ne bloque jamais la boucle d’événements principale.
  • Natif TimescaleDB : Gère automatiquement les Hypertables et les Politiques de Compression.
    • Compression : Économies typiques de 90-95%. (ex: 50 Go de données brutes deviennent ~2,5 Go sur le disque).
  • Contexte Riche : Il ne se contente pas de stocker des états. Il synchronise les Utilisateurs, Zones, Appareils et Intégrations vers des tables de métadonnées dédiées.
    • Exemple : SELECT * FROM states JOIN areas ON ...
  • Résilient : Dispose d’une mémoire tampon. Si la BDD est hors ligne, Scribe met les événements en file d’attente et réessaie automatiquement.

:floppy_disk: Exemples de Données

Scribe stocke les données de manière structurée pour faciliter les requêtes.

Table des États (states) :

time entity_id state value attributes
2023-10-27 10:00:00 sensor.temp 20.5 {"unit": "C"}

Tables de Données :

  • states : Enregistre tous les changements d’états.
  • events : Enregistre tous les événements (si activé).

Tables de Métadonnées :

  • users : Synchronise les utilisateurs HA (nom, admin, etc.)
  • areas : Synchronise les pièces (Salon, Cuisine…)
  • devices : Synchronise les infos appareils (Modèle, Fabricant…)
  • entities : Synchronise les infos des entités (Plateforme, Domaine, Nom…)
  • integrations : Synchronise les entrées de configuration (Domaine, Titre…)

Mots-clés : Home Assistant, TimescaleDB, PostgreSQL, PSQL, Historique, Recorder, Long Term Stockage, LTS , Grafana, Base de données, Custom Component, Intégration, Data Science, Big Data, SQL, Hypertables, Compression, Dashboard, Visualisation, Alternative InfluxDB.

3 « J'aime »

Bonjour,

J’utilise Scribe sur ma prod depuis 15 jours.
Résultat : une base clean et des chiffres qui parlent d’eux-mêmes.

Ma table « states » stocke l’équivalent de 314 Mo de données historiques, mais grâce à la compression native de TimescaleDB, elle ne pèse réellement que 15 Mo sur le disque.

L’intégration tourne en silence, les capteurs de monitoring sont précis (taille, ratio, événements…), et mon recorder Home Assistant respire enfin. :rocket: