Purge de base de données > 7.5Go!

Bonjour

Le sujet a été déjà abordé notamment ici : Purge de la base de donnees HA

Mais malgré un recoder touffu ma base de données ne se purge pas des anciens enregistrements !

Mon recoder
########################################################
###                  Base de données                 ###
########################################################
recorder:
  purge_keep_days: 7
  auto_purge: true
  commit_interval: 20
  include:
    domains:
      - automation
  exclude:
    domains:
      - automation
      - binary_sensor
      - bodymiscale
      - button
      - calendar
      - camera
      - climate
      - cover
      - device_tracker
      - group
      - input_boolean
      - input_button
      - input_datetime
      - input_number
      - input_select
      - input_text
      - light
      - lock
      - media_player
      - number
      - openplantbook
      - persistent_notification
      - person
      - plant
      - proximity
      - remote
      - script
      - select
      - sensor
      - siren
      - sun
      - switch
      - update
      - vacuum
      - water_heater
      - weather
      - zone
    event_types:
      - automation_triggered
      - script_started
      - service_registered
      - call_service
      - service_removed
      - service_executed
      - platform_discovered
      - homeassistant_start
      - homeassistant_stop
      - feedreader
      - component_loaded
      - timer_out_of_sync
    entities:
      - sun.sun
      - sensor.cpu
      - sensor.cpu_temp
      - sensor.date
      - sensor.time
      - sensor.new_york
      - cover.kitchen_cover
      - switch.mystrom_switch
      - sensor.internet_time
      - sensor.solar_angle1
      - sensor.solar_angle
      - automation.lights_watchdog
      - sensor.date_time
      - switch.pc_test
      - sensor.last_boot
    entity_globs:
      - sensor.weather_*
      - sensor.*_uptime
      - sensor.*_tx
      - sensor.*_rx
      - sensor.*_uptime_2
      - sensor.*_tx_2
      - sensor.*_rx_2
      - sensor.*_motion
      - sensor.*_high
      - sensor.dalg_3070_*
      - sensor.dalg_win11_*
      - sensor.unifi_gateway_*
      - sensor.internet_time
      - sensor.dalg_cam*
      - sensor.pc_test_*
      - select.pc_test_*

logbook:
  exclude:
    domains:
      - media_player
      - device_tracker
      - weather
      - sun
    entities:
      - automation.lights_watchdog
      - sensor.date

J’ai donc lancer le petit logiciel sympathique de DB Browser qui permet de bien voir les choses :slight_smile:

Actions : Copie de la base de données sur un disque isolé, lancement de l’outil et de la requête SQL :

SELECT entity_id, COUNT(*) as count FROM states GROUP BY entity_id ORDER BY count DESC LIMIT 20;

le résultat est immédiat :scream:

Je dois certainement en avoir encore d’autres qui suivent :slight_smile:

Ma question : faut-il que je supprime une à une les entity_id que je ne veux plus via une requête simple et radicale :

DELETE FROM states WHERE entity_id="switch.pc_test"

ou bien je peux le faire en masse mais ciblé quand même ?

En complément, j’ai déjà une automation (depuis pas mal de temps) qui purge normalement la base si > 1Go ! mais sans effet :frowning: malgré un sensor bien supérieur

Mon automation
alias: Purge de la base de donnée
description: Purge la base de donnée lorsque celle-ci dépasse 1Go
trigger:
  - platform: numeric_state
    entity_id: sensor.home_assistant_v2_db_size
    above: "1000"
condition: []
action:
  - service: recorder.purge
    data:
      keep_days: 7
      repack: true
mode: single

j’aimerais pas être hyper radical non plus en supprimant ma base.
Je voudrais bien garder ma production de panneau solaire par exemple.

Se posera ensuite la question, comment avoir de l’histoire sur des temps long (années) et des éléments juste pour affichage Dashboard. Avec quel méthodes, outils etc…

Mais avant tout j’aimerais pouvoir réduire cette BDD comme il faut et faire en sorte qu’elle ne profite plus autant qu’aujourd’hui : un bon régime :wink:

Merci de votre aide

Bonjour, si vous avez bien configuré le temps de rétention de la base de données, normalement celle ci ne devrait pas trop gonfler et se vider toutes les nuits ( vers 2 ou 4 h je ne sais plus )
ce qui ne se vide pas, ce sont les long term statistics mais ça ne devrait pas représenter énormément .
Perso j’ai une semaine de rétention seulement et ma base fait 840 Mo.
Jouer avec la base de données c’est toujours risqué !
Phil

1 « J'aime »

Corrige le recoder parce que manifestement il ne fonctionne pas bien :
tu fais un exclude du domaine sensor, sauf que ton top 10 n’est composé que de ça …

Purge ok mais dans tous les cas tu conserves les données de 7J … Donc si la taille de tout ça fait 1, 2, 20 ou 30 Go ça restera 1, 2, 20 ou 30

L’idée c’est de passer par les données à long terme pour ça, c’est indépendant.

1 « J'aime »

Je suis surpris dans la conf de @jerome6994 de ne pas voir la ligne :

db_url: "The URL that points to your database"

Ensuite, selon la doc :

image

Ce que je comprends (et ce que j’ai chez moi), c’est que à partir du moment où le « include » est paramétré, tout ce qui n’est pas spécifié est de fait « exclude ».

Donc je rejoins @Pulpy-Luke il y’a des corrections a apporter à ta conf.

1 « J'aime »

C’est pas indispensable


ça doit surtout être plus utile quand on passe par mariadb & co, pas forcément avec sqlite

Ok je pensais que si :wink:

Re

Bon le temps de venir au bureau (30’) :slight_smile: et d’ouvrir à nouveau HA et quelle surprise ma BDD est bien plus maigre que ces jours-ci !

il lui fallait peut être un peu de temps pour réduire sa taille de départ aussi ! tout n’est pas immédiat dans ce monde hyper speed :slight_smile:

@Pbranly j’en conviens que si j’avais fait les choses comme il faut dès le début je n’aurais pas eu ce désagrément. Mais mieux vaut tard que jamais pour revenir dans le droit chemin :wink:
Quand on découvre HA on ne voit pas tout au premier coup d’œil

@Pulpy-Luke il y a des éléments dans le recorder que j’ai ajouté hier pour être encore plus strict donc normal qu’il y ait encore des sensors alors que je les ai enlevé mais tardivement
Je comprends bien que si 3 jours c’est 6Go alors je ne descendrais jamais en dessous (mais cela me semblait en fait improbable)

Je vais regarder le sujet sur les données à long terme car c’est intéressant et primordiale.
Elle ne sont pas nombreuses mais il en existe à mes yeux

@Herbs il me semblait que db_url: "The URL that points to your database" c’était pour les BDD externe ou type mariaDB là je suis sur la BDD de HA original

Je vais revoir la configuration du recorder mais l’idée est quand même d’avoir si possible le maximum de chose possible dans le minimum de place possible :rofl:

Question complémentaire @Pulpy-Luke dans le recoder on peut écrire :

- *humidity
- *temperature
- ....

car mon nommage à date est : pour mes capteurs TYPE_PIECE_LIEU_USAGE
par exempe PC_ATELIER_EXT_D ou TEMP_CH_Parents

Oui on peut faire des regex dans les ‹ globs › . Un peu plus proprement :

recorder:
  include:
    domains:
      - alarm_control_panel
      - light
    entity_globs:
      - binary_sensor.*_occupancy
  exclude:
    entities:
      - light.kitchen_light

Bonjour,

Oui tu peux faire ce genre de chose mais tout dépend du nommage !

recorder:
  auto_purge: true
  purge_keep_days: 7
  exclude:
    entity_globs:
      - sensor.*battery_level*
      - sensor.mpu6050*
      - sensor.freebox*
      - sensor.anniversary*
      - sensor.esp*_wifi*

Bob

1 « J'aime »

Trop rapide @Pulpy-Luke :wink:

1 « J'aime »

Je savais pas qu’on pouvait avec deux *

En tout cas ça plus le fait dès Z2M interdire la montée des LQI par exemple cela peut limiter fortement les choses !
Je me demande si on peut faire la même chose sur ZwaveJS

En tout cas la logique d’enregistrer tout sauf si on dit ne pas enregistrer est pas forcément la mienne au début ! Je préfère dire ce que je veux enregistrer device par device via un bout de code ou case à cocher etc…

Une gymnastique pas simple venant de Jeedom

A votre avis ce recorder est violent ou pas ?

