Cours:QtMqtt : Différence entre versions
(→Etape 3 : souscrire) |
|||
Ligne 1 : | Ligne 1 : | ||
− | + | =Qt et MQTT= | |
Nous utiliserons le [https://doc.qt.io/qt-5/qtmqtt-index.html module QtMqtt] pour utiliser le protocole {{Rouge|mqtt}}. | Nous utiliserons le [https://doc.qt.io/qt-5/qtmqtt-index.html module QtMqtt] pour utiliser le protocole {{Rouge|mqtt}}. | ||
Ligne 7 : | Ligne 7 : | ||
*recevoir des messages d'un topic particulier | *recevoir des messages d'un topic particulier | ||
− | =Configuration du projet= | + | ==Configuration du projet== |
{{Rouge|Ajouter}} dans le fichier de configuration de votre projet Qt ( fichier {{Rouge|.pro}} ) la ligne suivante : | {{Rouge|Ajouter}} dans le fichier de configuration de votre projet Qt ( fichier {{Rouge|.pro}} ) la ligne suivante : | ||
QT += mqtt | QT += mqtt | ||
− | =Etape 1 : connexion au broker= | + | ==Etape 1 : connexion au broker== |
Dans la classe qui utilisera la connexion mqtt : | Dans la classe qui utilisera la connexion mqtt : | ||
Ligne 29 : | Ligne 29 : | ||
− | =Etape 2 : publier= | + | ==Etape 2 : publier== |
Une fois connecté, on peut publier des messages. On doit indiquer : | Une fois connecté, on peut publier des messages. On doit indiquer : | ||
Ligne 47 : | Ligne 47 : | ||
client.publish(QMqttTopicName("test"),"value",0,false); | client.publish(QMqttTopicName("test"),"value",0,false); | ||
− | =Etape 3 : souscrire= | + | ==Etape 3 : souscrire== |
Pour souscrire, nous avons besoin d'un pointeur sur un objet de type QMqttSubscription : | Pour souscrire, nous avons besoin d'un pointeur sur un objet de type QMqttSubscription : | ||
Ligne 61 : | Ligne 61 : | ||
**on pourra récupérer le contenu (charge utile/payload) avec la méthode payload | **on pourra récupérer le contenu (charge utile/payload) avec la méthode payload | ||
**ex : qDebug()<<message.payload(); | **ex : qDebug()<<message.payload(); | ||
+ | |||
+ | =HomeAssistant et MQTT= | ||
+ | |||
+ | *https://www.home-assistant.io/docs/mqtt/discovery/ |
Version du 12 octobre 2022 à 10:27
Sommaire
Qt et MQTT
Nous utiliserons le module QtMqtt pour utiliser le protocole mqtt.
Voici les différentes étapes qui permettront de :
- se connecter sur un broker
- publier des messages sur des topics
- recevoir des messages d'un topic particulier
Configuration du projet
Ajouter dans le fichier de configuration de votre projet Qt ( fichier .pro ) la ligne suivante :
QT += mqtt
Etape 1 : connexion au broker
Dans la classe qui utilisera la connexion mqtt :
- créer un attribut de type QMqttClient (on notera client cet attribut par la suite)
- configurer le client en utilisant les méthodes (dans le constructeur de la classe de l'attribut en général) :
- setHostname (ex client.setHostname("192.168.0.182"); )
- setPort (en général port 1883 )
- éventuellement il y a des méthodes pour s'identifier ( user / password ) sur le broker
- établir la connexion :
- on appelle la méthode connectToHost qui essaie d'établir une connexion
- le client émet le signal connected lorsque la connexion est réussie
- rque : on peut éventuellement utiliser un QTimer pour faire une tentative de connexion régulièrement jusqu'à réussite
- complément : perte de connexion
- le client émettra le signal disconnected
- on pourra alors procéder à une reconnexion (éventuellement/obligatoirement avec en boucle avec un QTimer)
Etape 2 : publier
Une fois connecté, on peut publier des messages. On doit indiquer :
- le topic sur lequel on poste le message
- le contenu du message
- éventuellement
- la qualité de service (qos) :
- 0 : pas de garantie de publication du message
- 1 : garantie que le message est bien publié au moins une fois
- 2 : garantie de l'unicité du message
- retain : indique si la dernière valeur publiée est sauvegardée sur le broker
- la qualité de service (qos) :
Pour publier, on utiliser la méthode publish. Ex :
client.publish(QMqttTopicName("test"),"value",0,false);
Etape 3 : souscrire
Pour souscrire, nous avons besoin d'un pointeur sur un objet de type QMqttSubscription :
- on ajoute un attribut (ou plusieurs) de type QMqttSubscription * (on notera ici souscription)
- on attend la connexion sur le serveur
- on utilise la méthode subscribe de la classe QMqttClient en précisant :
- le topic : QMqttTopicFilter("test")
- la qos (cf plus haut)
- elle retourne un pointeur de QMqttSubscription
- ex : souscription=client.subscribe(QMqttTopicFilter("test"),1);
- à chaque nouveau message, l'attribut souscription émettra le signal messageReceived :
- avec un paramètre de type QMqttMessage
- on pourra récupérer le contenu (charge utile/payload) avec la méthode payload
- ex : qDebug()<<message.payload();