Este tema describe cómo usar la biblioteca Paho MQTT para Python con el fin de conectar un dispositivo a IoT Platform y habilitar la mensajería.
Requisitos previos
En la consola de IoT Platform , para la instancia correspondiente, cree un producto y un dispositivo, y obtenga el nombre de dominio de acceso MQTT y la información del certificado del dispositivo (ProductKey, DeviceName y DeviceSecret). Para obtener más información, consulte:
Preparación de un entorno de desarrollo
Se recomienda usar Python 3.6.
-
Linux
Ejecute los siguientes comandos para instalar Python:
ImportanteEn este tema se utilizan los permisos de un usuario común para ejecutar todas las operaciones. Si necesita realizar alguna operación que requiera permisos de administrador, ejecute el comando 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
Instale uno de los siguientes paquetes según su sistema operativo:
32 bits: python-3.6.7.exe
64 bits: python-3.6.7-amd64.exe
-
macOS
Descargue el paquete python-3.6.7-macosx10.9.pkg.
Descarga de la biblioteca Paho MQTT para Python
Para obtener más información sobre el proyecto Paho y los lenguajes de programación compatibles, consulte Eclipse Paho Downloads.
Ejecute el siguiente comando para instalar la biblioteca Paho MQTT para Python. Para obtener más información, consulte Paho-MQTT.
pip install paho-mqtt==1.6.1
Esta demostración no es compatible con la versión 2.0.0 de la biblioteca Paho MQTT.
Conexión de un dispositivo a IoT Platform
-
El archivo MqttSign.py define una función que se llama para obtener los parámetros de conexión MQTT. Debe llamar a esta función para conectar su dispositivo a IoT Platform.
Funciones:
Esta función permite obtener los siguientes parámetros de conexión MQTT: username, password y mqttClientId.
-
Parámetros de entrada:
Parámetro
Tipo
Descripción
productKey
String
El ProductKey del producto al que pertenece el dispositivo. Este parámetro identifica el dispositivo en IoT Platform.
deviceName
String
El DeviceName del dispositivo. Este parámetro identifica el dispositivo en IoT Platform.
deviceSecret
String
El DeviceSecret del dispositivo. Este parámetro identifica el dispositivo en IoT Platform.
clientId
String
El ClientID del dispositivo. Para identificar un dispositivo de manera eficiente, se recomienda usar la dirección MAC o el número de serie (SN) del dispositivo como ClientID.
timeStamp
String
La marca de tiempo que indica la hora actual en milisegundos. Este parámetro es opcional.
-
Parámetros de salida:
Parámetro
Tipo
Descripción
mqttUsername
String
El nombre de usuario que se utiliza para establecer la conexión MQTT.
mqttPassword
String
La contraseña que se utiliza para establecer la conexión MQTT.
mqttClientId
String
El ID del cliente MQTT.
-
Agregue un archivo de programa que permita conectar un dispositivo a IoT Platform.
Para obtener los parámetros de conexión MQTT, debe escribir un programa que llame a la función del archivo MqttSign.py.
En esta sección se proporcionan las instrucciones de desarrollo y el código de ejemplo.
-
Especifique la información del dispositivo.
# 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" -
Especifique la información de conexión MQTT.
Llame a la función
calculate_sign_timedel archivo MqttSign.py. Esta función devuelve los parámetrosmqttUsername, mqttPassword y mqttClientId a partir de los valores de los siguientes parámetros de entrada: deviceSecret, timeStamp, clientId, productKey y deviceName.En este ejemplo se establece una conexión TCP basada en Transport Layer Security (TLS). Debe descargar un certificado raíz para configurar los parámetros de conexión.
# 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)NotaSi utiliza una instancia pública de la versión anterior, reemplace cn-shanghai en
host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"por el ID de la región donde reside el dispositivo. Para obtener más información sobre los formatos de los ID de región, consulte Supported regions.-
Si utiliza una instancia pública de la nueva versión o una instancia Enterprise Edition, reemplace instanceId en
host = instanceId + ".mqtt.iothub.aliyuncs.com"por el ID de la instancia.Para obtener el endpoint MQTT, siga estos pasos: inicie sesión en la IoT Platform console. En la página Overview, haga clic en la tarjeta de la instancia que desea gestionar. El endpoint MQTT se muestra en la página Instance Details. Para obtener más información, consulte View the endpoint of an instance.
Para obtener más información sobre las instancias de IoT Platform, consulte Instance overview.
-
Llame a la función
Connect()para conectar el dispositivo a 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 -
Llame a la función Publish() para publicar mensajes. Debe especificar el tema donde se publicarán los mensajes y sus cargas útiles.
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)Para obtener más información sobre los temas, consulte What is a topic?
-
Llame a la función Subscribe() para suscribirse al tema y recibir mensajes de IoT Platform.
def subscribe_topic(): # subscribe to subTopic("/a1LhUsK****/python***/user/get") and request messages to be delivered client.subscribe(subTopic)Para obtener más información sobre los métodos de comunicación entre dispositivos, servidores e IoT Platform, consulte Overview of communication methods in IoT Platform.
-
Ejecute el proyecto.
Código de ejemplo
Ejecute el programa compilado con el código de ejemplo para conectar el dispositivo a IoT Platform.
-
Descargue el paquete que contiene el código de ejemplo desde el enlace y descomprímalo en el directorio aiot-python-demo. A continuación se describen los archivos que contiene este directorio.
Archivo de certificado
Descripción
MqttSign.py
Este archivo contiene el código que se utiliza para obtener los parámetros de conexión necesarios para conectar un dispositivo a IoT Platform mediante MQTT. Al ejecutar el archivo, se llama a la función
calculate_sign_timepara obtener los valores de los parámetros mqttUsername, mqttPassword y mqttClientId.iot.py
Este archivo contiene el código lógico que se utiliza para conectar un dispositivo a IoT Platform y habilitar la comunicación.
root.crt
El certificado raíz de IoT Platform. Este certificado es obligatorio para conectar dispositivos a IoT Platform.
-
En el archivo iot.py, reemplace la información del dispositivo por la de su propio dispositivo.
-
Reemplace los valores de los parámetros productKey, deviceName y deviceSecret por la información del certificado de su dispositivo.
# set the device info, include product key, device name, and device secret productKey = "a1LhUsK***" deviceName = "python***" deviceSecret = "bdd043d193782d11***" -
Opcional. Reemplace los valores de los parámetros timeStamp y clientId. Puede sustituir el valor del parámetro clientId por la dirección MAC o el SN de su dispositivo.
NotaSi no reemplaza los valores, aún podrá conectar el dispositivo a IoT Platform. No obstante, en escenarios reales se recomienda sustituir los valores de los parámetros por datos reales.
-
Reemplace .iot-as-mqtt.cn-shanghai.aliyuncs.com en
host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"por el endpoint MQTT real.Para obtener más información, consulte el paso 2 de la sección "Connect a device to IoT Platform" de este tema.
-
-
Ejecute el archivo iot.py.
Después de ejecutar el archivo, se generan los siguientes registros locales:
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: ABC4Inicie sesión en IoT Platform console. En la instancia puede consultar el estado y los registros del dispositivo.
En el panel de navegación izquierdo, elija . Verá que el estado del dispositivo es Online.
Elija . Aquí puede consultar los IoT Platform logs y los on-premises device logs. Para obtener más información, consulte IoT Platform logs y On-premises device logs.
Códigos de error
Si un dispositivo no logra conectarse a IoT Platform mediante MQTT, puede solucionar el problema a partir del código de error. Para obtener más información, consulte Troubleshooting.