Bonjour,
Je viens à nouveau vous appeler à l'aide car je suis cette fois bloqué sur un soucis de gestion du MQTT.

Je veux réaliser un client MQTT qui se connecte sur un broker exterieur.

Dans une fenêtre j'ai réalisé un bouton assurant (lors de l’événement du clic) la connexion et l'abonnement au Topic qui m’intéresse.
La connexion se fait correctement, ainsi que l'abonnement.

J'ai aussi réalisé un bouton "désabonnement" pour vérifier que je peux bien me désabonner, et en l'activant l'erreur m'indique que je ne suis pas connecté au broker. Ce qui m'indique que lorsque le code du bouton "connexion" a fini de se dérouler, mon application se déconnecte toute seule.

De plus je ne reçois pas les notifications envoyées par le broker auquel je me connecte...

Voici mon code du bouton connexion:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
gMqttSession est un mqttSession
 
nQualité est un entier
sTopic est une chaîne
 
gMqttSession..Adresse = SAI_Adresse
gMqttSession..Utilisateur = SAI_Utilisateur
gMqttSession..MotDePasseUtilisateur = SAI_Mot_de_passe
gMqttSession..TimeoutConnexion = SAI_Time_Out
gMqttSession..IDClient = SAI_ID_Client
gMqttSession..Port = SAI_Port
gMqttSession..SessionVide=Faux
gMqttSession..Option = 0
 
SI MQTTConnecte(gMqttSession) ALORS
	Info("Connexion OK")
SINON
	Info("Problème de connexion. '" + ErreurInfo() + "')")
FIN
 
 
sTopic = SAI_Topic
nQualité = mqttQualitéAuPlusUneFois
 
 
 
SI MQTTAbonne(gMqttSession, sTopic, nQualité, Procedure_MQTT) ALORS
	Info("Abonnement OK")
SINON
	Info("Problème d'abonnement. '" + ErreurInfo() + "')")
FIN
Et le code de mon bouton désabonnement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
gMqttSession..Adresse = SAI_Adresse
gMqttSession..Utilisateur = SAI_Utilisateur
gMqttSession..MotDePasseUtilisateur = SAI_Mot_de_passe
gMqttSession..TimeoutConnexion = SAI_Time_Out
gMqttSession..IDClient = SAI_ID_Client
gMqttSession..Port = SAI_Port
gMqttSession..SessionVide=Vrai
 
 
MQTTDésabonne(gMqttSession, SAI_Topic)
SI ErreurDétectée() ALORS
	Info("Problème désabonnement '" + ErreurInfo() + "')")
SINON 
	Info("Désabonnement effectué !")
FIN
Voici le code de la procédure globale, paramètre de la fonction MQTTAbonne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
PROCÉDURE Procedure_MQTT(pMqttSession est un mqttSession, sTopic est une chaîne, pDonnées est un Buffer)
Trace(ChaîneConstruit("La donnée <%1> a été publiée sur le sujet <%2>",pDonnées,sTopic))

J'ai aussi modifié l'automatisme de la procédure globale et paramétrée comme un Thread.

Je précise que je suis certain que le broker envoie des messages car j'arrive à les récupérer avec Mosquitto sur le même Topic.

Voila, je ne sais pas si il faut que je mette ma fonction autre part pour rester connecté au Broker lorsque le bouton est relâché, pour l'instant je sèche ...

Merci à vous de me prêter un peu de votre temps !