Par défaut, Home Assistant utilise une base de données SQLite pour stocker les configurations de même que les données sur les capteurs.
Cette base de données est contenue dans le fichier /mnt/data/supervisor/homeassistant/home-assistant_v2.db.
Remarquez qu'il est possible de configurer Home Assistant pour qu'il utilise un autre système de gestion de bases de données, par exemple MySQL ou PostgreSQL.
Pour explorer facilement votre base de données SQLite, vous pouvez installer le module complémentaire SQLite Web.
Alors qu'il était auparavant possible d'explorer la base de données directement dans le Terminal HassOS, ceci ne fonctionne plus depuis 2022.
Pour travailler avec votre base de données en ligne de commande, vous devrez d'abord en télécharger une copie sur votre poste de travail.
Je vous propose deux techniques pour y arriver :
scp -O -P 22222 root@192.168.1.145:/mnt/data/supervisor/homeassistant/home-assistant_v2.db /chemin/local
Sur votre poste de travail, assurez-vous que SQLite soit installé.
Dans une fenêtre Terminal, entrez la commande sqlite3 suivie du chemin complet de la base de données (là où vous l'avez téléchargée).
sqlite3 chemin/home-assistant_v2.db
monnom@MacBook-Pro-de-MonNom ~ %sqlite3 /Users/monnom/Downloads/home-assistant_v2.db
SQLite version 3.37.0 2021-12-09 01:34:53
Enter ".help" for usage hints.
sqlite>
Attention : si vous entrez le nom d'une base de données qui n'existe pas, SQLite créera une nouvelle base de données vide.
Pour connaître le nom des tables de cette base de données, entrez cette commande à la ligne de commande :
.tables
sqlite> .tables
event_data state_attributes statistics_runs
events states statistics_short_term
recorder_runs statistics
schema_changes statistics_meta
sqlite>
Si vous n'obtenez aucune table, c'est que vous avez fait une erreur dans le chemin ou le nom de la base de données lors de son ouverture.
Pour connaître la structure des tables :
SELECT sql FROM sqlite_master;
sqlite> SELECT sql FROM sqlite_master;
CREATE TABLE event_data (
data_id INTEGER NOT NULL,
hash BIGINT,
shared_data TEXT,
PRIMARY KEY (data_id)
)
CREATE INDEX ix_event_data_hash ON event_data (hash)
CREATE TABLE state_attributes (
attributes_id INTEGER NOT NULL,
hash BIGINT,
shared_attrs TEXT,
PRIMARY KEY (attributes_id)
)
CREATE INDEX ix_state_attributes_hash ON state_attributes (hash)
CREATE TABLE statistics_meta (
id INTEGER NOT NULL,
statistic_id VARCHAR(255),
source VARCHAR(32),
unit_of_measurement VARCHAR(255),
has_mean BOOLEAN,
has_sum BOOLEAN,
name VARCHAR(255),
PRIMARY KEY (id)
)
CREATE UNIQUE INDEX ix_statistics_meta_statistic_id ON statistics_meta (statistic_id)
CREATE TABLE recorder_runs (
run_id INTEGER NOT NULL,
start DATETIME,
"end" DATETIME,
closed_incorrect BOOLEAN,
created DATETIME,
PRIMARY KEY (run_id)
)
CREATE INDEX ix_recorder_runs_start_end ON recorder_runs (start, "end")
CREATE TABLE schema_changes (
change_id INTEGER NOT NULL,
schema_version INTEGER,
changed DATETIME,
PRIMARY KEY (change_id)
)
CREATE TABLE statistics_runs (
run_id INTEGER NOT NULL,
start DATETIME,
PRIMARY KEY (run_id)
)
CREATE INDEX ix_statistics_runs_start ON statistics_runs (start)
CREATE TABLE events (
event_id INTEGER NOT NULL,
event_type VARCHAR(64),
event_data TEXT,
origin VARCHAR(32),
origin_idx SMALLINT,
time_fired DATETIME,
context_id VARCHAR(36),
context_user_id VARCHAR(36),
context_parent_id VARCHAR(36),
data_id INTEGER,
PRIMARY KEY (event_id),
FOREIGN KEY(data_id) REFERENCES event_data (data_id)
)
CREATE INDEX ix_events_event_type_time_fired ON events (event_type, time_fired)
CREATE INDEX ix_events_context_id ON events (context_id)
CREATE INDEX ix_events_data_id ON events (data_id)
CREATE INDEX ix_events_time_fired ON events (time_fired)
CREATE TABLE statistics (
id INTEGER NOT NULL,
created DATETIME,
start DATETIME,
mean FLOAT,
min FLOAT,
max FLOAT,
last_reset DATETIME,
state FLOAT,
sum FLOAT,
metadata_id INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(metadata_id) REFERENCES statistics_meta (id) ON DELETE CASCADE
)
CREATE INDEX ix_statistics_start ON statistics (start)
CREATE INDEX ix_statistics_metadata_id ON statistics (metadata_id)
CREATE UNIQUE INDEX ix_statistics_statistic_id_start ON statistics (metadata_id, start)
CREATE TABLE statistics_short_term (
id INTEGER NOT NULL,
created DATETIME,
start DATETIME,
mean FLOAT,
min FLOAT,
max FLOAT,
last_reset DATETIME,
state FLOAT,
sum FLOAT,
metadata_id INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(metadata_id) REFERENCES statistics_meta (id) ON DELETE CASCADE
)
CREATE INDEX ix_statistics_short_term_start ON statistics_short_term (start)
CREATE UNIQUE INDEX ix_statistics_short_term_statistic_id_start ON statistics_short_term (metadata_id, start)
CREATE INDEX ix_statistics_short_term_metadata_id ON statistics_short_term (metadata_id)
CREATE TABLE states (
state_id INTEGER NOT NULL,
entity_id VARCHAR(255),
state VARCHAR(255),
attributes TEXT,
event_id INTEGER,
last_changed DATETIME,
last_updated DATETIME,
old_state_id INTEGER,
attributes_id INTEGER,
context_id VARCHAR(36),
context_user_id VARCHAR(36),
context_parent_id VARCHAR(36),
origin_idx SMALLINT,
PRIMARY KEY (state_id),
FOREIGN KEY(event_id) REFERENCES events (event_id) ON DELETE CASCADE,
FOREIGN KEY(old_state_id) REFERENCES states (state_id),
FOREIGN KEY(attributes_id) REFERENCES state_attributes (attributes_id)
)
CREATE INDEX ix_states_context_id ON states (context_id)
CREATE INDEX ix_states_entity_id_last_updated ON states (entity_id, last_updated)
CREATE INDEX ix_states_last_updated ON states (last_updated)
CREATE INDEX ix_states_attributes_id ON states (attributes_id)
CREATE INDEX ix_states_event_id ON states (event_id)
CREATE INDEX ix_states_old_state_id ON states (old_state_id)
sqlite>
Voici les mêmes informations présentées graphiquement.
Pour produire ce diagramme, j'ai ouvert la base de données dans Valentina Studio.
À partir d'ici, il est possible d'afficher le contenu des différentes tables. Mais avant, il est intéressant d'effectuer deux petites configurations pour améliorer le rendu.
.mode column
.headers on
Et pour voir le contenu d'une table :
sqlite> SELECT * FROM statistics_meta;
id statistic_id source unit_of_measurement has_mean has_sum
-- -------------------------------------------- -------- ------------------- -------- -------
1 sensor.node_14_battery_level recorder % 1 0
2 sensor.dome_door_window_sensor_battery_level recorder % 1 0
3 sensor.neo_capteur_5_en_1_illuminance recorder Lux 1 0
4 sensor.porte_dentree_battery_level recorder % 1 0
5 sensor.node_16_humidity recorder % 1 0
6 sensor.node_16_air_temperature recorder °C 1 0
Si vous préférez, vous pouvez remplacer .mode column par :
.mode box
Cette fois, les données appararaîtront dans un tableau.
sqlite> SELECT * FROM statistics_meta;
┌────┬──────────────────────────────────────────────┬──────────┬─────────────────────┬──────────┬─────────┐
│ id │ statistic_id │ source │ unit_of_measurement │ has_mean │ has_sum │
├────┼──────────────────────────────────────────────┼──────────┼─────────────────────┼──────────┼─────────┤
│ 1 │ sensor.node_14_battery_level │ recorder │ % │ 1 │ 0 │
│ 2 │ sensor.dome_door_window_sensor_battery_level │ recorder │ % │ 1 │ 0 │
│ 3 │ sensor.neo_capteur_5_en_1_illuminance │ recorder │ Lux │ 1 │ 0 │
│ 4 │ sensor.porte_dentree_battery_level │ recorder │ % │ 1 │ 0 │
│ 5 │ sensor.node_16_humidity │ recorder │ % │ 1 │ 0 │
│ 6 │ sensor.node_16_air_temperature │ recorder │ °C │ 1 │ 0 │
└────┴──────────────────────────────────────────────┴──────────┴─────────────────────┴──────────┴─────────┘
« Database ». Home Assistant. https://www.home-assistant.io/docs/backend/database/
« Data ». Home assistant. https://data.home-assistant.io/docs/data
▼Publicité