Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue132:tutoriel1 [2018/05/05 08:07] – d52fr | issue132:tutoriel1 [2018/05/07 17:52] (Version actuelle) – andre_domenech |
---|
One of the best examples I found that helps to break it all down, was to compare it to a post office (https://www.baldengineer.com/mqtt-introduction.html). ** | One of the best examples I found that helps to break it all down, was to compare it to a post office (https://www.baldengineer.com/mqtt-introduction.html). ** |
| |
Bonjour à vous tous. ça fait un bon moment que je n'ai pas été capable d'écrire beaucoup, mais les choses s'améliorent lentement ; aussi, j'ai décidé de redémarrer avec une présentation de MQTT. | Salut à vous tous. Ça fait un bon moment que je n'ai pas été capable d'écrire longuement, mais les choses s'améliorent lentement ; aussi, j'ai décidé de redémarrer avec une présentation de MQTT. |
| |
MQTT est un protocole de réseau léger et facile d'emploi pour envoyer des données d'un ordinateur ou d'une application à un autre. Il fonctionne sous un modèle client/serveur, en utilisant un « broker » (intermédiaire), des éditeurs et des abonnés. | MQTT est un protocole de réseau léger et facile d'emploi pour envoyer des données d'un ordinateur ou d'une application à une autre. Il fonctionne sous un modèle client/serveur, en utilisant un « broker » (intermédiaire), des éditeurs et des abonnés. |
| |
Et qu'est ce que ça veut dire ? | Et qu'est-ce que cela veut dire ? |
| |
Un des meilleurs exemples que j'ai trouvé qui aide à le décortiquer, a été de le comparer à un bureau de poste (https://www.baldengineer.com/mqtt-introduction.html). | Un des meilleurs exemples que j'ai trouvé qui aide à le décortiquer, a été de le comparer à un bureau de poste (https://www.baldengineer.com/mqtt-introduction.html). |
In the above example, Mike wants to send a message to Sally. Mike (the publisher) sends the message to the post office and they know Sally's address, so they send it to her (subscriber). Sally can also send messages (not only a subscriber, but a publisher as well), through the post office, to John (another subscriber).** | In the above example, Mike wants to send a message to Sally. Mike (the publisher) sends the message to the post office and they know Sally's address, so they send it to her (subscriber). Sally can also send messages (not only a subscriber, but a publisher as well), through the post office, to John (another subscriber).** |
| |
Le bureau de poste (intermédiaire ou serveur) existe pour diriger les lettres et paquets (les messages) de gens et d'entreprises (les éditeurs) vers d'autres gens et entreprises (les abonnés). Si vous voulez envoyer un message à quelqu'un, vous créez votre message et vous l'envoyez à quelqu'un d'autre par l'intermédiaire du bureau de poste. Le bureau de poste reçoit votre message et le dirige vers le destinataire. Cependant, le destinataire à besoin d'être connu du bureau de poste pour qu'il soit capable de le lui livrer. | Le bureau de poste (intermédiaire ou serveur) existe pour diriger les lettres et paquets (les messages) de gens et d'entreprises (les éditeurs) vers d'autres gens et entreprises (les abonnés). Si vous voulez envoyer un message à quelqu'un, vous créez votre message et vous l'envoyez à quelqu'un d'autre par l'intermédiaire du bureau de poste. Le bureau de poste reçoit votre message et le dirige vers le destinataire. Cependant, le destinataire doit être connu du bureau de poste pour qu'il soit capable de le lui livrer. |
| |
Dans l'exemple ci-dessus, Mike veut envoyer un message à Sally. Mike (l'éditeur) envoie le message au bureau de poste qui connaît l'adresse de Sally ; ainsi, il le lui envoie (elle est l'abonnée). Sally peut aussi envoyer des messages, par le biais de la poste, à John (un autre abonné). | Dans l'exemple ci-dessus, Mike veut envoyer un message à Sally. Mike (l'éditeur) envoie le message au bureau de poste qui connaît l'adresse de Sally ; ainsi, il le lui envoie (elle est l'abonnée). Sally (qui est à la fois abonnée et éditrice) peut aussi envoyer des messages, par le biais de la poste, à John (un autre abonné). |
| |
**In the real world, we have an application, acting as a publisher, that sends messages, based on a topic, to the broker. The broker then sends the message along to any other program, on any other machine or the same machine, that has subscribed to that message topic. | **In the real world, we have an application, acting as a publisher, that sends messages, based on a topic, to the broker. The broker then sends the message along to any other program, on any other machine or the same machine, that has subscribed to that message topic. |
I have been asked, what happens if one of the clients that are subscribed to a topic goes away for some reason. There are three Quality of Service (QoS) levels that can be set for any message being sent to the broker. When a client normally connects to the broker, it is in a non-persistent manner and the QoS level is set to 0, so any messages that arrive when a subscribing client is not connected are lost. If it is important that the subscribers get all messages, the publishing client must set up a persistent session and send the messages with a Quality of Service level higher than 0. We’ll deal with QoS and persistent sessions next month when we create our publishing client.** | I have been asked, what happens if one of the clients that are subscribed to a topic goes away for some reason. There are three Quality of Service (QoS) levels that can be set for any message being sent to the broker. When a client normally connects to the broker, it is in a non-persistent manner and the QoS level is set to 0, so any messages that arrive when a subscribing client is not connected are lost. If it is important that the subscribers get all messages, the publishing client must set up a persistent session and send the messages with a Quality of Service level higher than 0. We’ll deal with QoS and persistent sessions next month when we create our publishing client.** |
| |
Dans le monde réel, nous avons une application, agissant comme un éditeur, pour envoyer les messages, basés sur un sujet, à l'intermédiaire. L'intermédiaire renvoie ensuite le message à un autre programme, sur une autre machine ou sur la même machine, qui est abonnée à ce sujet de message. | Dans le monde réel, nous avons une application, agissant comme un éditeur, pour envoyer des messages, basés sur un sujet, à l'intermédiaire. L'intermédiaire renvoie ensuite le message à un autre programme, sur une autre machine ou sur la même machine, qui est abonnée au sujet de ce message. |
| |
On m'a demandé ce qui se passe si un des clients qui est abonné au sujet part pour une raison quelconque. Il y a trois niveaux de Qualité de Service (QoS, Quality of Service) qui peuvent être réglés pour chaque message envoyé à l'intermédiaire. Quand un client se connecte normalement à l'intermédiaire, c'est d'une manière non-permanente et le niveau QoS est réglé à 0, de sorte que tout message qui arrive quand un client abonné n'est pas connecté est perdu. Si c'est important que les abonnés reçoivent tous les messages, le client éditeur doit établir une session permanente et envoyer les messages avec une Qualité de Service plus grande que 0. Nous nous occuperons de QoS et des sessions permanentes le mois prochain quand nous créerons notre client éditeur. | On m'a demandé ce qui se passe si l'un des clients qui est abonné au sujet part pour une raison quelconque. Il y a trois niveaux de Qualité de Service (QoS, Quality of Service) qui peuvent être réglés pour chaque message envoyé à l'intermédiaire. Quand un client se connecte normalement à l'intermédiaire, c'est de manière non permanente et le niveau QoS est réglé à 0, de sorte que tout message qui arrive quand un client abonné n'est pas connecté est perdu. Si c'est important que les abonnés reçoivent tous les messages, le client éditeur doit établir une session permanente et envoyer les messages avec une Qualité de Service plus grande que 0. Nous nous occuperons de QoS et des sessions permanentes le mois prochain quand nous créerons notre client éditeur. |
| |
**Let's assume that we have a Raspberry Pi 3 that sits in our garage that reads a DHT11 or DHT22 Humidity and Temperature sensor. Let's further assume that we have another Raspberry Pi 3 that we want to use to monitor that information in our bedroom. We can set up a MQTT broker on our bedroom RPi to receive the messages by using Mosquitto available in the software manager. | **Let's assume that we have a Raspberry Pi 3 that sits in our garage that reads a DHT11 or DHT22 Humidity and Temperature sensor. Let's further assume that we have another Raspberry Pi 3 that we want to use to monitor that information in our bedroom. We can set up a MQTT broker on our bedroom RPi to receive the messages by using Mosquitto available in the software manager. |
For testing purposes, we’ll run the sensor, publishing program, broker and subscriber program all on the same Raspberry Pi. ** | For testing purposes, we’ll run the sensor, publishing program, broker and subscriber program all on the same Raspberry Pi. ** |
| |
Supposons que nous avons un Raspberry Pi 3 qui est placé dans notre garage qui lit un capteur d'humidité et de température DHT11 ou DHT22. Supposons encore que nous avons un autre Raspberry Pi 3 dans notre chambre, que nous voulons utiliser pour contrôler cette information. Nous pouvons paramétrer un intermédiaire MQTT sur le RPi de notre chambre pour recevoir les messages en utilisant Mosquitto, disponible dans le gestionnaire de logiciels. | Supposons qu'il y ait un Raspberry Pi 3 dans notre garage qui lit un capteur d'humidité et de température DHT11 ou DHT22. Supposons encore que nous ayons un autre Raspberry Pi 3 dans notre chambre, que nous voulons utiliser pour surveiller cette information. Nous pourrions paramétrer un intermédiaire MQTT sur le RPi de notre chambre pour recevoir les messages en utilisant Mosquitto, disponible dans le gestionnaire de logiciels. |
| |
Le RPi du garage peut utiliser une version modifiée du logiciel que nous avions utilisé dans le Full Circle Magazine n° 109 pour piloter le capteur, et distribuer les messages à l'intermédiaire Mosquitto dans la chambre. Sur le RPi de la chambre, nous écrirons un programme simple en Python pour s'abonner à ces messages. Mais d'abord, étudions en détail MQTT sous Python. | Le RPi du garage peut utiliser une version modifiée du logiciel que nous avons utilisé dans le Full Circle Magazine n° 109, pour piloter le capteur et distribuer les messages à l'intermédiaire Mosquitto dans la chambre. Sur le RPi de la chambre, nous écrirons un programme simple en Python pour s'abonner à ces messages. Mais, d'abord, étudions en détail MQTT sous Python. |
| |
Pour les besoins des tests, nous lancerons le capteur, le programme d'édition, le programme d'intermédiaire et d'abonné ensemble sur le même Raspberry Pi. | Pour les besoins des tests, nous lancerons le capteur, le programme d'édition, le programme d'intermédiaire et d'abonné ensemble sur le même Raspberry Pi. |
and they will be installed for you.** | and they will be installed for you.** |
| |
La première chose que nous avons besoin de faire est d'installer Mosquitto et ses deux clients. À partir du menu principal, aller dans Preferences | Add / Remove Software (Préférences | Ajouter/supprimer un logiciel). Dans le champ de recherche, tapez « mosquitto ». Vous cherchez deux paquets. Le premier est l'intermédiaire. Il est présenté comme « MQTT version 3.1 / 3.1.1 compatible message broker mosquitto-1.4.15-0mosquitto1 ». Sélectionnez-le, puis, quelques lignes plus bas, vous devriez trouver « Mosquitto command line MQTT clients mosquitto-clients-1.4.15-0mosquitto1 ». Sélectionnez-le aussi, puis cliquez sur le bouton « Apply » (Appliquer). Une fois qu'ils sont installés, vous pouvez fermer le gestionnaire de logiciels. Autrement, vous pouvez utiliser apt-get pour l'installer. Dans une fenêtre de terminal, tapez : | La première chose qu'il faut faire est d'installer Mosquitto et ses deux clients. À partir du menu principal, allez dans Preferences | Add / Remove Software (Préférences | Ajouter/supprimer un logiciel). Dans le champ de recherche, tapez « mosquitto ». Vous cherchez deux paquets. Le premier est l'intermédiaire. Il est présenté comme « MQTT version 3.1 / 3.1.1 compatible message broker mosquitto-1.4.15-0mosquitto1 ». Sélectionnez-le, puis, quelques lignes plus bas, vous devriez trouver « Mosquitto command line MQTT clients mosquitto-clients-1.4.15-0mosquitto1 ». Sélectionnez-le aussi, puis cliquez sur le bouton « Apply » (Appliquer). Une fois qu'ils sont installés, vous pouvez fermer le gestionnaire de logiciels. Autrement, vous pouvez utiliser apt-get pour l'installer. Dans une fenêtre de terminal, tapez : |
| |
sudo apt-get install mosquitto mosquitto-clients | sudo apt-get install mosquitto mosquitto-clients |
mosquitto_sub -h localhost -t test | mosquitto_sub -h localhost -t test |
| |
Quand vous appuyez sur Entrée, rien ne semble arriver, mais vous avez créé votre premier abonnement à MQTT. Appuyons sur Pause pour un court instant et voyons ce que nous avons fait. | Quand vous appuyez sur Entrée, vous ne voyez rien, mais vous avez créé votre premier abonnement à MQTT. Appuyons sur Pause pour un court instant et voyons ce que nous avons fait. |
| |
La première partie de la ligne que nous venons de taper était (bien sûr) la commande pour lancer « mosquitto-sub », le client d'abonnement en ligne de commande de MQTT. « -h localhost » dit au client que l'intermédiaire, ou hôte, tourne sur notre hôte local. « -t test » dit au client qu'il devrait s'abonner au sujet appelé « test ». Plus là dessus dans une minute. La raison pour laquelle rien ne se passe quand vous avez appuyé sur Entrée est qu'il attend un message à transmettre sur le sujet « test ». Aussi, passons sur la fenêtre de terminal de droite et tapons | La première partie de la ligne que nous venons de taper était (bien sûr) la commande pour lancer « mosquitto-sub », le client d'abonnement en ligne de commande de MQTT. « -h localhost » dit au client que l'intermédiaire, ou hôte, tourne sur notre hôte local. « -t test » dit au client qu'il devrait s'abonner au sujet appelé « test ». Plus à ce sujet dans une minute. La raison pour laquelle rien ne se passait quand vous avez appuyé sur Entrée est qu'il attend un message à transmettre sur le sujet « test ». Aussi, passons sur la fenêtre de terminal de droite et tapons |
| |
**mosquitto_pub -h localhost -t test -m 'Hi There' | **mosquitto_pub -h localhost -t test -m 'Hi There' |
Maintenant, regardez le terminal de gauche. Vous pouvez voir « Hi there » reproduit sur le terminal. | Maintenant, regardez le terminal de gauche. Vous pouvez voir « Hi there » reproduit sur le terminal. |
| |
« mosquitto-pub » est le client d'édition en ligne de commande. Il lance une commande à la fois ; aussi, chaque fois que vous voulez émettre un message, vous devez saisir toute la commande dans le terminal. Exactement comme la ligne de commande du client d'abonnement, la partie « -h localhost -t test » de la commande dit de se relier à l'intermédiaire et de s'abonner au sujet « test ». La fin de la commande est le message lui-même, qui est, bien sûr, la partie « -m Hi There ». | « mosquitto_pub » est le client d'édition en ligne de commande. Il lance une commande à la fois ; aussi, chaque fois que vous voulez émettre un message, vous devez saisir toute la commande dans le terminal. Exactement comme la ligne de commande du client d'abonnement, la partie « -h localhost -t test » de la commande dit de se relier à l'intermédiaire et de s'abonner au sujet « test ». La fin de la commande est le message lui-même, qui est, bien sûr, la partie « -m Hi There ». |
| |
Alors que ceci semble très simple à première vue, il y a beaucoup à faire. | Alors que ceci semble très simple à première vue, pas mal de choses se passent. |
| |
L'intermédiaire mosquitto (le serveur) tourne sur votre RPi et, par défaut, se tient à l'écoute du port TCP/IP 1883. Vous pouvez changer le numéro du port pour à peu n'importe quel port TCP/IP disponible ; cependant, le port 1883 est enregistré par l'IANA spécialement pour MQTT. Le port TCP/IP 8883 est aussi enregistré, pour l'utilisation de MQTT par SSL. Si vous ne voulez pas faire tourner votre propre intermédiaire, il y a de nombreux intermédiaires publics que vous pouvez utiliser, dont certains gratuits. Vous pouvez trouver une liste de certains d'entre eux et leurs conditions d'utilisation à https://github.com/mqtt/mqtt.github.io/wiki/public_brokers. | L'intermédiaire mosquitto (le serveur) tourne sur votre RPi et, par défaut, se tient à l'écoute du port TCP/IP 1883. Vous pouvez remplacer le numéro du port par n'importe quel port TCP/IP disponible ; cependant, le port 1883 est enregistré par l'IANA spécifiquement pour MQTT. Le port TCP/IP 8883 est aussi enregistré pour l'utilisation de MQTT par SSL. Si vous ne voulez pas faire tourner votre propre intermédiaire, il y a de nombreux intermédiaires publics que vous pouvez utiliser, dont certains sont gratuits. Vous pouvez trouver une liste de certains d'entre eux et leurs conditions d'utilisation sur https://github.com/mqtt/mqtt.github.io/wiki/public_brokers. |
| |
**When a program wants to publish to a broker, it first needs to connect, then sends the topic and the message. It doesn’t have to be concerned who’s there, if anyone. A subscribing program also doesn’t have to care about much, other than subscribing to the proper topic that is being published on the broker. The key here is that if you accidentally subscribe to the wrong topic, nothing will ever come in. When we set up our two terminal window test above, we started the subscriber client before the first message ever came in. The broker didn’t know (or care) what the topic was that we were subscribing to. It assumed we knew what we were doing. In the same way, when we published our ‘Hi There’ message on the ‘test’ topic, the broker simply took it and sent it out to whatever clients out there that happened to be subscribed to the topic, if any.** | **When a program wants to publish to a broker, it first needs to connect, then sends the topic and the message. It doesn’t have to be concerned who’s there, if anyone. A subscribing program also doesn’t have to care about much, other than subscribing to the proper topic that is being published on the broker. The key here is that if you accidentally subscribe to the wrong topic, nothing will ever come in. When we set up our two terminal window test above, we started the subscriber client before the first message ever came in. The broker didn’t know (or care) what the topic was that we were subscribing to. It assumed we knew what we were doing. In the same way, when we published our ‘Hi There’ message on the ‘test’ topic, the broker simply took it and sent it out to whatever clients out there that happened to be subscribed to the topic, if any.** |
| |
Quand un programme veut émettre vers un intermédiaire, il doit d'abord se connecter, puis il envoie le sujet et le message. Il n'a pas à se préoccuper de qui est à l'autre bout, s'il y a quelqu'un. Un programme d'abonnement ne s'en soucie pas beaucoup non plus, à part l'abonnement au sujet propre qui a été envoyé à l'intermédiaire. La clé ici est que, si vous souscrivez accidentellement au mauvais sujet, rien n'arrivera. Quand nous avons paramétré notre test à deux fenêtres de terminal ci-dessus, nous avons démarré le client abonné avant l'arrivée du premier message. L'intermédiaire ne connaît pas (ou ne s'intéresse pas) à ce qu'est le sujet auquel nous souscrivons. Il suppose que nous savions ce que nous faisions. De la même manière, quand nous émettons notre message « Hi There » sur notre sujet « test », l'intermédiaire se contente de le prendre et de l'envoyer à tous les clients à qui il est arrivé d'être abonnés au sujet, s'il y en a. | Quand un programme veut émettre vers un intermédiaire, il doit d'abord se connecter, puis il envoie le sujet et le message. Il ne se préoccupe pas de savoir s'il y quelqu'un à l'autre bout, et qui. Un programme d'abonnement ne s'en soucie pas beaucoup non plus, à part l'abonnement au sujet qui a été envoyé à l'intermédiaire. La clé ici est que, si vous vous abonnez accidentellement au mauvais sujet, rien ne vous arrivera. Lorsque nous avons mis en place notre test à deux terminaux ci-dessus, nous avons démarré le client abonné avant que le premier message n'arrive. L'intermédiaire ne connaît pas le sujet auquel nous souscrivons (et ne s'en préoccupe pas). Il suppose que nous savions ce que nous faisions. De la même manière, quand nous émettons notre message « Hi There » sur notre sujet « test », l'intermédiaire se contente de le prendre et de l'envoyer à n'importe quel client qui s'est abonné au sujet, le cas échéant. |
| |
**The topic itself can be as simple as ‘test’ or extremely verbose. Some basic guidelines for topics are: | **The topic itself can be as simple as ‘test’ or extremely verbose. Some basic guidelines for topics are: |
housesensors/** | housesensors/** |
| |
En dehors de ça, il y a très peu de contraintes sur ce qu'est un sujet ou comment il est construit. Typiquement, si un client a besoin de publier plus qu'un seul type de message, les sujets seront mis bout à bout et chaque partie sera séparée par un slash (/). Par exemple, dans le programme que nous écrirons pour suivre et émettre les valeurs du capteur DHT, nous utiliserons deux sujets différents. Un pour la valeur d'humidité et un pour la valeur de température. Nous pourrions combiner les valeurs dans un chaîne et n'utiliser qu'un seul sujet ; mais, dans le cas présent, nous les émettrons séparément. En faisant une très grosse supposition, nous fournirons une solution domestique complète, avec de nombreux capteurs de types divers dans différentes pièces de la maison. Nous pouvons commencer nos sujets avec : | En dehors de ça, il y a très peu de contraintes sur ce qu'est un sujet ou comment il est construit. Typiquement, si un client a besoin de publier plusieurs types de message, les sujets seront mis bout à bout et chaque partie sera séparée par un slash (/). Par exemple, dans le programme que nous écrirons pour suivre et émettre les valeurs du capteur DHT, nous devrions utiliser deux sujets différents. Un pour la valeur d'humidité et un pour la valeur de température. Nous pourrions combiner les valeurs dans une chaîne et n'utiliser qu'un seul sujet ; mais, dans le cas présent, nous les émettrons séparément. En faisant une estimation très grossière, nous fournirons une solution domestique complète, avec de nombreux capteurs de types divers dans différentes pièces de la maison. Nous pouvons commencer nos sujets avec : |
| |
housesensors/ | housesensors/ |
housesensors/firstfloor/bedroom/temperature** | housesensors/firstfloor/bedroom/temperature** |
| |
Ceci décrit que le sujet sera un de ceux qui auront des données spécifiques à la maison elle-même. Ceci peut comprendre les chambres, les zones de vie et les parties de jardin, mais pas quelque chose comme une place de parking. Le prochain niveau pourrait être basé sur l'étage, comme le premier étage, le rez de chaussée, et ainsi de suite. | Il s'agit d'un sujet qui fournira des données de capteurs spécifiques à la maison elle-même. Cela peut comprendre les chambres, les zones de vie et les parties du jardin, mais pas un lieu comme un parking. Le prochain niveau pourrait être basé sur les étages, comme le premier étage, le rez-de-chaussée, et ainsi de suite. |
| |
housesensors/firstfloor/ | housesensors/firstfloor/ |
housesensors/firstfloor/bedroom/ | housesensors/firstfloor/bedroom/ |
| |
Enfin, nous pourrions définir le sujet du type particulier de valeur qui sera émise. | Enfin, nous pourrions définir le sujet comme étant le type de valeur qui sera émise. |
| |
housesensors/firstfloor/bedroom/humidity | housesensors/firstfloor/bedroom/humidity |
Full documentation on the phao library can be found at https://www.eclipse.org/paho/clients/python/ .** | Full documentation on the phao library can be found at https://www.eclipse.org/paho/clients/python/ .** |
| |
Notez qu'aucune des chaînes de sujet n'inclut d'espace. Alors que les espaces ne sont pas spécifiquement interdits, UTF-8 autorise beaucoup de sortes d'espace blanc et les choses pourraient être confuses. Vous pourriez aussi utiliser une casse variée comme « HouseSensors/FirstFloor/Bedroom/Humidity » mais, comme toutes les chaînes de sujets sont sensibles à la casse, si vous vous trompez dans la saisie d'un sujet à l'émission ou lors de l'abonnement, il pourrait se passer un bon paquet de temps pour résoudre les choses. Je pense qu'il est préférable de tout mettre en minuscules. | Notez qu'il n'y a aucune espace dans les chaînes de sujet. Alors que les espaces ne sont pas spécifiquement interdits, UTF-8 autorise beaucoup de sortes d'espace blanc, mais ça pourrait semer la confusion. Vous pourriez aussi utiliser une casse variée comme « HouseSensors/FirstFloor/Bedroom/Humidity » mais, comme toutes les chaînes de sujets sont sensibles à la casse, si vous vous trompez dans la saisie d'un sujet lors de l'émission ou de l'abonnement, il pourrait se passer du temps avant que les choses ne soient résolues. Je pense qu'il est préférable de tout mettre en minuscules. |
| |
Pour que nos programmes en Python puissent communiquer avec MQTT, nous utiliserons la bibliothèque paho-mqtt. Vous pouvez l'installer en utilisant pip. Pour Python 2.x : | Pour que nos programmes en Python puissent communiquer avec MQTT, nous utiliserons la bibliothèque paho-mqtt. Vous pouvez l'installer avec pip. Pour Python 2.x : |
| |
pip install --user paho-mqtt | pip install --user paho-mqtt |
pip3 install --user paho-mqtt | pip3 install --user paho-mqtt |
| |
Un documentation complète de la bibliothèque paho peu être trouvée à https://www.eclipse.org/paho/clients/python/ . | Une documentation complète de la bibliothèque paho se trouve à https://www.eclipse.org/paho/clients/python/ . |
| |
**As a sample program for you to test with, I’ll give you a short program that you can run and use the mosquitto_pub to send messages to it based on sample code from the eclipse site. I’ve made a couple of changes to make it work properly here. | **As a sample program for you to test with, I’ll give you a short program that you can run and use the mosquitto_pub to send messages to it based on sample code from the eclipse site. I’ve made a couple of changes to make it work properly here. |
Now we instantiate the client and bind our callback functions to it.** | Now we instantiate the client and bind our callback functions to it.** |
| |
Comme exemple de programme pour que vous le testiez, je vous donnerai un programme court que vous pouvez lancer ; utilisez mosquitto_pub pur lui envoyer des messages sur la base de l'exemple de code du site eclipse. J'y ai fait quelques modifications pour qu'il fonctionne correctement ici. | Comme exemple de programme pour que vous le testiez, je vous donnerai un programme court que vous pouvez lancer, puis utiliser mosquitto_pub pour lui envoyer des messages sur la base de l'exemple de code du site eclipse. J'y ai fait quelques modifications pour qu'il fonctionne correctement ici. |
| |
Bien sûr, il vous faut importer la bibliothèque pour démarrer. | Bien sûr, il nous faut importer la bibliothèque pour démarrer. |
| |
import paho.mqtt.client as mqtt | import paho.mqtt.client as mqtt |
| |
Ensuite, nous créerons une fonction de rappel qui tourne si un message est reçu de l'intermédiaire. Elle imprimera le sujet suivi du message sur le terminal. | Ensuite, nous créerons une fonction de rappel (ci-dessus à droite) qui tournera si un message est reçu de l'intermédiaire. Elle imprimera le sujet suivi du message sur le terminal. |
| |
def on_message(client, userdata, msg): | def on_message(client, userdata, msg): |
print(msg.topic+" "+str(msg.payload)) | print(msg.topic+" "+str(msg.payload)) |
| |
Maintenant, nous instantions le client et nous lui relions la fonction de rappel. | Maintenant, nous instancions le client et lui lions nos fonctions de rappel. |
| |
**client = mqtt.Client() | **client = mqtt.Client() |
client.connect("localhost", 1883, 60) | client.connect("localhost", 1883, 60) |
| |
Enfin,nous disons au client de faire « loop_forever » (boucle infinie). Utilisez l'interruption au clavier avec Ctrl-C pour sortir du programme exemple. | Enfin, nous disons au client de « loop_forever » (faire une boucle infinie). Utilisez l'interruption au clavier avec Ctrl-C pour sortir du programme exemple. |
| |
# Blocage de l'appel qui traite le trafic du réseau, répartit des rappels et | # Blocage de l'appel qui traite le trafic du réseau, répartit des rappels et |
Maintenant, sauvegardez le programme sous « client1.py » et lancez-le. | Maintenant, sauvegardez le programme sous « client1.py » et lancez-le. |
| |
Revenez au terminal qui fait tourner mosquitto_pub et renvoyez le message précédent au sujet « test ». Vous devriez le voir apparaître dans la fenêtre de terminal où notre programme Python tourne. J'ai placé le code sur Pastebin à https://pastebin.com/zL5ed9g9 | Retournez au terminal qui exécute mosquitto_pub et renvoyez le message précédent au sujet « test ». Vous devriez le voir apparaître dans la fenêtre de terminal où notre programme Python tourne. J'ai placé le code sur Pastebin à https://pastebin.com/zL5ed9g9 |
| |
Le mois prochain, nous mettrons à jour notre programme Python original du n° 109 du Full Circle Magazine pour qu'il supporte MQTT. | Le mois prochain, nous mettrons à jour notre programme Python original du n° 109 du Full Circle Magazine pour qu'il supporte MQTT. |
| |
Jusque là, amusez-vous bien. | Jusque-là, amusez-vous bien. |
| |
| |
| |
# S'abonner avec on_connect signifie que si nous perdons la connexion et | # S'abonner avec on_connect signifie que si nous perdons la connexion et |
# nous nous reconnectons, les abonnements seront renouvelés | # nous nous reconnectons, les abonnements seront renouvelés. |