jMQTT topics multiples

Bonjour,

J’aimerais savoir s’il est possible avec jMQTT de s’inscrire à plusieurs topics pour un seul objet.
Et si ce n’est pas le cas, suggérer cette possibilité au devélopeur :slight_smile:

Mon cas concret est le suivant:
J’utilise les nouvelles vannes Shelly BLU TRV. Elles se connectent toutes via un BLU gateway qui fait le relais entre le blutooth des vannes et le wifi pour la connection Wifi/MQTT avec Jeedom.

Le BLU gateway a son topic et toutes les vannes renvoient des valeurs (status et events) via le topic du BLU gateway. Or, j’aimerais créer un objet jMQTT par vanne, car on peut demander des valeurs plus complètes pour les vannes que ce qui est renvoyé par les events.
Je pourrais faire ça dans l’objet du BLU Gateway, mais je me retrouves alors avec une énorme liste de valeurs et actions, ce qui rend pénible la gestion de la liste des infos/actions dans Jeedom.
Je peux interroger les vannes et demander un retour sur un topic spécifique pour la réponse, ce qui me parait être une approche plus élégante. Mais dans ce cas, je perd les infos event et status qui ne sont envoyées qu’au topic du BLU Gateway.

Du coup, pour chaque vanne, j’aimerais l’inscrire à un topic qui lui est spécifique et aussi au topic du BLU gateway pour récupérer les event et status envoyés automatiquement à intervalles réguliers.

J’espère que ma description est compréhensible…
Je suppose que je pourrais aussi créer un virtuel qui combine l’objet vanne et l’objet BLU Gateway, mais c’est une approche qui certes me parait possible, mais plus laborieuse à mettre en oeuvre et à maintenir…

Merci d’avance !

Peux tu donner les différents topics que tu dois utiliser?

Bonjour Jeandhom,

Actuellement, j’ai un équipement qui s’appelle shelly-gw.
Il reçoit le topic shelly-gw\#

J’ai un second équipement qui s’appelle vanne-test.
Il reçoit le topic vanne-test\#
J’aimerais que ce dernier puisse également recevoir:
shelly-gw\status\# et shelly-gw\events\#

Est ce que les valeurs dans vanne-test# sont aussi dans shelly-gw\status# et shelly-gw\events# ?

Hello @scansse,

Attention, il faut utiliser des /, et non pas des \ comme séparateurs.
Sinon les « wildcards » + et # ne fonctionnent pas, cf Specification MQTT §4.7.1 Topic wildcards :

4.7.1.1 Topic level separator

The forward slash (‘/’ U+002F) is used to separate each level within a topic tree and provide a hierarchical structure to the Topic Names. The use of the topic level separator is significant when either of the two wildcard characters is encountered in Topic Filters specified by subscribing Clients. Topic level separators can appear anywhere in a Topic Filter or Topic Name. Adjacent Topic level separators indicate a zero-length topic level.

Concernant ta question de base :

  • Il est prévu (dans une prochaine version) que jMQTT souscrive directement au topic présent dans chaque commande, donc ce sera possible à ce moment-là.
  • Le topic (toujours unique) d’un équipement ne sera souscrit que si la création automatique de commande est activée, mais ça ne change rien à la réponse.
  • Du coup, cela permettra aussi d’utiliser les wildcards (+ et #) dans les commandes et de répondre aux besoins de certains utilisateurs (par ex plusieurs ESP32 avec OMG).
  • Il est aussi prévu (à ce moment-là) que les commandes puissent être déplacées entre équipements.

Bad

En partie…
Toutes les infos possibles se trouvent dans vanne-test, et quelques valeurs sont remontées automatiquement dans shelly-gw\events\# ou shelly-gw\status\#.
L’intérêt de les récupérer est qu’elles sont remontées automatiquement.

le device Shelly BLU GW récupère les events pour toutes les vannes.
Depuis ce device, je peux appeller une fonction BluTrv.Call en spécifiant l’id d’une vanne et une fonction de la vanne (Shelly.GetConfig par exemple) et récupérer des valeurs bien plus nombreuses que celles remontées automatiquement via les events.
Ce faisant, je demande de récupérer les infos sur le topic vanne-test\# (via le paramètre MQTT src) afin de créer un objet jMQTT séparé.
Mais j’aimerais quand même dans cet objet vanne-test récupérer les remontées automatiques des températures, etc. qui sont envoyés d’office à shelly-gw\events\#

Si tu veux tous les détails, pour le BLU Gateway, c’est documenté ici.
Et pour les vannes, qui communiquent via le GW, c’est ici.

Encore une fois, ce qui me semblerait le plus élégant serait de pouvoir inscrire un équipement jMQTT a plusieurs topics MQTT…

Bonjour Bad,

Oui, désolé à propos des forward ‹ / ›. C’est bien ça que j’utilise. Je me suis trompé dans les message ici.

Excellente nouvelle si cette fonctionalité est prévué dans une prochaine version !
Je vais patienter dans ce cas :slight_smile: .

Est-ce que tu as une indication du delais dans lequel une telle version devrait apparaître ?
Merci encore !

En 2023, c’était prévu pour 2024 :smirk:
Si j’ai le temps, disons avant juin 2025, sinon ce sera pour septembre 2025.

En attendant, tu peux toujours utiliser # en topic de souscription pour ton équipement et NE SURTOUT PAS activer la création automatique de commandes (mais c’est un peu violent).

Ah oui. C’est une idée.
Je vais tester ça. Mais je devrai faire un usage intensif des filtres MQTT…

Merci en tous cas pour les réponses super rapides !

1 « J'aime »

En attendant Bad, tu peux dans ton équipement vanne-test créer une commande info avec un topic inexistant, par exemple vanne-test/virtuel.
Tu peux créer autant de commandes que de besoin avec le même topic.
Comme ta vanne ne remontera jamais rien par ce topic, le plugin-jmqtt ne mettra jamais à jour cette commande.

Dans la commande info de l’équipement shelly-gw\events# ou shelly-gw\status#, tu fais un event sur Action sur valeur

C’est plus compliqué, mais ça marche bien aussi :slight_smile:

Un virtuel dans jMQTT en somme.

D’où le nom du topic. :grin:

J’en ai plein comme ça pour avoir dans le même équipement des infos qui ne peuvent pas remonter par MQTT.

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.