recorder:
  purge_keep_days: 7
  auto_purge: true
  auto_repack: true
  include:
    domains: 
      - binary_sensor
      - sensor
      - switch
      - person
      - device_tracker
      - light
      - select
      - plant
      - cover
  exclude:
    domains:
      - automation
     # - binary_sensor
      - bodymiscale
      - button
      - calendar
      - camera
      - climate
     # - cover
     # - device_tracker
      - group
      - input_boolean
      - input_button
      - input_datetime
      - input_number
      - input_select
      - input_text
     # - light
      - lock
      - media_player
      - number
      - openplantbook
      - persistent_notification
    #  - person
    #  - plant
      - proximity
      - remote
      - script
     # - select
     # - sensor
      - siren
      - sun
     # - switch
      - update
      - vacuum
      - water_heater
      - weather
      - zone
    event_types:
      - automation_triggered
      - script_started
      - service_registered
      - call_service
      - service_removed
      - service_executed
      - platform_discovered
      - homeassistant_start
      - homeassistant_stop
      - feedreader
      - component_loaded
      - timer_out_of_sync
    entities:
      - sun.sun
      - sensor.cpu
      - sensor.cpu_temp
      - sensor.date
      - sensor.time
      - sensor.new_york
      - cover.kitchen_cover
      - switch.mystrom_switch
      - sensor.internet_time
      - sensor.solar_angle1
      - sensor.solar_angle
      - automation.lights_watchdog
      - sensor.date_time
      - switch.pc_test
      - sensor.last_boot
    entity_globs:
      - sensor.weather_*
      - sensor.*_uptime
      - sensor.*_tx
      - sensor.*_rx
      - sensor.*_uptime_2
      - sensor.*_tx_2
      - sensor.*_rx_2
      - sensor.*_motion
      - sensor.*_high
      - sensor.dalg_3070_*
      - sensor.dalg_win11_*
      - sensor.unifi_gateway_*
      - sensor.internet_time
      - sensor.dalg_cam*
      - sensor.pc_test_*
      - select.pc_test_*

Après je verrais en fonction de ce que je veux intégrer dans mon Dashboard si je rajoute des choses dans l’include

Pour le faire j’ai joué avec ces deux modèles :

{% for state in states %}
{{ state.entity_id }}
{%- endfor -%}
{% set unique_domains = states | map(attribute='domain') |list | unique | list %}
{% for domain in unique_domains %}
- {{domain}}
{% endfor %}

Salut,
c’est pas nécessaire, c’est activer par défaut :wink:

auto_purge boolean (optional, default: true) > tout les jours a 4h12
auto_repack boolean (optional, default: true) > tous les deuxième dimanche du mois

Sinon ca va c’est pas violent ton filtrage, regarde le mien

