Importer une entité de HA dans un ESP32 (esphome)

Bonjour,

Mon problème

Importer une entité de HA dans un esp32 pour faire un calcul, mais sa ne fonctionne pas correctement.
Je me suis inspiré d’un sujet du forum, mais c’est pas bon, le sujet étant de janvier, j’ai préféré faire un nouveau sujet. (je sais pas si c’est bien ou pas)

Le calcul est le suivant : M3 de gaz * par facteur de conversion (11.27 actuellement)

############################
# Device Specific Config
############################

globals:
    
  - id: gazpar_pulse_counter
    type: float #Le counter n'est pas integer car il sert aussi pour la division m3
    initial_value: "0" 

  - id: factor_conversion_m3_kwh
    type: int # Je ne suis pas sur de cette valeur
 #   restore_value: no
 #   initial_value: '11.00'


#################
# Binary Sensor #
#################

# Binary sensor utilisé pour comptage des impulsions et Totalisateur
binary_sensor:

  - platform: gpio
    pin:
      number: GPIO32
#      allow_other_uses: true
      mode: INPUT_PULLUP
      inverted: True
    filters:
      - delayed_on: 130ms
      - delayed_off: 130ms 
    name: "${friendly_name1} counter state"
    id: gazpar_counter_state

    on_press:
      then: 
        - lambda: |-
            // increment le compteur ECS puis publish mqtt
            id(gazpar_pulse_counter) += 1;
            id(gazpar_counter_pulse).publish_state(id(gazpar_pulse_counter));
            id(gazpar_counter_m3).publish_state(id(gazpar_pulse_counter)/100);
# ci dessous le calcul qui fonctionne
            id(gazpar_counter_m3_kwh).publish_state((id(gazpar_pulse_counter)/100)*11.27);
# ci dessous le calcul qui ne fonctionne pas correctement
            id(gazpar_counter_m3_kwh_1).publish_state((id(gazpar_pulse_counter)/100)*(id(factor_conversion_m3_kwh)));

##  Status ESP connexion   
  - platform: status
    name: ${friendly_name} status   

##########
# sensor #
##########
sensor:

# Import facteur de conversion de entité HA)
  - platform: homeassistant 
    id: factor_conversion_kwh_from_ha
    entity_id: sensor.gazpar_21593632397008_conversion_factor # factor_conversion_kwh_from_ha 
  
    on_value:
      then:
        - globals.set:
            id: factor_conversion_m3_kwh
            value: !lambda 'return int(x);'


# Comptage impulsion  
  - platform: template
    name: "${friendly_name1} counter pulse"
    id: gazpar_counter_pulse
    unit_of_measurement: ''
    accuracy_decimals: 0  # Précision en entiers
    icon: "mdi:counter"
    #update_interval: 5s  # Mise à jour sur changement de valeur

 
# Comptage m³ (utilisé pour le compteur services HA)
  - platform: template
    name: "${friendly_name1} counter m3"
    id: gazpar_counter_m3
    unit_of_measurement: 'm³'
    accuracy_decimals: 3  # Précision en entiers
    state_class: total_increasing
    device_class: gas    

# Comptage m³/kwh (utilisé pour le compteur services HA)
  - platform: template
    name: "${friendly_name1} counter Kwh"
    id: gazpar_counter_m3_kwh
    unit_of_measurement: 'kWh'
    accuracy_decimals: 3  # Précision en entiers
    state_class: total_increasing
    device_class: energy    

# Comptage m³/kwh (utilisé pour le compteur services HA) essai
  - platform: template
    name: "${friendly_name1} counter Kwh 1"
    id: gazpar_counter_m3_kwh_1
    unit_of_measurement: 'kWh'
    accuracy_decimals: 3  # Précision en entiers
    state_class: total_increasing
    device_class: energy  

Je devrais avoir normalement la même valeur pour « gaz counter kwh » et « gaz counter kwh 1 »

Merci par avance pour votre aide.

Salut,

tu arriverais à donner un peu plus de détails sur le résultat que tu obtiens, ce n’est pas très clair.

Toujours est-il que je pense que ton souci c’est le type: int que tu donnes à ta globale!
Tu veux y coller une valeur comme 11,27… et un « int » c’est un « integer », un entier en français, un nombre sans virgule!
Il faut mettre « float », un nombre décimal à virgule flottante, ça devrait mieux marcher.

Salut @AlexHass

Merci pour ton aide

Je devrais obtenir pour kwh_1 le même résultat que kWh.
Mais il multiplie par 11 au lieu de 11.27, donc un écart.

J’ai donc pensé au INT et essayé avec FLOAT, mais bizarrement je n’ai pas vu de changement.

Je vais essayer de remettre float, je te tiens au courant.

Au départ, j’ai utilisé l’option « initial_value: 11 », mais je l’ai retiré depuis.
Je viens de tester avec FLOAT, mais toujours pareil…il multiplie par 11 au lieu de 11,27.

Esp va chercher directement la valeur de l’entité où il faut l’envoyer a partir de HA avec une automatisation ?

Oui alors, en fait tu as changé aussi le moment où tu met à jour ta globale dans le « on_value » du sensor HA ?
Car là tu forcais le passage en int, donc quoi qu’il arrive ça enlève ce qu’il y a après la virgule :wink:

Ah oui ! du coup je dois mettre value: !lambda 'return float(x);' a l aplace ?

Oui tant qu’à faire. Devrait pas y avoir besoin de typage du tout, mais vu qu’on ne sais pas comment ça vient de HA, autant le mettre.

Je viens de tester c’est bon !

Merci de ton aide, Ça parait évident, mais quand ça veut pas…

Capture d’écran du 2024-11-16 12-00-42

Le petit décalage, c’est normal car dans un cas Je fais le calcul avec une valeur fixe (11.27) et dans l’autre la valeur réel avec 5 chiffre après la virgule.
Mais a la fin, il n’en restera qu’un ! :grin: