Energy Dashboard - Valeurs incorrectes régulièrement

Mon problème

Bonjour la communauté,

j’ai régulièrement des valeurs incorrects dans l’Energy Dashboard. Ces valeurs incorrects concernent généralement la production solaire et parfois la consommation globale du foyer. Cela se traduit par des valeurs très grandes sans rapport avec la réalité.

J’ai lu plusieurs sujets en anglais parlant de ce problème et évoquant le fait de pouvoir corriger ces valeurs via Outils de développement → Statistiques.
Mais je ne retrouve pas ces valeurs incorrectes pour les sensors concernés aux jours et heures où le problème se pose.

Merci d’avance pour votre aide.

Ma configuration

System Information

version core-2023.8.4
installation_type Home Assistant Supervised
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.4
os_name Linux
os_version 5.10.0-27-arm64
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4996
Installed Version 1.34.0
Stage running
Available Repositories 1380
Downloaded Repositories 9
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Debian GNU/Linux 11 (bullseye)
update_channel stable
supervisor_version supervisor-2023.12.1
agent_version 1.6.0
docker_version 24.0.7
disk_total 59.9 GB
disk_used 45.4 GB
healthy true
supported true
supervisor_api ok
version_api ok
installed_addons SQLite Web (4.1.0), File editor (5.6.0), Terminal & SSH (9.8.1), InfluxDB (5.0.0), Mosquitto broker (6.2.1), MyElectricalData (0.9.1)
Dashboards
dashboards 1
resources 5
views 5
mode storage
Recorder
oldest_recorder_run 20 janvier 2024 à 15:36
current_recorder_run 27 janvier 2024 à 09:10
estimated_db_size 2365.34 MiB
database_engine sqlite
database_version 3.41.2

Bonjour,
Tu dois avoir plusieurs mesures entre 7:00 et 8:00. Sur ta deuxième image, tu ne montres que le point de 7:00 exactement. As-tu regardé toutes les mesures entre 7:00 et 8:00?

Bonjour,

j’ai passé la requête suivante via SQLite Web :

select id, created, start, mean, min, max, last_reset, state, sum, metadata_id, datetime(created_ts, 'unixepoch') AS created_ts, datetime(start_ts, 'unixepoch') AS start_ts, datetime(last_reset_ts, 'unixepoch') AS last_reset_ts from statistics where created_ts >= unixepoch('2024-01-27 06:00:00') AND created_ts <= unixepoch('2024-01-27 20:00:00') AND metadata_id = (select id from statistics_meta where statistic_id = 'sensor.solax_energy_total') order by created_ts;

et j’obtiens :

Je ne vois pas de valeur incohérente.

Bonjour,
Peux-tu expliquer plus les différents sensors que tui regardes ou affiche dans chaque cas?
Dans to arequête SQLite, sur la première ligne, tu as la valeur 4024.4, qui correspond à ce que tu as sur ton graphique de ton premier message.
Ceci dit, cette valeur semble avoir avoir un « start_ts » à 6:00. Il semble aussi ne pas y avoir de donnée dans le résultat de la requête entre 7:00 et 8:00.

j’ai configuré les sensors suivants dans le dashboard Energy :

  • sensor.general_energy (correspondant à une des pinces ampèremétriques d’un Shelly 3EM) : conso globale de ma maison
  • sensor.solax_energy_total : données récupérées à partir des API locales de mon onduleur SOLAX X1 pour la production de mes panneaux photovoltaïques

et défini comme suit :
dans sensor.yaml :

- platform: rest
  authentication: digest
  scan_interval: 10
  resource: http://192.168.1.152/ 
  payload: "optType=ReadRealTimeData&pwd=**********"
  method: POST
  #headers: 
  #  X-Forwarded-For: 5.8.8.8
  name: "solax_rest_local"
  json_attributes:
      - type
      - sn
      - ver
      - Data
      - Information
  value_template: 'OK'  # dummy value, not used; avoids the "State max length is 255 characters" error

dans configuration.yaml

template:
  - sensor:
    - name: solax_local
      state: >
              {% if state_attr('sensor.solax_rest_local', 'sn')|length == 10  %}
                {{ now().strftime("%H:%M:%S") }}
              {% else %}
                {{ (states('sensor.solax_local')) }}
              {% endif %}
      attributes: 
        sn: >-
              {% if state_attr('sensor.solax_rest_local', 'sn')|length == 10 %}
                {{ (state_attr('sensor.solax_rest_local', 'sn')) }}
              {% else %}
                {{ (state_attr('sensor.solax_local', 'sn')) }}
              {% endif %}
        ver: >-
              {% if state_attr('sensor.solax_rest_local', 'sn')|length == 10 %}
                {{ (state_attr('sensor.solax_rest_local', 'ver')) }}
              {% else %}
                {{ (state_attr('sensor.solax_local', 'ver')) }}
              {% endif %}
        type: >-
              {% if state_attr('sensor.solax_rest_local', 'sn')|length == 10 %}
                {{ (state_attr('sensor.solax_rest_local', 'type')) }}
              {% else %}
                {{ (state_attr('sensor.solax_local', 'type')) }}
              {% endif %}
        Data: >-
              {% if state_attr('sensor.solax_rest_local', 'sn')|length == 10 %}
                {{ (state_attr('sensor.solax_rest_local', 'Data')) }}
              {% else %}
                {{ (state_attr('sensor.solax_local', 'Data')) }}
              {% endif %}
        Information: >-
              {% if state_attr('sensor.solax_rest_local', 'sn')|length == 10 %}
                {{ (state_attr('sensor.solax_rest_local', 'Information')) }}
              {% else %}
                {{ (state_attr('sensor.solax_local', 'Information')) }}
              {% endif %}

    - name: "Solax Energy Today"
      unit_of_measurement: "kWh"
      state: "{{ state_attr('sensor.solax_rest_local', 'Data')[13] | float / 10 }}"
      device_class: energy
      state_class: total_increasing
      icon: mdi:solar-panel
      attributes:         
          last_reset: '1970-01-01T00:00:00+00:00'

    - name: "Solax Energy Total"
      unit_of_measurement: "kWh"
      state: "{{ state_attr('sensor.solax_rest_local', 'Data')[11] | float / 10 }}"
      device_class: energy
      state_class: total_increasing
      icon: mdi:chart-line
      attributes:         
          last_reset: '1970-01-01T00:00:00+00:00'

On dirait que certains jours le sensor « Solax Energy Total » est remis à zéro :

Mais je ne retrouve pas ça en base de données :

Du coup comment empêcher ces ré-initialisations ?

Salut,

j’ai ça de manière très très rare et ça vient de ma passerelle enphase qui quand elle est éteinte et rallumée envoie comme première la production historique totale dans l’entité de conso journalière!
Et ça donne ce résultat.

La correction est possible assez facilement.
Outils de dev > Statistiques.
Là tu recherches le sensor en question « sensor.solax_energy_total » a priori.
Et sur la ligne tu devrais avoir un icone « Ajuster la somme »
image

En cliquant dessus il faut aller à la date et heure où tu as cette mauvaise valeur et tu corrige…
Pour la trouver il faut peut-être « jouer » avec les minutes car il n’affiche que quelques valeurs à la fois

Salut,
j’avais déjà essayé de retrouver les valeurs incorrectes via cet outil mais sans succès. Et là bizarrement j’ai retrouvé toutes les valeurs incorrectes et j’ai pu les corriger. Merci.

1 « J'aime »

Bonjour à tous,

en ce moment ce phénomène se produit tous les jours.
Plutôt que d’avoir à corriger ces valeurs incorrectes n’existe-t-il pas un moyen d’éviter que cela se produise ?

Merci d’avance pour votre aide.