recorder:
  purge_keep_days: 2
  exclude:
    domains:
      - automation
      - calendar
      - climate
      - device_tracker
      - group
      - media_player
      - person
      - proximity
      - scene
      - script
      - sun
      - timer
      - weather
      - zone
    event_types:
      - automation_triggered
      - home_assistant_start
      - home_assistant_stop
      - script_started
      - service_registered
    entities:
      - binary_sensor.54ef44273cc1_gateway
      - binary_sensor.wan_status_2
      - camera.lsc_smart_indoor_camera
      - light.lsc_smart_indoor_camera_indicator_light
      - sensor.11_weather_alert
      - sensor.66_weather_alert
      - sensor.entrance_door_openings
      - sensor.entrance_door_openings_back
      - sensor.fenetre_chambre_battery_state
      - sensor.fenetre_salle_de_bain_battery_state
      - sensor.hacs
      - sensor.hacs_version
      - sensor.home_assistant_log_size
      - sensor.home_assistant_v2_db_size
      - sensor.moon
      - sensor.network_in_eth0
      - sensor.network_out_eth0
      - sensor.network_throughput_in_eth0
      - sensor.network_throughput_out_eth0
      - sensor.local_ip
      - sensor.temp_max_to_day
      - sensor.temp_min_to_day
      - sensor.ytube_music_player_extra
      - switch.54ef44273cc1_led
      - switch.lampe_du_pc_child_lock
      - switch.lampe_du_pc_switch_1
      - switch.television_screen_state
      - switch.wifi_switch_2
      - sensor.0x00158d0007072fbe_side
      - sensor.0x00158d0007072fbe_action_to_side
      - sensor.0x00158d0007072fbe_action_side
      - sensor.0x00158d0007072fbe_action_from_side
      - sensor.0x00158d0007072fbe_action_angle
      - sensor.0x00158d0005d299cf_iinst
      - sensor.zigbee2mqtt_networkmap
    entity_globs:
      - binary_sensor.ags3k_w09_*
      - binary_sensor.diskstation_*
      - binary_sensor.086ad0c2_7114042e*
      - binary_sensor.e595be22_ba7576d6*
      - binary_sensor.f5345721_d8415bb4*
      - input_select.ytube_music_player_*
      - light.smart_switch_*
      - select.lsc_smart_indoor_camera_*
      - switch.lsc_smart_indoor_camera_*
      - sensor.*_action
      - switch.e1_zoom_camera_*
      - switch.*_power_outage_memory
      - select.*_power_on_behavior
      - sensor.*_linkquality
      - sensor.*_battery
      - sensor.*_ble
      - sensor.*_illuminance
      - sensor.*_signal_strength
      - sensor.*_zigbee
      - sensor.*_illuminance_lux
      - sensor.ags3k_w09_*
      - sensor.086ad0c2_7114042e*
      - sensor.e595be22_ba7576d6*
      - sensor.f5345721_d8415bb4*
      - sensor.carburants_*
      - sensor.count_lumieres_*
      - sensor.disk_*
      - sensor.diskstation_*
      - sensor.h3113_*
      - sensor.myenedis_*
      - sensor.pas_de_la_case_*
      - sensor.poubelle_*
      - sensor.saint_frichoux_*
      - sensor.seventeentrack_*
      - update.*_update
  include:
    domains:
      - alarm_control_panel
      - binary_sensor
      - light
      - sensor
      - switch
    entities:
      - device_tracker.android
      - device_tracker.diskstation
      - device_tracker.google_nest_mini
      - device_tracker.google_nest_mini_sdb
      - device_tracker.sagemcom_broadband_sas_2b_18_c0
      - device_tracker.huawei_matepad_t10s
      - device_tracker.pc_zam01
      - device_tracker.rlxlinux
      - device_tracker.sony_xperia
      - device_tracker.android_6e3e37f912fab9fd
      - device_tracker.homeassistant
      - device_tracker.decodeur_tv_uhd
      - device_tracker.repeteurwifi6_aaf0
      - person.warcozes
      - sensor.saint_frichoux_pressure
      - input_text.tarif_heures
      - calendar.ecowatt_downgraded_level
      - calendar.next_load_sheddings

Ok donc les deux auto sont pas nécessaire mais ne dérange pas au fonctionnement cela me permet de me souvenir dans un mois ou deux que ces deux paramètres sont bien actif :grin:

Compliqué de bien savoir si on exclue les bonne chose ou pas
Je trouve tellement plus évident de dire par défaut rien n’est en base historique etc et inclue les un à un ou par domaine. Ainsi ça limite le risque d’obésité de la BDD.

Du coup à force de regarder les Go
Ce matin la base est à 1Go encore malgré tout (200 device Zigbee 30 zwave et 20 BT) plus les autres intégration monitoring etc.

Mais ce qui m’a surpris aussi c’est la place sur mon disque proxmox de 32Go quasi 70% d’espace utilisé sans sauvegarde locale elle ms sont toutes externe

Une séance de spéléologie va être encore à l’ordre du jour :crazy_face: à la fois dans la BDD mais sur le reste aussi

Bonjour,

C’est vrai que venant de jeedom cette histoire de recorder n’est pas vraiment simple ^^
Pour faire je me suis servi de ce tuto de Byfeel qui précise un peux les modalités de configuration.
De ce que j’ai compris si on ne met que des include alors il n’enregistrera que les entity voulu dans cette liste. Par contre si on met des exclude alors il faudra tous préciser.
Perso j’avais une BDD (J’ai installer Maria DB et PhpMyAdmin) de 2 GB (les uptime sont très bavard…) et maintenant je n’ai plus que 300 Mo ( à suivre car je n’ai pas atteint les 30j encore).
Je met mon recorder si ca intéresse mais je suis loin d’être expert ^^

