Suppression automatiques de statistiques tous les jours (SQL, python, automatisations...)

Bonjour,

J’ai une entité dont je souhaite supprimer automatiquement les données statistiques tous les jours à Minuit.

Je m’explique :

  • je récupère ma consommation d’énergie ‹ live › via l’intégration Little Monkey (EcoJoko)
  • je récupère toutes les nuits mes données ENEDIS via linkyHa

Pour les données du jour, seul EcoJoko me remonte des données : j’aimerais les garder
Pour les données plus vieilles, j’ai un doublon EcoJoko/Enedis dans mon Tableau de Bord Energie

J’ai fait un script Python que j’exécute avec Python Script mais seul les requêtes SQL SELECT fonctionnent (ni DELETE ni UPDATE possible).
Je n’arrive pas non plus à exécuter le script python en Terminal SH directement, donc je ne suis pas allé plus loin pour le mettre dans une crontab.

Je supprime donc directement en base avec SQLite les stats d’EcoJoko mais j’aimerai l’automatiser (et cela pose un problème de Sum que je dois réinitialiser sur la dernière entrée également…)

Avez-vous une solution automatique à proposer ?

Merci d’avance !

Ma configuration


[center]## System Information

version core-2024.7.2
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.4
os_name Linux
os_version 6.6.33-haos
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.34.0
Stage running
Available Repositories 1403
Downloaded Repositories 33
HACS Data ok
Home Assistant Cloud
logged_in true
subscription_expiration 28 juillet 2024 à 02:00
relayer_connected true
relayer_region eu-central-1
remote_enabled true
remote_connected true
alexa_enabled true
google_enabled true
remote_server eu-central-1-20.ui.nabu.casa
certificate_status ready
instance_id 8970eb8ab69d4ac8b25f7b5473f55b0f
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 12.4
update_channel stable
supervisor_version supervisor-2024.06.2
agent_version 1.6.0
docker_version 26.1.4
disk_total 30.8 GB
disk_used 8.7 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity false
ntp_synchronized true
virtualization kvm
board ova
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.14.0), File editor (5.8.0), Linky (1.4.0), Matter Server (6.2.1), Samba share (12.3.1), go2rtc (1.9.4), Increase Swap (1.1.3), Samba Backup (5.2.0), SQLite Web (4.1.2)
Dashboards
dashboards 3
resources 23
views 12
mode storage
Recorder
oldest_recorder_run 6 juillet 2024 à 21:56
current_recorder_run 11 juillet 2024 à 00:17
estimated_db_size 148.30 MiB
database_engine sqlite
database_version 3.45.3
[/center]

Hello
Tu dois pouvoir faire cette action grâce au recorder quo gère la rétention des données

1 « J'aime »

Hello

Le service recorder purge ne fait pas l’affaire ?

Exemple :

service: recorder.purge_entities
data:
  keep_days: 1
  entity_id:
    - sensor.relais_sas_energy

Encore synchros @ddfdom :grin:

2 « J'aime »

Bonjour,

J’avais essayé, mais j’ai pas eu l’impression que cela a eu un effet sur les statistiques.
Recorder ne supprime pas que les events/states ?

Krull56 : cette conf, je la mets où ? Dans configuration.yaml ?

Je vais essayer, et je vous dis ça dans 2 jours :slight_smile:
Merci !

Tu peux créer une automatisation qui va lancer ce service tous les n jours à xx heure ( dans ton cas tous les jours à minuit avec un keep à 0)

@+

Bonjour,

J’ai testé le recorder, et comme je le pressentais le recorder ne supprime pas les statistiques horaires (tables statistic), seulement les données détaillées (tables states)…

J’ai toujours mes lignes dans la table statistiques (celles qui sont visibles dans le Dashboard Energie) et je n’ai plus de lignes dans la table States.

N’y a-t-il pas une autre solution pour exécuter une requête SQL en écriture de manière automatisée pour mon cas de figure ?

Merci d’avance !

Bonjour,

Je me permets de relancer ce sujet, car je n’ai toujours pas trouvé de moyen d’exécuter une requête automatique de suppression de données en base : tous les moyens que j’ai trouvés brident l’écriture/suppression de données.

