Valeur farfelue de mon compteur energie

Mon problème

Bonjour tout le monde,

Je rencontre un souci depuis quelques jours avec mon capteur énergie, par moment, j’ai une valeur de + 76 000 000 kwh dont j’ignore l’origine.

Mon capteur est un homemade sur un esp32 configurer avec esphome.

J’avais eu le tour pour une valeur à 0 que j’ai pu filtrer, mais pour ce problème est-il possible de filtrer les valeurs supérieures ?

uart:
  id: uart_bus
  rx_pin: GPIO3
#  tx_pin: GPIO1
  baud_rate: 1200
  parity: EVEN
  data_bits: 7

teleinfo:
  id: esp_teleinfo
  update_interval: 5s
  historical_mode: true

binary_sensor:
  - platform: status
    id: teleinfo_status
    name: "Teleinfo Status"

sensor:
  - platform: wifi_signal
    name: "Signal wifi"
    update_interval: 60s
    unit_of_measurement: dB
    accuracy_decimals: 0
    force_update: false
    icon: mdi:wifi
    
  - platform: uptime
    id: uptime_seconds
    name: "Uptime Sensor"
    update_interval: 60s
    unit_of_measurement: s
    accuracy_decimals: 0
    force_update: false
    icon: mdi:timer
    
  - platform: teleinfo
    tag_name: "ADCO"
    name: "identifiant"
    unit_of_measurement: ""
    icon: mdi:barcode
    
  - platform: teleinfo
    tag_name: "IINST"
    name: "Intensité"
    unit_of_measurement: "A"
    icon: mdi:current-ac

  - platform: teleinfo
    tag_name: "ISOUSC"
    name: "Intensité souscrite"
    unit_of_measurement: "A"
    icon: mdi:current-ac

  - platform: teleinfo
    tag_name: "IMAX"
    name: "Intensité maximale appelée"
    unit_of_measurement: "A"
    icon: mdi:current-ac
    
  - platform: teleinfo
    tag_name: "PAPP"
    name: "Puissance"
    unit_of_measurement: "VA"
    icon: mdi:flash

#  - platform: teleinfo
#    tag_name: "BASE"
#    id: base
#    name: "Teleinfo index_base_kwh"
#    unit_of_measurement: "kWh"
#    device_class: "energy"
#    state_class: "total_increasing"
#    accuracy_decimals: 3 
#    filters:
#      - filter_out: 0
#      - multiply: 0.001
#    icon: mdi:gauge
  
  - platform: teleinfo
    tag_name: "HCHC"
    name: "Index heures creuses"
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 3 
    filters:
      - filter_out: 0
      - multiply: 0.001
    icon: mdi:gauge
    id: heures_creuses
    
  - platform: teleinfo
    tag_name: "HCHP"
    name: "Index heures pleines"
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 3 
    filters:
      - filter_out: 0
      - multiply: 0.001
    icon: mdi:gauge
    id: heures_pleines


button:
  - platform: restart
    name: "Teleinfo Restart"

text_sensor:
  - platform: teleinfo
    tag_name: "PTEC"
    name: "Tarif actuel"
    icon: mdi:clock-time-nine-outline
  - platform: template
    name: Uptime
    update_interval: 60s
    icon: mdi:clock-start
    lambda: |-
      int seconds = (id(uptime_seconds).state);
      int days = seconds / (24 * 3600);
      seconds = seconds % (24 * 3600);
      int hours = seconds / 3600;
      seconds = seconds % 3600;
      int minutes = seconds /  60;
      seconds = seconds % 60;
      if ( days ) {
        return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else if ( hours ) {
        return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else if ( minutes ) {
        return { (String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else {
        return { (String(seconds) +"s").c_str() };
      }

  - platform: teleinfo
    tag_name: "OPTARIF"
    name: "Type d'abonnement"
    icon: mdi:handshake

  - platform: teleinfo
    tag_name: "PTEC"
    name: "Tarif en cours"
    icon: mdi:clock-time-nine-outline

Merci pour vos réponces.

Ma configuration


[center]## System Information

version core-2023.1.7
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.7
os_name Linux
os_version 5.15.80
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.30.0
Stage running
Available Repositories 1200
Downloaded Repositories 29
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 9.4
update_channel stable
supervisor_version supervisor-2023.01.1
agent_version 1.4.1
docker_version 20.10.19
disk_total 30.8 GB
disk_used 14.2 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons Samba share (10.0.0), File editor (5.5.0), Studio Code Server (5.5.2), Terminal & SSH (9.6.1), Xiaomi Mi Scale (0.3.6), ESPHome (2022.12.6), Let’s Encrypt (4.12.8), Samba Backup (5.2.0), Log Viewer (0.14.0), AppDaemon (0.11.0), FTP (4.6.2), RPC Shutdown (2.2), SSH & Web Terminal (13.0.2), Mosquitto broker (6.1.3), MariaDB (2.5.1), phpMyAdmin (0.8.3), SQLite Web (3.7.0)
Dashboards
dashboards 1
resources 20
views 7
mode storage
Recorder
oldest_recorder_run 22 janvier 2023 à 06:34
current_recorder_run 27 janvier 2023 à 18:10
estimated_db_size 363.27 MiB
database_engine mysql
database_version 10.6.8
[/center]

Hello !
J’ai eu exactement ce problème, c’était une valeur plus petite qui était retournée (mais pas 0), puis la suivante était à nouveau normale, ce qui créait un grosse différence entre 2 points de mesure.
J’ai mis en place ce filtre avec une lambda et depuis plus de problème :

filters:
  - multiply: 0.001
  - filter_out: 0
  - lambda: |-
      static float last_value = NAN;
      if (isnan(last_value) || x >= last_value) {
        last_value = x;
        return x;
      } else {
        ESP_LOGW("main", "Bad 'Base index' value: %f", x);
        return last_value;
      }

En gros ça va remplacer toutes les mesures qui sont inférieures à la précédente par la précédente.

Merci de ta réponse,

J’ai adapté ton code pour mon probléme :

filters:
  - multiply: 0.001
  - filter_out: 0
  - lambda: |-
      static float last_value = NAN;
      if (isnan(last_value) || x >= "1000000") {
        last_value = x;
        return last_value;
      }

Penses-tu que ma modification est bonne pour mon problème ?

Merci,

J’ai trouvé un filtre qui pourrait fonctionner, mais j’ai une erreur que je n’arrive pas à résoudre :

  - platform: teleinfo
    tag_name: "HCHP"
    name: "Index heures pleines"
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 3 
    filters:
      - filter_out: 0
      - multiply: 0.001
    icon: mdi:gauge
    id: heures_pleines
    lambda: |-
      float MAX_DIFFERENCE = 80000.0;  // adjust this!
      static float last_value = NAN;
      if (isnan(last_value) || std::abs(x - last_value) < MAX_DIFFERENCE)
        return last_value = x;
      else
        return {};

erreur retournée :

[lambda] is an invalid option for [sensor.teleinfo]. Please check the indentation.

si vous avez une idée, le code vient de la Filtering out extreme values · Issue #57 · klaasnicolaas/home-assistant-glow · GitHub

il n’y a pas de tiret devant lambda

Je ne suis pas un expert en code, j’ai encore une erreur de syntaxe :

Quelles sont les indications sur l’erreur ?