Forum Francophone Home Assistant

Faire tourner l'icône d'un bouton par un topic MQTT

Bonjour,
je débute avec HA, installé sur un NAS Synology via Docker, et j’ai besoin de vos lumières, après avoir cherché pendant plusieurs jours :

Je cherche à faire tourner une icône (Ventilateur) en utilisant un capteur MQTT qui me renvoie l’état d’une pompe. Ce capteur n’est pas binaire, il reçoit des caractères : « VN » si la pompe est en marche, « VF » si elle est arrêtée. j’ai affiché une carte avec ce capteur sur l’interface, et je reçois bien les infos du capteur.
Pour l’icône, j’ai installé l’extension custom button-card, et j’ai donc un bouton avec l’icône qui va bien.
Je voudrais que l’icône tourne si je reçoie « VN » et ne tourne plus si je reçois « VF ».
Mais je n’arrive pas à comprendre comment faire le lien entre mon capteur MQTT et l’icône de mon bouton!
Je pense a un template, mais je sèche!

Mon capteur (dans sensors.yaml) :

- platform: mqtt
  state_topic: "/Linky/Commande"
  name: "Commande"

Mon bouton de test (entity non définie):

type: 'custom:button-card'
icon: 'mdi:fan'
color: blue
name: Pompe piscine
entity: 
size: 25%
state:
  - icon: 'mdi:fan'
    value: 'off'
  - icon: 'mdi:fan'
    spin: true
    value: 'on'

Merci de votre aide…

Bonjour, ne voie tu pas une entité dans configuration----> intégration -----> mqtt----> ton appareil
Cette entité est celle de la carte je crois
Ici c’est ventilateur cheminée


puis si je le selectionne

j’ai le nom de l’entité
Light.ventilateur
Voilà si ça peux aider

Bonjour,
merci de t’intéresser à mon problème.
Je n’ai pas bien compris ta réponse : Non, je ne l’ai pas dans dans configuration----> intégration -----> mqtt
J’ai bien la carte de mon topic MQTT sur Lovelace, mais elle n’a pas d’ID unique.

Domage moi je viens d’essayer et le ventilateur tourne, c’est trop fort


Il faut que tu trouve l’entité dans outil de développement

Mon topic MQTT n’est pas un appareil, c’est un topic sur lequel passe des commandes.

Donc il vas falloir faire un sensor
Dans se style la:

# Example configuration.yaml entry
binary_sensor:
  - platform: mqtt
    state_topic: "lab_button/cmnd/POWER"
    value_template: "{%if is_state(entity_id,\"on\")-%}OFF{%-else-%}ON{%-endif%}"`Texte préformaté`

Source: https://www.home-assistant.io/integrations/binary_sensor.mqtt/

Mon topic est bien déclaré comme un sensor (voir 1er message) et j’ai son identité, mais cela ne résout hélas pas mon problème;
Il faut que quand je reçois ‹ VN › de ce sensor, je fasse tourner l’icone de mon bouton, qui est sur une autre card

et il ne peut pas être considéré comme binaire, car il y a plein de commandes autres qui passent dessus…
mais je n’ai surement pas tout compris!!!

A ok
Donc
Un autre sensor: sensor.pompe_tourne

- platform: template
  sensors:
    pompe_tourne:
      friendly_name: pompe tourne
      value_template: >-  
          {% set ca_tourne = states.('ton sensor.mqtt') %}  #tu crée une variable 
          {% if ca_tourne =  VN %}  #si le resultat est VN
          true  # vraie
          {% else %}  # sinon
          false  # faux
          {% endif %}

ou

- platform: template
  sensors:
    pompe_tourne:
      friendly_name: pompe tourne
      value_template: >-
        {{ states('de ton mqtt') == 'VN') }}

ton {{ states('de ton mqtt') }} doit donner une réponse dans outil de développement

si t’as besoin d’autre model, ici

