Outils pour utilisateurs

Outils du site


issue133:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue133:python [2018/05/28 07:18] christo.2soissue133:python [2018/05/31 15:43] (Version actuelle) d52fr
Ligne 6: Ligne 6:
 **This month, we'll continue our discussion of MQTT, especially how MQTT can support quality of service and then we'll modify our original program from Full Circle issue #109 to support MQTT.** **This month, we'll continue our discussion of MQTT, especially how MQTT can support quality of service and then we'll modify our original program from Full Circle issue #109 to support MQTT.**
  
-Ce mois-ci, nous poursuivrons notre discussion sur MQTT, en particulier sur la façon dont MQTT peut assurer la bonne qualité d'un service, puis nous modifierons notre programme original du numéro 109 de Full Circle pour supporter MQTT.+Ce mois-ci, nous poursuivrons notre discussion sur MQTT, en particulier sur la façon dont MQTT peut assurer la bonne qualité d'un service, puis nous modifierons notre programme original du numéro 109 du Full Circle pour supporter MQTT.
  
 **QoS **QoS
Ligne 18: Ligne 18:
 QoS QoS
  
-QoS signifie Qualité de service. MQTT supporte trois niveaux, numérotés 0, 1 et 2. Si vous n'avez pas à être certain de savoir ceux qui sont abonnés à vos messages thématiques, alors vous utilisez simplement une QoS de 0. Voici une description des niveaux :+QoS signifie Qualité de service. MQTT supporte trois niveaux, numérotés 0, 1 et 2. Si vous ne devez pas être certain de savoir ceux qui sont abonnés à vos messages thématiques, alors vous utilisez simplement une QoS de 0. Voici une description des niveaux :
  
-0 - Au plus une fois +0 - Au plus une fois. 
-1 - Au moins une fois +1 - Au moins une fois. 
-2 - Exactement une fois+2 - Exactement une fois.
  
  
 **When the broker transfers a message to a subscribing client, it uses the QoS of the subscription made by the receiving client** **When the broker transfers a message to a subscribing client, it uses the QoS of the subscription made by the receiving client**
  
-Lorsque le gestionnaire transfère un message à un client abonné, il utilise la QoS de l'abonnement effectué par le client destinataire.+Lorsque l'intermédiaire/serveur (le « broker ») transfère un message à un client abonné, il utilise la QoS de l'abonnement effectué par le client destinataire.
  
  
Ligne 44: Ligne 44:
 Niveau 0 Niveau 0
  
-Le niveau 0 garantit la meilleure  garantie de livraison. Le message ne fera pas l'objet d'un accusé de réception par le destinataire (courtier ou client), et il ne sera pas non plus stocké et réexpédié par l'expéditeur.+Le niveau 0 fournit la meilleure garantie de livraison. Le message ne fera pas l'objet d'un accusé de réception par le destinataire (l'intermédiaire ou le client), et il ne sera pas non plus stocké et renvoyé par l'expéditeur.
  
 Niveau 1 Niveau 1
  
-L'utilisation du niveau 1 garantit qu'un message sera livré au moins une fois au destinataire (de l'éditeur au courtier ou du courtier à l'abonné). L'expéditeur stocke le message jusqu'à ce qu'il reçoive un message PUBACK du destinataire. Notez que le message peut être envoyé plusieurs fois au destinataire jusqu'à ce que le PUBACK soit renvoyé à l'expéditeur.+L'utilisation du niveau 1 garantit qu'un message sera livré au moins une fois au destinataire (de l'éditeur à l'intermédiaire et de l'intermédiaire à l'abonné). L'expéditeur stocke le message jusqu'à ce qu'il reçoive un message PUBACK du destinataire. Notez que le message peut être envoyé plusieurs fois au destinataire jusqu'à ce que le PUBACK soit renvoyé à l'expéditeur.
  
 Niveau 2 Niveau 2
  
