Envoyer des valeurs numériques de HA en MQTT

Bonsoir,

Attention débutant.
J’ai HA fonctionnel avec Mosquitto sur un RPI.
J’arrive à récupérer des infos de mon « robot » via MQTT (un ESP32 en C++ qui publie des valeurs de position, vitesse, etc.). Voici, dans le fichier configuration.yaml la déclaration des « capteurs » du robot :

mqtt:
  sensor:
    - name: "v1_position"
      unique_id: v1_position
      state_topic: "v1/position"
      unit_of_measurement: "mm"

    - name: "v1_motorSpeed"
      unique_id: v1_motorSpeed
      state_topic: "v1/motor/speed"
      unit_of_measurement: "mm/s"

    - name: "v1_motorCurrent"
      unique_id: v1_motorCurrent
      state_topic: "v1/motor/current"
      unit_of_measurement: "A"

Tout ça fonctionne.
J’envoie également la valeur d’un bouton de HA vers l’ESP à l’aide d’un switch :

  switch:
    - name: "v1_switch"
      unique_id: v1_switch
      state_topic: "v1/switch"
      command_topic: "v1/switch"

Maintenant je veux lui envoyer des valeurs numériques depuis HA, mais je n’y arrive pas. J’ai créé une entrée de type nombre sous forme de slider dans HA, et je voudrais que sa valeur soit publiée en MQTT. Vous sauriez me mettre sur la voie ?

La solution que j’ai choisi pour moi et d’utiliser « Node red » mais j’ai plus de contraintes que toi et tu aurais beaucoup de choses à apprendre juste pour le résultat que tu souhaites.

Le plus simple serait de faire une automatisation (un script si tu préfères).
Tu peux regarder sur ce forum anglophone une question similaire à la tienne a été posée et résolu.

Mais avant de faire l’automatisation et je te conseille d’utiliser l’outil de développement (au-dessus de paramètres) puis tu vas dans « services » et tu cherches « publier mqtt ». Dans un premier temps, en restant sur l’interface graphique, tu cherches à envoyer une valeur sur ton sujet/topic. Quand tu y arrives, change l’éditeur en mode texte et applique la solution du forum ci-dessus.

Merci pour cette bonne piste, j’ai donc tenté une première automation.

Voici mon finchier automation.yaml :

- alias: Update location
  trigger:
  - platform: state
    entity_id: 
    - input_number.v1_consigne
  condition: []
  action:
  - service: mqtt.publish
    data:
      topic: "v1/consigne"
      payload: "???"
  mode: queued

Comment puis-je envoyer la valeur de mon entité ?
Actuellement l’ai mis en payload « ??? » et je reçois bien ce message sur le broker.
Seulement je n’arrive pas à envoyer la valeur contenue dans mon entité v1_consigne qui contient une valeur numérique. J’ai essayé pas mal de syntaxes sans succès.

Slt
Normalement avec le states de cet entité !

{{states('input_number.v1_consigne')}}

Peut s’écrire aussi

{{states.input_number.v1_consigne.state}}

Merci, mais ça ne passe pas :

Error loading /config/configuration.yaml: invalid key: "{"states('input_number.v1_consigne')": None}"
Error loading /config/configuration.yaml: invalid key: "{'states.input_number.v1_consigne.state': None}"

Merci d’écrire dans les balises </> du forum voir sur l’entête message
image

1 « J'aime »

Comment tu l’as écris exactement :interrobang:

- alias: Update location
  trigger:
  - platform: state
    entity_id: 
    - input_number.v1_consigne
  condition: []
  action:
  - service: mqtt.publish
    data:
      topic: "v1/consigne"
      payload: {{states('input_number.v1_consigne')}}
  mode: queued

et

- alias: Update location
  trigger:
  - platform: state
    entity_id: 
    - input_number.v1_consigne
  condition: []
  action:
  - service: mqtt.publish
    data:
      topic: "v1/consigne"
      payload: {{states.input_number.v1_consigne.state}}
  mode: queued
payload: "{{states('input_number.v1_consigne')}}"

Regarde dans le mode développement s’il se traduit bien , la partie modèle sert d’essaie !

1 « J'aime »

Au top ! Merci Doubledom !

Je comprends vraiment rien à la syntaxe yaml…

:innocent: ça viendra avec le temps !

Je publie le code final complet pour que la réponse finale soit bien claire et complète :

- alias: Update consigne
  trigger:
  - platform: state
    entity_id: 
    - input_number.v1_consigne
  condition: []
  action:
  - service: mqtt.publish
    data:
      topic: "v1/consigne"
      payload: "{{states('input_number.v1_consigne')}}"
  mode: queued

Merci à Selecus et Doubledom

1 « J'aime »