Merci beaucoup pour ton aide.
j’ai du mal avec la syntaxe des values template…
Quand je copie tes exemples, j’ai des erreurs : Invalid config for [sensor.template]: invalid template (TemplateSyntaxError: unexpected ‹ ) ›) for dictionary value @ data[‹ sensors ›][‹ pompe_tourne ›][‹ value_template ›]. Got « {{ states(‹ sensor.commande.mqtt ›) == ‹ VN ›) }} ». (See ?, line ?).

il n’y a pas un moyen de mettre dans la config du bouton quelque chose comme :
if states(‹ sensor.commande.mqtt ›) == ‹ VN › then on = true ?

oui bien sure la variable n’est pas obligatoire. peut tu faire un imprime ecran de ton test dans l’outil de développement. car la syntaxe est des fois difficile.

- platform: template
  sensors:
    pompe_tourne:
      friendly_name: pompe tourne
      value_template: >-  
          {% if states('sensor.commande.mqtt') ==  'VN' %} true  {% else %}  false {% endif %}

Je n’ai plus d’erreurs avec ton dernier exemple.
Ma copie d’écran :

Par contre je ne peux pas dire que c’est false si je n’ai pas ‹ VN ›, car ce doit être false que si j’ai ‹ VF › !
On peut faire un autre if après le else ? ou faire une autre ligne avec ‹ VF › et supprimer le else?

J’ai peut être oublié les Guimet avant et après VN j’ai corrigé essaye
'VN'
Après essayé en changeant VN et VF si t’as un true et un false ça marche si ta que des false c’est pas bon
Tu peux faire plusieurs ligne avec ou sans guillemet pour être sure

j’ai corrigé, je n’ai pas d’erreur, et ça n’a pas changé le résultat dans l’éditeur de modèle
je vais essayer pour voir si j’ai un true

Bon, je n’ai que des falses, pourtant je voie bien les VN qui passent… sur mon topic
mais tu considères que le state du sensor est égal au payload?

Ça doit pas être le bon je suis parti sur sensor mais c’est peut être autre chose( domaine) Switch. Ou par exemple pour mon ventil c’est light
Dans outil de développement dans l’onglet état est ce que tu trouve ta pompe?

je trouve bien le topic et j’ai ça :
image

j’ai aussi commencé à faire une automation, qui modifie une variable, mais je ne sais pas quoi faire de la variable après… :

- id: '1618768154333'
  alias: Visu état pompe piscine
  description:  si on reçoit "VN" sur le topic commande
  trigger:
  - platform: mqtt
    topic: /Linky/Commande
    payload: VN
  condition: []
  action:
  - service: variable.set_variable
    data:
      variable: pompe_etat
      value: 1
  mode: single

Bonne idée
Crée un Switch ou un binaire
Et o lieu d’appeller le service set variable appelle Switch turn on ou binary turn on, et bien sûre l’automation dans l’autre sens
Bien vu
J’ai vu ça aussi dans la même idée

La solution:

j’ai créé un MQTT binary sensor:
binary_sensor:

  • platform: mqtt
    state_topic: « /Linky/Commande »
    payload_on: « VN »
    payload_off: « VF »
    name: « Commande pompe piscine »

j’ai récupéré son ID, et je l’ai mise dans l’entity de mon bouton:

type: ‹ custom:button-card ›
icon: ‹ mdi:fan ›
color: blue
name: Pompe piscine
entity: binary_sensor.commande_pompe_piscine
size: 25%
state:
   -  icon: ‹ mdi:fan ›
      value: ‹ off ›
   -  icon: ‹ mdi:fan ›
      spin: true
      value: ‹ on ›

et c’est bon, quand VN passe, mon ventilo tourne, et quand VF passe, il s’arrête. Du coup, je n’ai plus besoin de l’automation, ni de variable, ni de template!

Merci encore pour m’avoir aidé à trouver la solution.

reste plus qu’à trouver comment faire varier la vitesse de rotation…

1 J'aime