Filtrage capteur pression sur bus I2C

Bonjour,

j’ai un capteur de pression dans mon puits qui me remonte une hauteur d’eau

ça marche bien mais quand le puits est plein, j’ai des resultats fluctuant entre deux valeur 134 et 137 cm, ça fait 3 cm d’écart et il n’y a pas de vagues dans le puits lol

au niveau du code je fait un relevé toutes les 5s, c’est peut etre trop ? ou peut-etre faut-il filtrer les resultat (et j’ai du mal à comprendre la partie filtre d’esphome) ?

voici le code


i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true
  id: bus_a

number:

  - platform: template
    name: Niveau max puits
    id: niveau_max_puits
    icon: "mdi:gauge-full"
    unit_of_measurement: cm
    optimistic: true
    min_value: 0
    max_value: 130
    step: 1


sensor:

  # Sonde de niveau puits

  - platform: ina219 #https://community.home-assistant.io/t/esphome-water-level-sensor/126504/482
    address: 0x40
    shunt_resistance: 0.1 ohm
    current:
      name: "INA219 Current"
      id: raw_current
      accuracy_decimals: 2
      filters:
        - multiply: 1000  # conversion to mA
      unit_of_measurement: mA
    bus_voltage:
      name: "INA219 Bus Voltage"
      accuracy_decimals: 2
    shunt_voltage:
      name: "INA219 Shunt Voltage"
      accuracy_decimals: 2
      filters:
        - multiply: 1000  # conversion to mV
      unit_of_measurement: mV
    max_voltage: 32.0V
    max_current: 3.2A
    update_interval: 5s

  - platform: template
    name: Niveau eau puits
    unit_of_measurement: cm
    accuracy_decimals: 0
    update_interval: ${update_interval_distance_measurement}
    id: water_level
    filters:
      - skip_initial: 3
    lambda: |-
      float current = id(raw_current).state;
      float curent_for_zero = 5.00; // courant lu sur HA à sec
      float current_by_cm = 0.037; // courant moyen par cm d'eau (calculé sur base de mesures à 0.5m / 1m / 1.5m et 2m)

      float sensor_ground_level = 15; // ditance entre capteur et fond du puits

      if ( current < curent_for_zero )  
        {
        return 0;  // Sonde 4-20 mA -> si courant inférieur à 4 ma = sonde HS ou déconnectée
        }
      else  
        {
        float cur_level = ((current - curent_for_zero) / current_by_cm ) + sensor_ground_level;

        if ( id(niveau_max_puits).state < cur_level)
          {
          id(niveau_max_puits).publish_state(round(cur_level));
          }

        return cur_level;
        }  

une idée pour optimiser ?

Salut,

Cela me paraît beaucoup, d’autant que le niveau doit pas non plus bouger beaucoup en 5s. A ta place je ferais un essai avec 60s dans un premier temps, pour voir si le résultat est moins fluctuant.

1 « J'aime »

yes je vais tenter cette modif,car effectivement ça bouge quand y’a du pompage, mais c’est pas génant d’avoir des relever toutes les minutes

Ce sujet a été automatiquement fermé après 60 jours. Aucune réponse n’est permise dorénavant.