Mes debuts sur ESPHome

Bonjour,
Je suis nouveau sur le forum et je découvre YAML et ESPHome.
J’ai des panneaux PV avec des micro onduleurs Enphase. Une intégration est dispo dans HA, les informations arrivent bien.
Avec un ESP8266 d1mini, je souhaite créer des conditions pour faire une sorte de routeur solaire. Dans un 1er temps, je tente de contrôler si mon importions (ENEDIS) est < à 110w auquel cas, ma production ‹ ECS › (eau chaude) est activé. Pour ça, j’ai une condition lambda. mais je ne parviens pas à la faire fonctionner.

    # Entité de Enphase
  - platform: homeassistant
    name: "Consomation_instentane"
    entity_id: 'sensor.envoy_2132004662_current_power_consumption'
  - platform: homeassistant
    name: "production_instentane"
    entity_id: 'sensor.envoy_2132004662_current_power_production'
    on_value:  
      - if:
         condition:       # Si la consommation moins la prod est <110w => ECS on
           lambda: return (('sensor.envoy_2132004662_current_power_consumption' - 'sensor.envoy_2132004662_current_power_production') < 110);
         then:
           - switch.turn_on: 'Sortie_SSR_33v'
         else:
           - switch.turn_off: 'Sortie_SSR_33v'

Merci pour votre aide. Nico

Sur la documentation d’ESPHome, tu trouves un exemple ici qui décrit la manière de faire.

Je pense que tu dois avoir une erreur au niveau de ton lambda.
Ca serai plutôt du style :

lambda: 'return (id(sensor.envoy_2132004662_current_power_consumption).state - id(sensor.envoy_2132004662_current_power_production).state) < 110);'

Salut,

Je fais les même genre de choses en ce moment avec ma nouvelle installation PV avec Enphase :wink:

Je pense que ton souci c’est que tu essayes d’utiliser l’entity_id dans ta lambda. Je ne crois pas que ce soit possible, elle ne sert qu’à faire le lien avec l’entité de HA.
Il va falloir que tu définisses un « id » pour chacune des tes entités pour t’en servir dans les logiques.
Un peu comme ça:

- platform: homeassistant
    name: "Consomation_instentane"
    entity_id: 'sensor.envoy_2132004662_current_power_consumption'
    id: conso

Et l’utiliser comme ça dans la lambda:

id(conso).state

Bon sinon, chez moi j’ai préféré faire la logique côté HA, voir nodered, et laisser les relais juste faire des on/off. Ca permet d’ajouter plus de variables et de contrôler d’autres appareils si tu veux à termes évoluer et optimiser l’autoconsommation.

Par contre, avec cette solution (contrairement à un vrai routeur solaire) si tu dépasses tes 110w, tu alimentes ton ECS, mais dans ce cas, il n’utilisera pas seulement les 110W de surplus, mais bien toute la puissance de ton ECS donc si c’est un 2000w 1900w du réseau et 100w du PV

bon voila, je tente des pistes vers ce que Carthage et toi me propose, mais voila que dans les log une erreur 11 reviens cycliquement sur mes 2 ESP

oui, c’est le soucis. Je verrai à l’usage. Merci pour ta réponse

Je viens de trouver la raison de ce code erreur dans parametres\systeme\journaux:
J’avais modifié les noms de mes ESP et cela n’a pas plus à HA

Je pense avoir trouvé l’origine de mon problème: La déclaration des sensor. Mais je ne sais pas où trouver les bonnes clé

Tu as essayé ce que je disais avec l’ID?

Oui, mais il semble que seul le premier capteur soit pris en compte

 # Entité de Enphase
  - platform: homeassistant
    name: "Consomation_instentané_Enphase"
    entity_id: 'sensor.envoy_122132004662_current_power_consumption'
    id: conso
  - platform: homeassistant
    name: "production instentané Enphase"
    entity_id: 'sensor.envoy_122132004662_current_power_production'
    id: prod
    
    on_value:  
      - if:
         condition:       # Si la consomation moins la prod est <110w => ECS on
           lambda: return (((id(conso).state) - (id(prod).state)) > 110);
         then:
           - switch.turn_on: 'Sortie_SSR_33v'
         else:
           - switch.turn_off: 'Sortie_SSR_33v'

Ah oui dans les lambdas, si tu veux utiliser l’état de l’entité courante, c’est pas avec id(entité).state mais avec x

Ca devrait être un truc comme:

lambda: return (((id(conso).state) - (x) > 110);

Quand je regarde les log, a quoi correspondent les numéros dans les tags? Il semble que la valeur de la consomation arrive aprés la production et du coup l’action du switch se fait trop tôt sans prendre en compte la conso

16:07:33	[D]	[dallas.sensor:143]	

'Temperature_ECS': Got Temperature=23.9°C

16:07:33	[D]	[sensor:126]	

'Temperature_ECS': Sending state 23.87500 °C with 1 decimals of accuracy

16:07:57	[D]	[homeassistant.sensor:024]	

'sensor.envoy_122132004662_current_power_production': Got state 985.00

16:07:57	[D]	[sensor:126]	

'production instentané Enphase': Sending state 985.00000  with 1 decimals of accuracy

16:07:57	[D]	[switch:017]	

'Sortie_SSR_33v' Turning OFF.

16:07:57	[D]	[homeassistant.sensor:024]	

'sensor.envoy_122132004662_current_power_consumption': Got state 1000.00

16:07:57	[D]	[sensor:126]	

'Consomation_instentané_Enphase': Sending state 1000.00000  with 1 decimals of accuracy


je pense avoir trouvé. Les valeurs retournées sont des ‹ float › et la condition était avec un int. De plus comme vous l’avez suggéré, AlexHass, j’ai créé un id et utilisé en 'id(id).state:

on_value:  
      - if:
         condition:
           lambda: return (((id(conso).state) - (id(prod).state)) < 110.0);
         then:
           - switch.turn_on: 'Sortie_SSR_33v'
         else:
           - switch.turn_off: 'Sortie_SSR_33v'

Merci!