Obtenir valeur dans le passé pour un nouveau sensor

Mon problème

Je souhaite créer un sensor avec sa valeur actuelle - sa valeur ce matin à minuit.
J’ai essayé avec un compteur de service public cela ne fonctionne pas tres bien je trouve
(Transformer des données absolues en données relatives journalières - #9 par nicolas_HILAIRE)

Du coup je voudrai faire un truc comme ca mais je sais que la fonction state_at() n’existe pas …

- trigger:
    - platform: time
      at: '23:59:59'
    - platform: state
      entity_id: sensor.linky_energie_soutiree
  sensor:
    - name: 'Conso jour'
      state: >
        {% set t_new = states('sensor.linky_energie_soutiree') - state_at('sensor.linky_energie_soutiree',  '00:00:00') %}

Ma configuration

System Information

version core-2023.12.0
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.6
os_name Linux
os_version 6.1.58-haos-raspi
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 5000
Installed Version 1.33.0
Stage running
Available Repositories 1356
Downloaded Repositories 22
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 Home Assistant OS 11.2
update_channel stable
supervisor_version supervisor-2023.11.6
agent_version 1.6.0
docker_version 24.0.7
disk_total 57.8 GB
disk_used 18.4 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Studio Code Server (5.14.2), Terminal & SSH (9.8.1), Samba Backup (5.2.0), ESPHome (2023.11.6), Let’s Encrypt (5.0.6)
Dashboards
dashboards 3
resources 14
views 7
mode storage
Recorder
oldest_recorder_run 17 décembre 2023 à 20:08
current_recorder_run 17 décembre 2023 à 21:08
estimated_db_size 487.98 MiB
database_engine sqlite
database_version 3.41.2

Salut

En quoi ça ne fonctionne pas bien ? C’est la méthode la plus officielle.

Alors, je ne suis pas sur que le principe soit bien meilleur, surtout avec des fonctions qui n’existent pas.
Ce que tu peux faire c’est :

  • Déclencher ton action à 23H59 ou 0H00 (et pas 23H59 et 59s) : HA fait son calcul à la minute (en réalité qq secondes après la minute).
  • Prendre la valeur (fonction states()) au moment de l’exécution de l’automatisation. La différence entre la valeur à heure fixe ou la valeur à heure fixe + 59s est négligeable. C’est en plus probablement pas une valeur instantanée

Voici le post que j’ai fait ou j’explique ce qui ne fonctionne pas :

Concernant la valeur dans le passé, plutot que de compter toute la journée des valeurs qui s’incrémentent, je me dis que c’est plus simple de simplement calculer le delta entre la valeur absolue actuelle et la valeur absolue d’hier à la meme heure. cela fait moins de calculs que de faire le compte a chaque evennement. Du coup je ne vois pas comment faire

Perso je ne vois pas vraiment en quoi la valeur est aberrante : je vois une reset tous les jours et une valeur croissante sur la journée. C’est à mon avis plus un problème de conversion W /kW voire de kVA

Donc le principe est le même à 23H59 tu fais le calcul entre ta valeur actuelle et ton entité. Et tu remets ça dans ton entité.
Le fait de le faire à 23H59 permet de t’assurer que l’entité porte bien la date d’hier dès 0h00

Merci je viens de comprendre pour mon entité a 23h59!

Pour le compteur avec les valeurs aberrantes ca semble fonctionner et effectivement j’ai bien un reset tous les jours mais je ne comprends pas pourquoi certains jours ca me donne des valeurs correctes autour de 20kwh et des jours ca va donner des valeurs de l’ordre de 20 000 kwh je ne comprends pas pourquoi. Et mes donnees viennent du TIC donc avec un checksum donc normalement pas possible d’avoir des mauvaises donnees. Il se comporte comme si au lieu de faire valeur actuelle - valeur d’avant il faisait valeur actuelle - 0 et mes donnees montent d’un coup.

Je maintiens mon idée, tu as facteur 1000 (très, trop proche de la différence entre KW et W pour être une coïncidence ) Et comme tu as à priori l’option tempo, je parie qu’un des jours est mal calculé ou a la mauvaise unité.
image
Donc d’un coté tu fais 20000W que tu convertis en 20kW. Et l’autre jour tu n’a pas la conversion et tu mets 20000W directement en 20000kW

Non je suis encore en hc hp ( je vais bientot prendre tempo) du coup toutes mes heures creuses sont calculees de la meme facon et des jours ca marche et d’autres pas du tout comme je l’ai montre sur la capture d’avant. Et j’ai exactement le meme pb avec les heures pleines

On peut exclure une erreur sur le linky au début.
Et un utility meter c’est juste un compteur (ça ne manipule pas l’entité), en fin de traitement.
Donc si tu as des valeurs bizarres, c’est forcement à cause d’un truc entre les 2

Bonjour,
quand ta de mauvaise donnée, tu n’aurais pas redémarrer HA avant ?
Si c’est bien le cas, faut ajouter l’option availability: dans ton template sensor, pour eviter de mauvais calcul au rédémarrage de HA et ou les entités sont encore indisponible le temps du chargement.

    - name: box_metering_PC_PB_PE_sum
      unit_of_measurement: "Wh"
      device_class: energy
      state_class: total_increasing
      state: >-
          {% set PC = states('sensor.0x54ef4410004ea988_energy')|float(default=0)*1000 %}
          {% set PB = states('sensor.0x54ef4410005647e8_energy')|float(default=0)*1000 %}
          {% set PE = states('sensor.0xa4c138b1bfb7f7ef_energy')|float(default=0)*1000 %}
          {{ PC + PB + PE | int(default=0) |round(0) }}
      availability: "{{ states('sensor.0x54ef4410004ea988_energy')|is_number and states('sensor.0x54ef4410005647e8_energy')|is_number and states('sensor.0xa4c138b1bfb7f7ef_energy')|is_number }}"
    - name: Bluetooth Proxy 854638 Uptime Readable
      state: >-
        {% set uptime = states.sensor.bluetooth_proxy_854638_ble_proxy_uptime.state | int(0) %}
        {% set jours = (uptime / 86400) | int(0) %}
        {%- if jours > 0 -%}
          {{ jours }} jours, {{ (uptime - (jours * 86400)) | int(0) | timestamp_custom('%H:%M:%S', false) }}
        {%- else -%}
          {{ uptime | int(0) | timestamp_custom('%H:%M:%S', false) }}
        {%- endif -%}
      unique_id: bluetooth_proxy_854638_uptime_readable
      availability:  "{{ states('sensor.bluetooth_proxy_854638_ble_proxy_uptime') not in ['unknown', 'unavailable', 'none'] }}"

alors non je n’ai pas redémarré HA juste avant mais je ne connaissais pas cette balise.
J’aurai bien voulu l’utiliser dans mon compteur mais je ne pense pas que cette balise soit disponible dans un compteur de services publique

Je suis tout à fait d’accord et le truc le plus étrange c’est que cela se produit pas systématiquement ! Par exemple aujourd’hui cela a fonctionné nickel !

Bon j’ai poussé les investigations plus avant.

J’ai cherché des valeurs dans l’historique qui posait problème :

Et j’ai voulu savoir quelles valeurs engendraient ce problème, du coup j’ai récupéré les valeurs du linky au meme moment, et la tout s’est éclaircit !

J’ai des passages par zéro !

Maintenant reste à comprendre pourquoi mon liny avec esphome mais fait des passages par zéro.

Y a t’il une option qui permet de gérer le fait qu’un compteur ne puisse qu’augmenter ?

Je précise juste que j’ai désactivé la réinitialisation périodique

image

Je n’ai pas de piste mais tu peux essayer de faire la liste des entités qui servent à la composition (perso ça semble bien nébuleux avec des trucs prêts mais pas encore actifs) de tes sensors et voir comparer les valeurs dans un même graph.
Tu dois être en mesure de savoir lequel déconne en 1er

EDIT: Vu, tu viens de faire l’exercice.
A mon avis, il faut plutot se pencher sur le cas de l’esp … Il n’a pas à renvoyer 0, c’est un souci de code à mon avis

Salut j’ai eu le problème une fois aussi.
Tu peux tenter de mettre un filtre dans ton capteur sur esphome comme sur la photo

J’ai mis en photo car trop galère à faire un copier coller du code sur tablette mais regarde la partie filtres sur mes heures creuses et pleines.

1 « J'aime »

Je pense que c’est exactement ce dont j’ai besoin.
Merci bcp !
Je teste tout de suite