Merci !

Avant de jouer ton DELETE, tu mets à jour la valeur de « pragma query_only » ?

https://www.sqlite.org/pragma.html

Bonjour,

Merci pour ton retour.

J’ai exécuté en amont pragma query_only=0 dans mon script sans succès…
En exécutant pragma query_only, cela me remonte bien 0 dans SQLITE ou via mon script.

Donc le paramètre est donc bien positionné, mais cela semble être une limitation de pythonscript/home assistant…

Mathieu

Du coup, il faudrait faire un script en full python, qui serait appelé en ligne de commande.

En effet.
Connais-tu la procédure pour exécuter un script Python directement depuis HA OS ?
Car mes précédents tests ne donnaient rien de concluant, surement des librairie manquantes ou ma syntaxe de lancement de script qui n’était pas bonne.

Merci beaucoup

Tu peux utiliser l’intégration : « shell command ».

Bonjour,

J’ai déjà installé et testé des commandes via cette intégration, mais je n’ai pas réussi à lancer mon script Pyhton avec : as-tu la commande exacte à éxecuter ?
Et s’il y a des packages python à installer/activer sur HA OS ?

Merci !

Quelles erreurs as-tu ? As-tu réussi à éxécuter un script plus simple ?

Pour le moment, il me manque simplement la commande shell à saisir pour lancer un script python depuis HA OS… Donc je n’ai pas réussi à exécuter de script faute de commande shell qui passe.

Quand je recherche python depuis le Shell avec la commande « which python », il ne le trouve pas : les librairies ne sont pas installées…

Bonjour,

Bon, j’ai pu exécuter un script Python grace à l’Add-on Advanced SSH and WebTerminal qui installe les packages Python notamment.

Cependant, sans aucune erreur retournée, les commandes en UPDATE ou DELETE ne semblent toujours pas exécutées !

➜  ~ /usr/bin/python3 homeassistant/python_scripts/script.py

entité = sensor.ecojoko_consommation_reseau
id statistics = 39
Nombre enregistrements = 15
Suppression des données :
DELETE FROM 'statistics' where metadata_id='39'
Mise à jour de la dernière sum de statistics_short_term :
UPDATE 'statistics_short_term' set sum='0' where metadata_id='39' and id='1854497'

En vérifiant en base SQLite ou en re-exécutant le script, j’ai toujours mes 15 lignes dans la table statistics. En tapant la commande en base, cela supprime bien les lignes.

J’ai bien exécuté la commande dans mon script mais ça ne change rien…
pragma query_only=0

Peut-être le mode AUTCOMMIT est à off ?

Je n’ai pas réussi à vérifier la valeur d’AutoCommit mais comme ça fonctionne sur l’interface WebSQLite, j’ai regardé plutôt du côté des droits sur le fichier database, ça donne ça. Seul le fichier database a des accès limités :

ls -l
lrwxrwxrwx    1 root     root            14 Sep 16 15:33 addon_configs -> /addon_configs
lrwxrwxrwx    1 root     root             7 Sep 16 15:33 addons -> /addons
lrwxrwxrwx    1 root     root             7 Sep 16 15:33 backup -> /backup
lrwxrwxrwx    1 root     root            14 Sep 16 15:33 config -> /homeassistant
-rw-r--r--   1 root     root             0 Sep 16 15:37 home-assistant_v2.db
lrwxrwxrwx    1 root     root            14 Sep 16 15:33 homeassistant -> /homeassistant
lrwxrwxrwx    1 root     root             6 Sep 16 15:33 media -> /media
lrwxrwxrwx    1 root     root             6 Sep 16 15:33 share -> /share
lrwxrwxrwx    1 root     root             4 Sep 16 15:33 ssl -> /ssl

J’ai essayé la commande suivante pour lancer mon script en root, toujours sans succès…
➜ ~ sudo /usr/bin/python3 homeassistant/python_scripts/script.py

Tu passes tout en 777 et tu retentes, juste pour l’expérience :joy:

Bonjour,

Je n’ose pas de peur de tout flinguer… Je pense que je vais copier la base et tester mon script sur la base copiée en modifiant les droits.