-Comme vous pouvez le voir sur le diagramme, le client envoie un message de publication au courtier et le courtier renvoie un PUBREC. L'expéditeur stocke ensuite une référence à l'identificateur de paquet, qui est ensuite stocké et envoie un message PUBREL. Si le destinataire répond avec un message PUBCOMP, l'expéditeur sait alors qu'il peut jeter le message et la référence en toute sécurité. Si un message se perd quelque part en cours de route, l'expéditeur (le client de publication ou le courtier) est responsable de la réexpédition du dernier message.+Comme vous pouvez le voir sur le diagramme, le client envoie un message de publication à l'intermédiaire et l'intermédiaire renvoie un PUBREC. L'expéditeur stocke ensuite une référence à l'identificateur de paquet, qui est alors stockéet envoie un message PUBREL. Si le destinataire répond avec un message PUBCOMP, l'expéditeur sait alors qu'il peut jeter le message et la référence en toute sécurité. Si un message se perd quelque part en cours de route, l'expéditeur (le client qui publie le message ou l'intermédiaire) est responsable de la réexpédition du dernier message.
  
  
Ligne 61: Ligne 61:
 When should you use one level over another? Basically if your publishing client doesn't need to worry if there might be a missed transmission or two, and your connection to the broker is reliable 24/7, you could pretty much feel safe to use Qos Level 0. If you need to have a guarantee that the published message will get to (or from) the broker with somewhere near complete assurance that the messages will make it through, then use Level 1. If a message absolutely positively must get through, then use Level 2, but remember, nothing in life is 100% perfect, especially when relying on connecting to a broker (on either end) via an external connection to the internet.** When should you use one level over another? Basically if your publishing client doesn't need to worry if there might be a missed transmission or two, and your connection to the broker is reliable 24/7, you could pretty much feel safe to use Qos Level 0. If you need to have a guarantee that the published message will get to (or from) the broker with somewhere near complete assurance that the messages will make it through, then use Level 1. If a message absolutely positively must get through, then use Level 2, but remember, nothing in life is 100% perfect, especially when relying on connecting to a broker (on either end) via an external connection to the internet.**
  
-We will be using a Qos Level for our communications in our demojust for practice.+Bien sûr, le niveau de QoS est plus rapide que le niveau 2puisqu'il n'y a que deux messages à traiter quand le niveau 2 en a quatre, et le niveau 0 de QoS est encore plus rapide que le niveau 1.
  
-The Hardware+Lorsque l'intermédiaire envoie un message à un client abonné, la QoS utilisée est celle utilisée par le client lorsqu'il s'abonne au sujet. Par conséquent, la QoS peut être déclassée par rapport à l'intention du client expéditeur. 
 + 
 +A quel moment doit-on utiliser un niveau plutôt qu'un autre ? Fondamentalement, si votre client expéditeur n'a pas à s'inquiéter d'une ou deux transmissions manquées, et que votre connexion à l'intermédiaire est fiable 24 heures sur 24 et 7 jours sur 7, vous pourriez vous sentir en sécurité en utilisant le niveau 0 de Qos. Si vous avez besoin de garantir que le message publié parviendra à l'intermédiaire (ou en provenance de celui-ci), avec l'assurance presque totale que les messages passeront, utilisez le niveau 1. Si un message doit passer sans faute, alors utilisez le niveau 2, mais rappelez-vous que rien dans la vie n'est parfait à 100 %, surtout si vous comptez vous connecter à un intermédiaire (de part et d'autre) via une connexion externe vers l'Internet. 
 + 
 + 
 +**We will be using a Qos Level 1 for our communications in our demo, just for practice.** 
 + 
 +Nous utiliserons le niveau 1 de Qos pour les communications dans notre démo d'entraînement. 
 + 
 + 
 +**The Hardware
  
 If you remember the original project we did back in FCM 109, we used a DHT11 connected to our Raspberry Pi. We used the Adafruit DHT22 python library and slightly modified their sample code. If you remember the original project we did back in FCM 109, we used a DHT11 connected to our Raspberry Pi. We used the Adafruit DHT22 python library and slightly modified their sample code.
Ligne 69: Ligne 79:
 I’ve recreated the Fritzing diagram showing the hardware connections… I’ve recreated the Fritzing diagram showing the hardware connections…
  
-Once you have the hardware all set up, now we have to download and install the library. If you don’t currently have the library, you can find it on GitHub at https://github.com/adafruit/Adafruit_Python_DHT.git . Remember, you have to install the library on the Raspberry Pi. Here are the steps to clone the library from github.+Once you have the hardware all set up, now we have to download and install the library. If you don’t currently have the library, you can find it on GitHub at https://github.com/adafruit/Adafruit_Python_DHT.git . Remember, you have to install the library on the Raspberry Pi. Here are the steps to clone the library from github.**
  
-cd /home/pi+Le matériel
  
-git clone https://github.com/adafruit/Adafruit_Python_DHT.git +Si vous vous souvenez du projet original réalisé dans le FCM n° 109, nous avons utilisé un DHT11 connecté à notre Raspberry PiNous avons utilisé la bibliothèque DHT22 python d'Adafruit et avons légèrement modifié leur code échantillon.
  
-cd Adafruit_Python_DHT+J'ai recréé le diagramme de Fritzing en montrant les connexions matérielles :
  
-sudo apt-get update+Une fois tout le matériel installé, nous devons télécharger et installer la bibliothèque. Si vous n'avez pas la bibliothèque, vous pouvez la trouver sur GitHub à l'adresse https://github.com/adafruit/Adafruit_Python_DHT.git . Rappelez-vous que vous devez installer la bibliothèque sur le Raspberry Pi. Voici les étapes pour cloner la bibliothèque de github :
  
-sudo apt-get install build-essential python-dev python-openssl 
  
-sudo python setup.py install+  * cd /home/pi
  
 +  * git clone https://github.com/adafruit/Adafruit_Python_DHT.git 
  
-The sample code is in the /examples folder, called simpletest.py. Be sure to change the line that defines which pin your sensor is on to match your setup. The original code assumes your are putting the data pin of the sensor on GPIO 23 (line 35). In the setup I present, use GPIO 4. Also be sure to comment out line 31 if you are using a Raspberry Pi instead of a Beaglebone board.+  * cd Adafruit_Python_DHT
  
-Here is our updated code (right, and continuing on to the next page). You can try modifying the original code, or just start over. It’s not that long.+  * sudo apt-get update
  
-In those last lines (next page), we check to make sure that we got data from the sensor, and if so, we create two messages, one containing the humidity value and one containing the temperature value. In the next two lines, we actually publish the messages. Notice that we are using a QoS value of 1 with a retain value of True. This should ensure delivery if the broker is there and if there are any clients listening for our data. Finally, we sleep for 5 seconds and repeat the loop. Feel free to change the sleep value to whatever you wish over 5. The DHT11/22 doesn’t like to be accessed more than about once every 5 seconds. A realistic value would be somewhere between 30 and 60 seconds.+  * sudo apt-get install build-essential python-dev python-openssl 
 + 
 +  * sudo python setup.py install 
 + 
 + 
 +**The sample code is in the /examples folder, called simpletest.py. Be sure to change the line that defines which pin your sensor is on to match your setup. The original code assumes your are putting the data pin of the sensor on GPIO 23 (line 35). In the setup I present, use GPIO 4. Also be sure to comment out line 31 if you are using a Raspberry Pi instead of a Beaglebone board. 
 + 
 +Here is our updated code (right, and continuing on to the next page). You can try modifying the original code, or just start over. It’s not that long.** 
 + 
 +Le code d'exemple se trouve dans le dossier « /examples », appelé simpletest.py. Assurez-vous de changer la ligne qui définit la broche de votre capteur pour qu'elle corresponde à votre configuration. Le code original suppose que vous mettez la broche de données du capteur sur le GPIO 23 (ligne 35). Dans la configuration que je présente, utilisez GPIO 4. Assurez-vous également de commenter la ligne 31 si vous utilisez un Raspberry Pi au lieu d'une carte Beaglebone. 
 + 
 +Voici notre code mis à jour (à droite, puis il continue à la page suivante). Vous pouvez essayer de modifier le code original ou simplement recommencer à zéro. Ce n'est pas si long. 
 + 
 + 
 +**In those last lines (next page), we check to make sure that we got data from the sensor, and if so, we create two messages, one containing the humidity value and one containing the temperature value. In the next two lines, we actually publish the messages. Notice that we are using a QoS value of 1 with a retain value of True. This should ensure delivery if the broker is there and if there are any clients listening for our data. Finally, we sleep for 5 seconds and repeat the loop. Feel free to change the sleep value to whatever you wish over 5. The DHT11/22 doesn’t like to be accessed more than about once every 5 seconds. A realistic value would be somewhere between 30 and 60 seconds.** 
 + 
 +Dans ces dernières lignes (page suivante), nous vérifions que nous avons bien reçu les données du capteur et, si c'est le cas, nous créons deux messages, l'un contenant la valeur d'humidité et l'autre la valeur de température. Dans les deux lignes suivantes, nous publions les messages. Notez que nous utilisons une valeur de QoS de 1 avec une valeur de rétention de type « True ». Cela devrait assurer la livraison si l'intermédiaire est là et s'il y a des clients qui écoutent nos données. Enfin, nous dormons pendant 5 secondes et répétons la boucle. N'hésitez pas à changer la valeur de sommeil si vous souhaitez plus de 5 secondes. Le DHT11/22 n'aime pas qu'on y accède plus d'une fois toutes les 5 secondes environ. Une valeur réaliste se situe entre 30 et 60 secondes.
  
 client.publish(MQTT_PATH1,hmsg,qos=1,retain=True) client.publish(MQTT_PATH1,hmsg,qos=1,retain=True)
Ligne 100: Ligne 126:
     sleep(5)     sleep(5)
  
-Of course, I’m assuming that your broker is running on the same Raspberry Pi. If not, be sure the change the IP address that MQTT_SERVER pointing to.+**Of course, I’m assuming that your broker is running on the same Raspberry Pi. If not, be sure the change the IP address that MQTT_SERVER pointing to.
  
-Now you can run your program (be sure the broker is running BEFORE you start the program). Next, run mosquitto_sub on the RPi subscribing to one or both of the topics we set up in our program. You should see a message each time the loop runs.+Now you can run your program (be sure the broker is running BEFORE you start the program). Next, run mosquitto_sub on the RPi subscribing to one or both of the topics we set up in our program. You should see a message each time the loop runs.**
  
-I’ve put our new program on Pastebin at https://pastebin.com/gqPLNsiw, just in case you don’t want to do all the typing.+Bien sûr, je suppose que votre intermédiaire utilise le même Raspberry Pi. Si ce n'est pas le cas, assurez-vous de changer l'adresse IP vers laquelle MQTT_SERVER pointe. 
 + 
 +Vous pouvez maintenant exécuter votre programme (assurez-vous que l'intermédiaire est en cours d'exécution AVANT de démarrer le programme). Ensuite, lancez mosquitto_sub sur le RPi en souscrivant à l'un ou aux deux sujets que nous avons mis en place dans notre programme. Vous devriez voir un message à chaque fois que la boucle s'exécute. 
 + 
 + 
 +**I’ve put our new program on Pastebin at https://pastebin.com/gqPLNsiw, just in case you don’t want to do all the typing.
  
 Next month, our project will be a GUI subscriber client to monitor our sensors. This client can be either on the RPi or on another computer on your network. In fact, if you use a public broker, you can monitor it from anywhere in the world. Next month, our project will be a GUI subscriber client to monitor our sensors. This client can be either on the RPi or on another computer on your network. In fact, if you use a public broker, you can monitor it from anywhere in the world.
  
-Until then, have a great month.+Until then, have a great month.** 
 + 
 +J'ai mis notre nouveau programme sur Pastebin à https://pastebin.com/gqPLNsiw, juste au cas où vous ne voudriez pas faire toute la dactylographie. 
 + 
 +Le mois prochain, notre projet sera un client abonné GUI pour surveiller nos capteurs. Ce client peut être sur le RPi ou sur un autre ordinateur de votre réseau. En fait, si vous utilisez un intermédiaire public, vous pouvez le surveiller de n'importe où dans le monde. 
 + 
 +D'ici là, passez un bon mois.
  
issue133/python.1527484731.txt.gz · Dernière modification : 2018/05/28 07:18 de christo.2so