# MQTT - Recevoir une valeur sur un topic personnalisé

**URL:** <https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832>\
**Category:** Demandes livrées\
**Tags:** mqtt, feature-core\
**Created:** [Janvier 13, 2023, 12:31 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832 "2023-01-13T12:31:32Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kevin](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/kevin/32/6521_2.png) [@Kevin](https://community.gladysassistant.com/u/Kevin)\
**Post date:** [Janvier 13, 2023, 12:31 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/1 "2023-01-13T12:31:32Z")

</div>

Bonjour à tous,

Suite à mon précédent post ([Ores - Compteur électrique intelligent - #10 par pierre-gilles](https://community.gladysassistant.com/t/ores-compteur-electrique-intelligent/7811/10)), je me suis rendu compte qu’il était nécessaire de passer par Node-RED pour transformer une information reçue par un capteur MQTT vers Gladys.

Pour faire simple, mon capteur envoie avec un topic (ex: «&nbsp;dsmr/reading/phase\_currently\_delivered\_l3&nbsp;») et Gladys ne me permet que d’écouter sur un topic généré automatiquement et non modifiable (ex: «&nbsp;gladys/master/device/mqtt:consommation\_instantanee/feature/mqtt:consommation\_instantanee/state&nbsp;»)

Conclusion, pour faire quelque chose de ‹&nbsp;simple&nbsp;›, je dois passer par Node-RED pour transférer l’information d’un topic vers un autre.

Serait-il donc possible de créer un mapper pour combler ce manque ? Ou de rentre éditable le topic créé par Gladys ? 🙂

Merci d’avance

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Janvier 20, 2023, 5:05 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/2 "2023-01-20T05:05:26Z")

</div>

Merci pour la demande, j’ai édité le titre pour que ce soit plus clair.

Pour moi 2 possibilités avec leur pour et leur contre :

- Faire ça via les scènes, via un déclencheur «&nbsp;Quand un message MQTT est reçu&nbsp;», qui prend en paramètre un topic MQTT, et un exemple de message reçu. Ensuite, dans la scène, une variable est injectée qui est utilisable partout (envoyer un message Telegram, définir l’état d’un capteur, etc…). L’avantage c’est que c’est customisable à l’infini, l’inconvénient c’est qu’il faut faire une scène par capteur, ça peut-être lourd.
- Faire ça dans l’intégration MQTT directement, via un topic «&nbsp;personnalisé&nbsp;» qui sera customisable. L’avantage c’est que c’est simple d’utilisation, l’inconvénient c’est que ce n’est pas customisable du tout (si le message MQTT a un format spécifique, on fait comment?)

---

<div class="post-metadata">

**Author:** ![cce66](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/c/8797f3/32.png) [@cce66](https://community.gladysassistant.com/u/cce66)\
**Post date:** [Janvier 30, 2023, 1:12 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/3 "2023-01-30T13:12:08Z")

</div>

Il est vrai comme je l’avais déjà souligné que c’est une contrainte face à des publish ou suscribe figés ou limités sur certains équipements, reste à savoir si la possibilité d’affecter le fonctionnement d’un objet (commutateur, ampoule on/off etc) à un suscribe ou un publish personnalisable est réalisable dans Gladys plutôt que la syntaxe un peu lourde actuelle (le «&nbsp;mqtt:&nbsp;» est inutile dans le nom des suscribe ou publish) ?? Ce serait un plus car actuellement c’est une limitation pas logique avec le fonctionnement mqtt

---

<div class="post-metadata">

**Author:** ![spenceur](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/spenceur/32/1961_2.png) [@spenceur](https://community.gladysassistant.com/u/spenceur)\
**Post date:** [Décembre 1, 2023, 11:21 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/4 "2023-12-01T23:21:59Z")

</div>

Partiellement dev par @Lokkye non?

---

<div class="post-metadata">

**Author:** ![Alyafride](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alyafride/32/16035_2.png) [@Alyafride](https://community.gladysassistant.com/u/Alyafride)\
**Post date:** [Avril 23, 2024, 5:02 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/6 "2024-04-23T17:02:06Z")

</div>

Pour faire suite à [cette discussion](https://community.gladysassistant.com/t/retours-sur-gladys/8850) je trouve également que donner la possibilité de paramétrer le topic d’écoute serait intéressante

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Mai 2, 2024, 11:49 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/7 "2024-05-02T11:49:38Z")

</div>

J’ai commencé le développement sur ce sujet 🙂

Suite à notre discussion avec @Alyafride, je suis parti sur une interface ressemblant à ça :

 ![Screenshot 2024-05-02 at 13.46.05](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/8/b/8bfac18a824589e5d5eacec5e14388fcf3b9b1b5.png)

Rien de définitif, je viens de commencer il y a 2 minutes 😛

Je vous tiens au courant dès que j’ai une image de test à vous proposer !

---

<div class="post-metadata">

**Author:** ![Alyafride](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alyafride/32/16035_2.png) [@Alyafride](https://community.gladysassistant.com/u/Alyafride)\
**Post date:** [Mai 2, 2024, 12:28 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/8 "2024-05-02T12:28:54Z")

</div>

Top, je pense que cet ajout peux aider à intégrer facilement différents capteurs.

En terme d’UI j’aurais imaginé un switch au niveau de l’appareil pour définir si le payload est de type json ou «&nbsp;sous-topic&nbsp;» et éventuellement de définir le topic parent. Ensuite au niveau de la fonctionnalité définir le chemin json ou le sous-topic (pas certains que la combinaison des deux en simultanée soit nécessaire)

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Mai 2, 2024, 1:02 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/9 "2024-05-02T13:02:33Z")

</div>

Premier test concluant !

Je créé un appareil qui écoute sur ce topic avec un body JSON :

 ![Screenshot 2024-05-02 at 15.00.11](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/7/b/7b384d857881afa2567828b1d06a9fd8ca63b9f3.png)

J’envoie ce body JSON :

 ![Screenshot 2024-05-02 at 14.59.56](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/3/d/3d59a0dbf43aff055f27da5217686fc5d981903b.jpeg)

Disponible dans l’UI :

 ![Screenshot 2024-05-02 at 15.00.02](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/0/d/0d243f95b734c80404fd216f8cb167b9c5657197.png)

Il reste encore du boulot, parce qu’actuellement l’intégration MQTT ne gère pas l’écoute multiple d’un même topic, ce qui empêcherait d’utiliser un même topic sur plusieurs fonctionnalités, ce qui est gênant dans le cas de cette fonctionnalité

> [@Alyafride](#):
>
> En terme d’UI j’aurais imaginé un switch au niveau de l’appareil

Je sais pas trop, ça risque de rallonger chaque feature en longueur (et c’est déjà long)

---

<div class="post-metadata">

**Author:** ![Alyafride](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alyafride/32/16035_2.png) [@Alyafride](https://community.gladysassistant.com/u/Alyafride)\
**Post date:** [Mai 2, 2024, 1:08 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/10 "2024-05-02T13:08:23Z")

</div>

> [@pierre-gilles](#):
>
> ça risque de rallonger chaque feature en longueur (et c’est déjà long)

Ah ? Dans mon esprit ça complexifie un peut la création de l’appareil mais ça simplifie celle de la fonctionnalité

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Mai 2, 2024, 1:14 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/11 "2024-05-02T13:14:50Z")

</div>

Ah j’avais pas compris que tu parlais au niveau du device !

Je sais pas, autant que ce soit le plus simple possible, rien à activer, juste à remplir si l’utilisateur veut s’en servir

---

<div class="post-metadata">

**Author:** ![Alyafride](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alyafride/32/16035_2.png) [@Alyafride](https://community.gladysassistant.com/u/Alyafride)\
**Post date:** [Mai 2, 2024, 1:52 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/12 "2024-05-02T13:52:29Z")

</div>

Je vois des avantages/inconvénients au deux choix en fait 🤔

D’un coté comme le topic des équipements en MQTT comporte souvent un id unique (le serial de l’équipement ou son adresse MAC) ça me paraissait plus simple de le définir qu’une fois au niveau de l’appareil mais ça impact plus lourdement l’interface.  
De l’autre ça offre plus de souplesse de spécifier le topic complet à chaque fois et ça impact moins l’interface. En revanche ça implique un champ «&nbsp;chemin json&nbsp;» qui peut troubler si les métriques sont émise «&nbsp;à plat&nbsp;».

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Mai 2, 2024, 2:03 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/13 "2024-05-02T14:03:20Z")

</div>

Pour moi ça doit être au niveau de la fonctionnalité, on ne sait pas quelle marque fonctionne comment ^^

J’imagine que certains voudront un topic par fonctionnalité

---

<div class="post-metadata">

**Author:** ![Alyafride](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alyafride/32/16035_2.png) [@Alyafride](https://community.gladysassistant.com/u/Alyafride)\
**Post date:** [Mai 2, 2024, 3:23 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/14 "2024-05-02T15:23:07Z")

</div>

Ça marche, je pourrai faire des tests avec ce que j’ai chez moi sur MQTT.

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Mai 3, 2024, 1:32 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/15 "2024-05-03T13:32:51Z")

</div>

J’ai finis la fonctionnalité, et je rajoute actuellement un onglet «&nbsp;Debug MQTT&nbsp;» ce qui va permettre de comprendre plus facilement ce qu’il se passe sur l’instance :

 ![Screenshot 2024-05-03 at 15.31.24](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/3/1/3184ca7b7148e1220109a423448a21914bc5ae1a.png)

Comme ça l’utilisateur n’est pas dans le noir si ça marche pas 🙂

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Mai 3, 2024, 2:07 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/16 "2024-05-03T14:07:44Z")

</div>

J’ai bien avancé et j’ai une version de test à vous soumettre 🙂

Le build est [en cours de build](https://github.com/GladysAssistant/Gladys/actions/runs/8940043088) sur l’image Docker :

```auto
gladysassistant/gladys:mqtt-custom-topic

```

Edit: l’image est prête !

Aide: [Tutoriel: Lancer une image Docker de test](https://community.gladysassistant.com/t/tutoriel-lancer-une-image-docker-de-test/8042)

Preneur de vos retours !

---

<div class="post-metadata">

**Author:** ![Alyafride](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alyafride/32/16035_2.png) [@Alyafride](https://community.gladysassistant.com/u/Alyafride)\
**Post date:** [Mai 3, 2024, 5:59 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/17 "2024-05-03T17:59:05Z")

</div>

Je viens de tester, ça marche pour un équipement qui poste avec un topic/métrique. En revanche pour un équipement qui poste différentes métriques au sein d’un json, seule la première «&nbsp;fonctionnalité&nbsp;» fonctionne, la seconde paramétré sur le même topic mais avec une chemin json différent ne récupéré aucune données. Ex de données:

```auto
{"CO2": 588.235, "CO2|unit": "ppm", "Humidity": 43.0, "Humidity|unit": "%", "Temperature": 25.8, "Temperature|unit": "\u00b0C", "Day/Night": "Day", "Battery Autonomy": "62.5-50%", "_timestamp": 1714758545, "_rssi": -61, "_rorg": 210}

```

Enfin je n’avais plus ça en tête au moment de définir le comportement attendu mais il est clair que le remplissage de l’id externe est assez fastidieux; il serait pas mal d’avoir une valeur généré par défaut si le champ est laissé à mqtt:

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Mai 7, 2024, 5:56 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/18 "2024-05-07T17:56:04Z")

</div>

Salut @Alyafride !

Je pense qu’il y a un bug d’UI lorsqu’on remplie ces valeurs à la création du device MQTT, par contre à l’édition ça marche très bien… Merci du retour, je vais travailler dessus et je reviens vers toi 🙂

Par contre, j’ai testé le cas d’avoir plusieurs metrics au sein du même JSON et ça marche bien :

 ![Screenshot 2024-05-07 at 19.53.46](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/7/1/71230583f2019955325aebdc6aec282879b1f9c4.jpeg)

La configuration :

 ![Screenshot 2024-05-07 at 19.55.13](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/0/7/07b821a9eedbca3ddfd374b1189c3f0870668afa.png)

> [@Alyafride](#):
>
> le remplissage de l’id externe est assez fastidieux; il serait pas mal d’avoir une valeur généré par défaut si le champ est laissé à mqtt:

Pourquoi pas, genre le nom de la feature + un peu de random ?

---

<div class="post-metadata">

**Author:** ![Alyafride](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alyafride/32/16035_2.png) [@Alyafride](https://community.gladysassistant.com/u/Alyafride)\
**Post date:** [Mai 8, 2024, 10:03 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/19 "2024-05-08T10:03:35Z")

</div>

> [@pierre-gilles](#):
>
> Pourquoi pas, genre le nom de la feature + un peu de random ?

Oui pourquoi pas, perso j’aime assez la logique de netbox pour le définition des slug. En gros si le champ n’est pas remplis il le défini sur la base du nom qu’il rend «&nbsp;url safe&nbsp;»

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Mai 9, 2024, 10:07 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/20 "2024-05-09T10:07:04Z")

</div>

@Alyafride J’ai compris ce qui n’allait pas, j’ai fais un correctif, est-ce que tu peux tester avec la nouvelle image ? 🙂

```auto
gladysassistant/gladys:mqtt-custom-topic

```

Pense à faire docker pull, stop, rm, et re-créé le container 🙂

---

<div class="post-metadata">

**Author:** ![Alyafride](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/alyafride/32/16035_2.png) [@Alyafride](https://community.gladysassistant.com/u/Alyafride)\
**Post date:** [Mai 9, 2024, 2:57 UTC](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832/21 "2024-05-09T14:57:40Z")

</div>

Ça me semble bon maintenant 🙂 j’ai testé dans du JSON et métrique «&nbsp;à plat&nbsp;»

[Page suivante](https://community.gladysassistant.com/t/mqtt-recevoir-une-valeur-sur-un-topic-personnalise/7832.md?page=2)
