Energie - Changer de source principale sans perdre l'historique

Changement d’entité de source d’énergie

Bonjour,

Pour suivre la consommation d’énergie, j’ai un ESP32 avec CT clamp. Il remonte via ESPHome une entité « sensor.energy_esp_power » donnant la puissance en W. J’utilise la plateforme « integration » (Riemann) pour calculer l’énergie en kWh, l’entité est « sensor.energy_spent ».
Dans le tableau de bord « Energie », onglet « Réseau électrique », cette entité est utilisée pour la « Consommation du réseau ».

Pour améliorer le suivi, j’ai préféré utiliser par un PZEM004T relié à l’ESP32. Ce dernier remonte directement la puissance ET l’énergie (cumulée) à HA, via l’entité « sensor.pzem_004t_v3_energy ».

Pour l’instant j’ai gardé les deux entités.
Je voudrais changer dans le tableau de bord Energie la source sans perdre l’historique.

Je peux bien sûr rajouter l’entité « sensor.pzem_004t_v3_energy » à la consommation du réseau. Mais si j’enlève l’autre « sensor.energy_spent » je perds l’historique.

Est-ce que je peux simplement changer la source de cette entité pour qu’elle reste toujours à 0 ? :

- platform: integration
  source: sensor.energy_esp_power
  name: energy_spent
  unit_prefix: k
  round: 2

Ou avez-vous une meilleure idée ?
Merci d’avance et encore bravo à cette excellente communauté !

Je ne sais pas si il y a une solution miracle…en tout cas j’ai rencontré le même problème et je me suis résigné a perdre mon historique.

Par contre, je suis passé par un template pour reconfigurer le module. Ainsi si je dois changer d’appareil source, je modifie le template mais le module énergie garde la même variable source.

Salut,

Je pense que ce que tu veux faire, garder energy_spent et cahnger la source devrait marcher, mais ça laisse du coup 2 entités qu’il ne faut pas oublier de ne pas supprimer :slight_smile:

Sinon si t’étais aventureux et avec une connaissance de base en SQL tu pourrait tenter de rattacher toute l’historique de ton ancienne entité sur ta nouvelle. Mais bon à tes risques et périls :wink:

Merci pour vos deux réponses.
Je vais tenter ma chance, en créant un template et en recréant son historique via la base SQL.
Je posterai le résultat… :slight_smile:

Après un nombre non négligeable de galères… Ca fonctionne :clinking_glasses:

J’ai dû créer un nouveau template sensor :

    - name: Consommation Maison
      state_class: total_increasing
      device_class: energy
      unit_of_measurement: kWh
      icon: mdi:transmission-tower-import
      state: >
        {{ (states('sensor.pzem_004t_v3_energy')|float / 1000) }}

Une fois ce nouveau sensor créé, les opérations se font directement dans la base SQL via SQLite Web.
Je suis allé récupérer les « statistic_id » dans la table « statistics_meta » de mon précédent et de mon nouveau sensor.
Puis dans la table « statistics », j’ai inséré (copié) des entrées pour tout l’historique de mon précédent sensor mais avec le « statistic_id » du nouveau. Comme ça le nouveau a l’historique de l’ancien.

INSERT
INTO "statistics" (created, start, mean, min, max, last_reset, state, sum, metadata_id)
SELECT created, start, mean, min, max, last_reset, state, sum, <ici ID nouveau sensor> FROM "statistics"
WHERE metadata_id = <ici ID ancien sensor>

Enfin, je suis allé récupérer la dernière valeur statistique XXX du précédent sensor, ainsi que la dernière valeur YYY du sensor qui sert de base au template (ici ‹ sensor.pzem_004t_v3_energy ›) pour modifier le template comme suit :

    - name: Consommation Maison
      state_class: total_increasing
      device_class: energy
      unit_of_measurement: kWh
      icon: mdi:transmission-tower-import
      state: >
        {{ (states('sensor.pzem_004t_v3_energy')|float / 1000) + XXX - YYY }}

Et voilà ! :grinning:
Bon, il ne faut pas avoir peur de mettre le bazar dans la base de données des statistiques et de tester quelques valeurs, mais sinon ça se fait bien.

Hello !

L’erreur de base que l’on a tous fait, moi le premier, est de ne pas créer un utility meter à partir de la source, source facilement modifiable…

Je me demandais donc pourquoi tu ne crée pas un UM mais un nouveau sensor ?

Mon idée étant d’aller modifier la db et de remplacer par un UM (et ensuite d efaire un tuto step by step…