Les utiity meters sont en total increasing, et les graphs energy font la différence entre 2 valeurs. Si ton compteur passe à 0 à un moment donné, il trouve tout d’un coup une consommation importante entre 2 entrées.
Si je comprends bien, la solution est donc de trouver la raison pour laquelle ton compteur passe à 0 tous les jours à la même heure.
Y-a-t’il un redémarrage, une automation, ou un autre évènement?

Salut,

j’ai vu que tu avais fait un requête SQL sur les tables statistiques… mais je ne pense pas que ce soit là qu’il faut chercher. La valeur dans le dashboars et dans les statistiques ce ne sont que des conséquences. La source est du côté de l’entité qui fournit les valeurs.

Il faut comprendre ce qu’il se passe dans celle-ci. Comme l’explique @Gilles2 le dashboard suit l’évolution des entités par tranches de temps c’est tout…

C’est celui-ci? sensor.solax_energy_total
Si c’est le cas tu le dis toit même que c’est récupéré par une API?
Donc tu devrais pouvoir contrôler ou filtrer la valeur pour éviter d’enregistrer des 0.
Ca ressemble à quoi la récupération de cette valeur ?

Le sensor utilisé par le dashboard Energy est bien sensor.solax_energy_total

Ce sensor est alimenté par une requête vers l’API rest de mon onduleur (voir définition dans mon post plus haut) toutes les 10 secondes.

L’onduleur s’arrête toutes les nuits lorsqu’il n’y a plus de production solaire et redémarre le matin lorsque la production débute.

En temps normal, la valeur de ce sensor est à 0 le matin au démarrage. Mais je ne sais pas pourquoi parfois home assistant récupère la dernière valeur de la veille au soir avant l’arrêt de l’onduleur.

Cas normal (27/11) :

La valeur est à 0 (c’est bon) :

Cas d’erreur 26/11 :

La valeur du matin est incorrecte (ici 3792,7) :

@ AlexHass à partir de quelle(s) table(s) le dashboard Energy s’alimente ?

Je l’ai dit avant, regarder les statistiques et le dashboard n’est pas ce qu’il faut que tu fasse!
Ce n’est pas un bug làça marche comme prévu!!. Mais c’est ton sensor qui est mal alimenté c’est ça qu’il faut que tu règles!

C’est justement le fait que l’onduleur s’éteint la nuit qui doit poser le souci, il est possible qu’au redémarrage l’API réponds alors qu’il n’est pas complètement en fonction.

La vrai valeur est que tu veux est dans les 4000 et n’arrête pas d’augmenter. C’est bien ça?

Donc dans cette config, il faut ajouter de la logique dans le « state » pour ne pas récupérer les mauvaises valeurs.

    - name: "Solax Energy Total"
      unit_of_measurement: "kWh"
      state: "{{ state_attr('sensor.solax_rest_local', 'Data')[11] | float / 10 }}"
      device_class: energy
      state_class: total_increasing
      icon: mdi:chart-line
      attributes:         
          last_reset: '1970-01-01T00:00:00+00:00'

Le calcul de state devrait ressembler à quelque de de semblable à ça:

      state:> 
          {% if (state_attr('sensor.solax_rest_local', 'Data')[11] | float / 10) == 0  %}
            {{ states("sensor.solax_energy_total") }}
          {% else %}
            {{ state_attr('sensor.solax_rest_local', 'Data')[11] | float / 10 }}
          {% endif %}

Merci AlexHass. Cette modification a semble-t-il corrigé le problème.
Aujourd’hui je n’ai pas eu à corriger manuellement les données.

Bonjour, j’ai le meme soucis avec la mise en route de mais panneaux solaire.
Ou est ce que je dois ajouter ce code yaml???

Salut,

Il faut déjà voir si c’est le même souci avec la même installation.
Et le yaml que j’ai partagé se met dans la config du sensor qui récupère l’énergie totale produite.