Cette rubrique explique comment utiliser la bibliothèque Paho MQTT pour Python afin de connecter un appareil à IoT Platform et d'activer la messagerie.
Prérequis
Dans la console IoT Platform , pour l'instance correspondante, créez un produit et un appareil, puis obtenez le nom de domaine d'accès MQTT et les informations du certificat de l'appareil (ProductKey, DeviceName et DeviceSecret). Pour plus d'informations, consultez :
Préparer un environnement de développement
Nous vous recommandons d'utiliser Python 3.6.
-
Linux
Exécutez les commandes suivantes pour installer Python :
ImportantDans cette rubrique, les opérations sont effectuées avec les droits d'un utilisateur standard. Si vous devez effectuer des opérations spécifiques nécessitant des droits d'administrateur, utilisez la commande sudo.
sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get update sudo apt-get install python3.6 wget https://bootstrap.pypa.io/get-pip.py sudo python3.6 get-pip.py python3.6 -m pip install --upgrade pip setuptools wheel sudo apt-get install python3.6-venv -
Windows
Installez l'un des packages suivants en fonction de votre système d'exploitation :
32 bits : python-3.6.7.exe
64 bits : python-3.6.7-amd64.exe
-
macOS
Téléchargez le package python-3.6.7-macosx10.9.pkg.
Télécharger la bibliothèque Paho MQTT pour Python
Pour plus d'informations sur le projet Paho et les langages de programmation pris en charge, consultez Eclipse Paho Downloads.
Exécutez la commande suivante pour installer la bibliothèque Paho MQTT pour Python. Pour plus d'informations, consultez Paho-MQTT.
pip install paho-mqtt==1.6.1
Cette démo ne prend pas en charge la bibliothèque Paho MQTT version 2.0.0.
Connecter un appareil à IoT Platform
-
Le fichier MqttSign.py définit une fonction appelée pour obtenir les paramètres de connexion MQTT. Vous devez appeler cette fonction pour connecter votre appareil à IoT Platform.
Fonctions :
Cette fonction permet d'obtenir les paramètres de connexion MQTT suivants : username, password et mqttClientId.
-
Paramètres d'entrée :
|
Paramètre
|
Type
|
Description
| | --- | --- | --- | |
**productKey**
|
String
|
ProductKey du produit auquel appartient l'appareil. Ce paramètre sert à identifier l'appareil dans IoT Platform.
| |
**deviceName**
|
String
|
DeviceName de l'appareil. Ce paramètre sert à identifier l'appareil dans IoT Platform.
| |
**deviceSecret**
|
String
|
DeviceSecret de l'appareil. Ce paramètre sert à identifier l'appareil dans IoT Platform.
| |
**clientId**
|
String
|
ClientID de l'appareil. Pour identifier efficacement un appareil, nous vous recommandons d'utiliser l'adresse MAC ou le numéro de série (SN) de l'appareil comme ClientID.
| |
**timeStamp**
|
String
|
Horodatage indiquant l'heure actuelle en millisecondes. Ce paramètre est facultatif.
| -
Paramètres de sortie :
|
Paramètre
|
Type
|
Description
| | --- | --- | --- | |
**mqttUsername**
|
String
|
Nom d'utilisateur utilisé pour établir la connexion MQTT.
| |
**mqttPassword**
|
String
|
Mot de passe utilisé pour établir la connexion MQTT.
| |
**mqttClientId**
|
String
|
ID du client MQTT.
|
-
Ajoutez un fichier de programme permettant de connecter un appareil à IoT Platform.
Pour obtenir les paramètres de connexion MQTT, vous devez écrire un programme qui appelle la fonction du fichier MqttSign.py.
Cette section fournit les instructions de développement et un exemple de code.
-
Spécifiez les informations de l'appareil.
# set the device info, include product key, device name, and device secret productKey = "a1LhUsK***" deviceName = "python***" deviceSecret = "bdd043d193782d11***" # set timestamp, clientid, subscribe topic and publish topic timeStamp = str((int(round(time.time() * 1000)))) clientId = "192.168.****" subTopic = "/" + productKey + "/" + deviceName + "/user/get" pubTopic = "/" + productKey + "/" + deviceName + "/user/update" -
Spécifiez les informations de connexion MQTT.
Appelez la fonction
calculate_sign_timedu fichier MqttSign.py. Cette fonction renvoie les paramètresmqttUsername, mqttPassword et mqttClientId en fonction des valeurs des paramètres d'entrée suivants : deviceSecret, timeStamp, clientId, productKey et deviceName.Dans cet exemple, une connexion TCP basée sur TLS (Transport Layer Security) est établie. Vous devez télécharger un certificat racine pour configurer les paramètres de connexion.
# set host, port host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" # instanceId = "***" # host = instanceId + ".mqtt.iothub.aliyuncs.com" port = 1883 # set tls crt, keepalive tls_crt = "root.crt" keepAlive = 300 # calculate the login auth info, and set it into the connection options m = AuthIfo() m.calculate_sign_time(productKey, deviceName, deviceSecret, clientId, timeStamp) client = mqtt.Client(m.mqttClientId) client.username_pw_set(username=m.mqttUsername, password=m.mqttPassword) client.tls_set(tls_crt)RemarqueSi vous utilisez une instance publique de l'ancienne version, remplacez cn-shanghai dans
host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"par l'ID de la région où réside l'appareil. Pour plus d'informations sur les formats des ID de région, consultez Régions prises en charge.-
Si vous utilisez une instance publique de la nouvelle version ou une instance Enterprise Edition, remplacez instanceId dans
host = instanceId + ".mqtt.iothub.aliyuncs.com"par l'ID de l'instance.Pour obtenir l'endpoint MQTT, procédez comme suit : Connectez-vous à la console IoT Platform console. Sur la page Overview, cliquez sur la carte de l'instance que vous souhaitez gérer. L'endpoint MQTT s'affiche sur la page des détails de l'instance. Pour plus d'informations, consultez Consulter l'endpoint d'une instance.
Pour plus d'informations sur les instances IoT Platform, consultez Présentation des instances.
-
Appelez la fonction
Connect()pour connecter l'appareil à IoT Platform.def on_connect(client, userdata, flags, rc): if rc == 0: print("connect success!") else: print("connect failed... error code is:" + str(rc)) def connect_mqtt(): client.on_connect = on_connect client.connect(host, port, keepAlive) return client -
Appelez la fonction Publish() pour publier des messages. Vous devez spécifier un sujet vers lequel les messages sont publiés ainsi que les charges utiles des messages.
def publish_message(): # publish 5 messages to pubTopic("/a1LhUsK****/python***/user/update") for i in range(5): message = "ABC" + str(i) client.publish(pubTopic, message) print("publish msg:" + str(i)) time.sleep(2)Pour plus d'informations sur les sujets, consultez Qu'est-ce qu'un sujet ?
-
Appelez la fonction Subscribe() pour vous abonner au sujet et recevoir des messages depuis IoT Platform.
def subscribe_topic(): # subscribe to subTopic("/a1LhUsK****/python***/user/get") and request messages to be delivered client.subscribe(subTopic)Pour plus d'informations sur les méthodes de communication entre les appareils, les serveurs et IoT Platform, consultez Présentation des méthodes de communication dans IoT Platform.
-
Exécutez le projet.
Exemple de code
Exécutez le programme compilé à partir de l'exemple de code pour connecter l'appareil à IoT Platform.
-
Téléchargez le package contenant l'exemple de code via ce lien et décompressez-le dans le répertoire aiot-python-demo. Le tableau suivant décrit les fichiers inclus dans le répertoire.
|
Fichier de certificat
|
Description
| | --- | --- | |
MqttSign.py
|
Ce fichier contient le code utilisé pour obtenir les paramètres de connexion requis pour connecter un appareil à IoT Platform via MQTT. Lors de l'exécution du fichier, la fonction `calculate_sign_time` est appelée pour obtenir les valeurs des paramètres **mqttUsername**, **mqttPassword** et **mqttClientId**.
| |
iot.py
|
Ce fichier contient le code logique utilisé pour connecter un appareil à IoT Platform et activer la communication.
| |
root.crt
|
Certificat racine d'IoT Platform. Ce certificat est requis pour connecter des appareils à IoT Platform.
| -
Dans le fichier iot.py, remplacez les informations de l'appareil par vos propres informations.
-
Remplacez les valeurs des paramètres productKey, deviceName et deviceSecret par les informations du certificat de votre appareil.
# set the device info, include product key, device name, and device secret productKey = "a1LhUsK***" deviceName = "python***" deviceSecret = "bdd043d193782d11***" -
Facultatif : Remplacez les valeurs des paramètres timeStamp et clientId. Vous pouvez remplacer la valeur du paramètre clientId par l'adresse MAC ou le SN de votre appareil.
RemarqueSi vous ne remplacez pas les valeurs, vous pourrez toujours connecter l'appareil à IoT Platform. Toutefois, dans des scénarios réels, nous vous recommandons de remplacer les valeurs des paramètres par des valeurs réelles.
-
Remplacez .iot-as-mqtt.cn-shanghai.aliyuncs.com dans
host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"par l'endpoint MQTT réel.Pour plus d'informations, consultez l'étape 2 de la section « Connecter un appareil à IoT Platform »Connecter un appareil à IoT Platform de cette rubrique.
-
-
Exécutez le fichier iot.py.
Après avoir exécuté le fichier, les journaux locaux suivants sont générés :
Connect aliyun IoT Cloud Sucess subscribe topic: /a1LhUsK***/python***/user/get publish msg: 0 publish msg: ABC0 publish msg: 1 publish msg: ABC1 publish msg: 2 publish msg: ABC2 publish msg: 3 publish msg: ABC3 publish msg: 4 publish msg: ABC4Connectez-vous à la console IoT Platform. Vous pouvez consulter l'état et les journaux de l'appareil sur l'instance.
Dans le volet de navigation de gauche, choisissez . Vous constatez que l'état de l'appareil est Online.
Choisissez . Vous pouvez consulter les IoT Platform logs et les on-premises device logs. Pour plus d'informations, consultez Journaux IoT Platform et Journaux des appareils locaux.
Codes d'erreur
Si un appareil ne parvient pas à se connecter à IoT Platform via MQTT, vous pouvez résoudre le problème en vous basant sur le code d'erreur. Pour plus d'informations, consultez Dépannage.