purge_keep_days: 30
commit_interval: 20
auto_repack: true
auto_purge: true
include:
  domains:
    - counter
    - automation
    - cover
    - input_boolean
    - input_select
    - light
    - script
    - person
  entities:
    - sensor.backup_state
    - device_tracker.access_point_etage
    - device_tracker.alexa_echo_ch2
    - device_tracker.alexa_echo_ch3
    - device_tracker.alexa_echo_douche
    - device_tracker.alexa_echo_salle_de_bain
    - device_tracker.alim_tablette_entree
    - device_tracker.apple_tv_5
    - device_tracker.aquarium
    - device_tracker.chevet_nany
    - device_tracker.chevet_seb
    - device_tracker.cumulus
    - device_tracker.epson6e98de
    - device_tracker.fil_pilote
    - device_tracker.garage_nany
    - device_tracker.garage_seb
    - device_tracker.gateway_bureau
    - device_tracker.gateway_garage
    - device_tracker.homeassistant
    - device_tracker.iphone_seb
    - device_tracker.laptop_0tfa24ib
    - device_tracker.netatmo_relay
    - device_tracker.prise_toiture
    - device_tracker.proxmox
    - device_tracker.seb
    - device_tracker.udm
  entity_globs:
    - sensor.teleinfo_*
    - sensor.distance_*
    - sensor.batterie_*
    - sensor.humidite_*
    - sensor.humidity_*
    - sensor.temperature_*
    - binary_sensor.voiture_*
    - binary_sensor.etat_*
    - binary_sensor.ils_*
    - binary_sensor.voiture_*
    - binary_sensor.fenetres
    - binary_sensor.portes
    - binary_sensor.porte_garage
    - binary_sensor.status_*

Par contre effectivement comment fait t’on quand on veux garder des données d’une année sur l’autre???
J’ai pas besoin d’avoir tous mais par exemple pour une température juste une moyenne, min et max de la journée.

Bonne journée

Salut,

En fait il ne surtout pas faire la comparaison entre Jeedom et HA… C’est pas du tout la même philosophie et on monte des usines à gaz pour rien. C’est évidement pas facile au début mais c’est indispensable. Je le sais bien j’ai fait pareil au début :sweat_smile:
L’important c’est de bien chercher dans la doc (qui est super bien faite), il y a des alternatives (parfois très malines) pour obtenir le même résultat :

  • Base à durée de rétention courte : on filtre avec les trucs utiles (donc exit les uptime, date et autres machins bavards)… 30J c’est une fausse bonne idée. Et quand le filtrage est assez bien fait, l’ajout de nouveaux matériels n’a pas de véritable impact sur la prise de poids de la base
  • Dashboard energy, statistiques et utility meter pour le stockage longue durée
  • et si besoin d’encore un peu plus souple : influxdb
3 « J'aime »

Oui pas de comparatif entre les deux outils Jeedom et HA c’est pas la même approche nous sommes d’accord mais il est normal d’avoir dans nos débuts une référence à Jeedom. Mais allons de l’avant et approprions nous la chose.

je dirais qu’il faut être raisonnable et le besoin est :

  1. Avoir des graphes sur le Dashboard sympa de quelques métriques donc du court terme quelques jours (c’est porté par la BDD de HA si j’ai bien compris)
  2. Avoir un historique plus important afin de faire des comparaisons d’année en année et là soit on stock tout sur une solution externe soit on utilise les outils types utility meter, energy et statistiques (ce dernier pas encore bien compris le truc)
    et pour moi c’est ces éléments là que tu envoies sur du influx par exemple (pas de sens vraiment d’envoyer la température toutes les minutes à vie en tout cas dans mon cas)

la doc est dense et très bien faite je confirme
parfois cela manque de visuel en plus des exemple de code mais bon le must to have :slight_smile:
En tout cas l’échange est fort intéressant sur l’approche de la BDD et je t’en remercie
Cela me montre le chemin encore à parcourir top

En fait, c’est pas forcement impossible ni mauvais d’envoyer les températures dans influxdb (sur un bucket à faible durée de rétention) et de créer des mécanismes pour en extraire des stats (min/max/moy). Il y a tout un loooong sujet ici

Ca marche je vais reduire à 7 jours et me renseigner pour les statistiques.

C’est vrai qu’on à tendance à vouloir retranscrire ce qui nous plait sur jeedom ca nous rassure :slight_smile:

Merci des conseils et à bientôt