4 binary sensors en un sensor en %

Salut,
je voudrais ajouter un capteur dans ESPHome avec un pourcentage à partir de 4 capteurs binaires, afin que je puisse afficher une jauge dans le tableau de bord de Home assistant. Comme je suis nouveau en domotic et que jai pas les connaissances requises en programmation, j’ai pas compris comment utiliser le « template sensor » avec 4 binary sensor.
Toute explication ou aide est la bienvenue. Voici mon fichier de configuration ESPHome.
Merci.

esphome:
  name: esp32-niveau
  platform: ESP32
  board: esp32dev

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "*************"

wifi:
  ssid: "Vortex"
  password: "*************"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32-Niveau d'eau"
    password: "***********"

captive_portal:

text_sensor:
  - platform: template
    name: Uptime Human Readable
    id: uptime_human
    icon: mdi:clock-start

sensor:
  - platform: wifi_signal
    name: Signal WiFi
    update_interval: 60s
    
  - platform: uptime
    name: Uptime Sensor
    id: uptime_sensor
    update_interval: 60s
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: uptime_human
            state: !lambda |-
              int seconds = round(id(uptime_sensor).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (days ? String(days) + "d " : "") +
                (hours ? String(hours) + "h " : "") +
                (minutes ? String(minutes) + "m " : "") +
                (String(seconds) + "s")
              ).c_str();

binary_sensor:
  - platform: gpio
    name: Niveau plein
    pin: GPIO19

  - platform: gpio
    name: Niveau 66%
    pin: GPIO18

  - platform: gpio
    name: Niveau 33%
    pin: GPIO17
    
  - platform: gpio
    name: Niveau bas
    pin: GPIO16
    
switch:
  - platform: gpio
    name: Relais Pompe
    pin: GPIO25
    inverted: True
    
  - platform: gpio
    name: Relais Démarrage
    pin: GPIO26
    inverted: True

Salut,

tu peux utiliser un modèle du genre :

{{ (is_state('binary_sensor.val1', 'on') | abs + is_state('binary_sensor.val2', 'on') | abs + is_state('binary_sensor.val3', 'on') | abs + is_state('binary_sensor.val4', 'on') | abs) * 25}}
  • Convertir ton on/off en entier (valeur 0 ou 1)
  • Faire la somme des 4 valeurs
  • Multiplier par 25 pour avoir un %

Et tu mets tout ça dans un sensor de type template

- platform: template
  sensors:
    citerne:
      value_template: "{{ (is_state('binary_sensor.val1', 'on') | abs + is_state('binary_sensor.val2', 'on') | abs + is_state('binary_sensor.val3', 'on') | abs + is_state('binary_sensor.val4', 'on') | abs) * 25}}"
      unit_of_measurement: "%"

Par contre fais attention à ce que donne le nom Niveau 66% pour le nomage de ton sensor côté HA, le caractère % c’est pas forcement top

Merci @Pulpy-Luke pour ta réponse !!
j’ai essayé ton code mais sa me dit error syntax, entre-temps j’ai pu avoir une autre solution:

binary_sensor:
  - platform: gpio
    name: Niveau plein
    id: niveau_4
    pin: GPIO19

  - platform: gpio
    name: Niveau 75%
    id: niveau_3
    pin: GPIO18

  - platform: gpio
    name: Niveau 50%
    id: niveau_2
    pin: GPIO17
    
  - platform: gpio
    name: Niveau bas
    id: niveau_1
    pin: GPIO16

sensor:
  - platform: template
    name: "Niveau d'eau"
    unit_of_measurement: "%"
    accuracy_decimals: 0
    update_interval: 60s
    lambda: |-
      if (id(niveau_4).state) {
        return 100; 
      }
      else if (id(niveau_3).state) {
        return 75;
      }
      else if (id(niveau_2).state) {
        return 50;
      } 
      else if (id(niveau_1).state) {
        return 25;
      } 
      else {
        return 0;
      }

Hello

Oui, si tu as essayé de mettre ça dans le code esphome, c’est normal que ça n’ai pas fonctionné. C’est un sensor purement HA.
L’important c’est qu’au final ta solution fonctionne

2 « J'aime »