A quoi sert retain

Bonjour ,
Une question surement bete mais, pouvez vous me dire a quoi sert la fonction « Retain » ?
Merci

Hello @stouph19,

Une commande action en Retain est un gardée en mémoire par le broker, c’est une fonction du protocole MQTT.
Donc, toute nouvelle connexion au broker MQTT qui souscrit à ce topic recevra d’emblée un message avec la dernière valeur en retain sur ce topic.

Nous faisons en sorte que la doc soit la plus détaillée possible, n’hésite pas à dire s’il manque des choses selon toi.

Bad

Désolé mais je suis nul, je n’arrive pas a comprendre.
Ce que je comprend ( mais ça doit pas etre ça) ; si le module est hors ligne jeedom gardera afficher la derniere valeur.

Bonjour,

Non jeedom garde toujours la dernière info affichée.
Cette option n’a aucun rapport avec jeedom mais avec mqtt.

Elle dit au serveur mqtt de retenir ce message alors que sans ça un message n’est pas retenu, il est envoyé à tous les autres clients et ensuite il est effacé; les nouveaux clients qui arrivent après ne recevront donc pas le message.
Avec cette option les nouveaux clients recevront cet « ancien » message car le serveur la retenu dans ce but.

Absolument Mips !

Je t’invite à lire ce post, il explique bien les notions de Broker/Client/Topic/Payload.

Il faut bien différencier Broker MQTT (le service Mosquitto) et (client du) Broker dans jMQTT.
Le Retain a du sens pour le Broker MQTT.

Et il y a aussi ce paragraphe qui mérite une explication supplémentaire dans ton cas :

Ce qui est peut-être un peu compliqué à comprendre, c’est que le Broker ne stocke ni les Topic, ni les payload envoyées par des clients (sauf cas particuliers), il ne fait que les renvoyer immédiatement aux clients ayant souscrit à ces Topics.

Ce cas particulier c’est justement le Retain :
Quand un message est publié vers le Broker avec Retain, le Broker ne fait pas que l’envoyer à tous les clients, il le conserve aussi en mémoire pour les nouveaux clients qui arriveraient.
Un nouveau message en Retain sur le même topic vient replacer le précédent dans la mémoire du Broker.
Un message vide en Retain (toujours sur le même topic) vient l’effacer.

C’est plus clair @stouph19 ?
Tu peux me dire ce que tu as compris pour vérifier ? (Interro surprise) :stuck_out_tongue:

EDIT : Tout ceci est à présent dans la documentation de jMQTT

Bad

bonjour à tous,

je pense que ce que l’utilisateur de jeedom se demande, c’est à quoi ça sert dans le contexte de jeedom et faut-il le cocher ou non ? Il serait bien d’assortir la démonstration théorique d’un exemple simple concret, je fais donc appel à votre créativité :wink:

1 « J'aime »

En terme d’exemple je peux citer celui-ci :

Dans le cas d’équipements qui ne mémorisé pas le dernier état d’une commande, par exemple une prise connectée Sonoff, si elle redémarre, elle est OFF de base.

Le fait de publier le message ON et OFF en Retain permet qu’à la reconnexion au Broker, le Broker l’informe directement du dernier état demandé et la prise revient en ON si c’était le cas.

(Il faut bien publier ON et OFF en retain dans ce cas, pour que le Broker envoie aussi OFF si elle était OFF, car un message non-Retain n’écrase pas la valeur Retain dans le Broker)

EDIT : Cet exemple est à présent dans la documentation de jMQTT

Bad

J’en ai un autre !

Certain équipements lisent leur config sur un topic mqtt (si pas dispo il y a une config par défaut) donc, vous me voyez venir, publier en retain permet que la config soit dispo pour l’équipement s’il redémarre.

merci @Bad c’est je pense très clair et ça mériterai d’être dans la documentation pour les néophytes :slight_smile:

1 « J'aime »

Hello,

J’avais pas pensé à ça tient. Faudra que j’essaie car j’ai 3 LED qui s’allume lors du retour du courant et s’ils pouvaient rester OFF (disons le dernier état… Mais souvent OFF) ça m’arrangerait :laughing:.

Merci :+1:

Oui je suis d’accord avec toi car j’en suis un ( néophyte ) mais je crois avoir compris avec l’exemple de Bad.