MQTT - Recevoir une valeur sur un topic personnalisé

J’ai commencé le développement sur ce sujet :slight_smile:

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

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

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

4 Likes

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 « sous-topic » 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)

Premier test concluant !

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

J’envoie ce body JSON :

Disponible dans l’UI :

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é

Je sais pas trop, ç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é

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

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

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 « chemin json » qui peut troubler si les métriques sont émise « à plat ».

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é

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

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

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

4 Likes

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

Le build est en cours de build sur l’image Docker :

gladysassistant/gladys:mqtt-custom-topic

Edit: l’image est prête !

Aide: Tutoriel: Lancer une image Docker de test

Preneur de vos retours !

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 « fonctionnalité » 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:

{"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:

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 :slight_smile:

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

La configuration :

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

1 Like

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 « url safe »

2 Likes

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

gladysassistant/gladys:mqtt-custom-topic

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

1 Like

Ça me semble bon maintenant :slight_smile: j’ai testé dans du JSON et métrique « à plat »

Excellent, est-ce que tu penses que ça peut partir en l’état en production ou selon toi il manque quelque chose à ajouter ?

D’un point de vue technique par rapport eu scénarios que je décrivais le manque est comblé: il est possible de récupérer les info d’un équipement qui communique via MQTT sans avoir besoin d’implémenter d’adaptateurs dans node-red :+1:
Là où je manque de recul est sur l’expérience utilisateur: est-il pertinent de reserver ces nouveaux champs à un mode « avancé » et de conserver le form précédent par défaut ?
Enfin je pense que ça pourrait être pas mal d’avoir un mode auto pour les « ID externe » perso ce que j’ai fait pour le test c’est mqtt:<piéce>:<nom_appareil> pour l’appareil et mqtt:<piéce>:<appareil>:<nom_fonctionnalité>

Ok merci pour ton retour :slight_smile:

Je pense que ça peut rester là, c’est des champs optionnels de toute façon !

Carrément ! Je pense que ça sera dans une PR séparé par contre

Je viens de merger la PR sur les topics customs, cette fonctionnalité partira donc dans la prochaine version de Gladys :partying_face:

3 Likes

Cette fonctionnalité est disponible dans Gladys Assistant 4.41 :

Je ferme ce sujet pour libérer les votes, n’hésitez pas à créer d’autres sujets en cas de retours / bugs :slight_smile:

1 Like