Este tópico descreve como usar a biblioteca Paho MQTT para Python para conectar um dispositivo ao IoT Platform e ativar o envio de mensagens.
Pré-requisitos
No IoT Platform console , para a instância correspondente, crie um produto e um dispositivo e obtenha o nome de domínio de acesso MQTT e as informações do certificado do dispositivo (ProductKey, DeviceName e DeviceSecret). Para mais informações, consulte:
Preparar o ambiente de desenvolvimento
Recomendamos o uso do Python 3.6.
-
Linux
Execute os comandos a seguir para instalar o Python:
ImportanteNeste tópico, todas as operações usam permissões de usuário comum. Caso precise executar operações específicas que exijam permissões de administrador, use o 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 um dos pacotes a seguir, conforme o seu sistema operacional:
32 bits: python-3.6.7.exe
64 bits: python-3.6.7-amd64.exe
-
macOS
Baixe o pacote python-3.6.7-macosx10.9.pkg.
Baixe a biblioteca Paho MQTT para Python
Para mais detalhes sobre o projeto Paho e as linguagens de programação compatíveis, consulte Eclipse Paho Downloads.
Execute o comando a seguir para instalar a biblioteca Paho MQTT para Python. Para mais informações, consulte Paho-MQTT.
pip install paho-mqtt==1.6.1
Esta demonstração não oferece suporte à biblioteca Paho MQTT versão 2.0.0.
Conectar um dispositivo ao IoT Platform
-
O arquivo MqttSign.py define uma função para obter os parâmetros de conexão MQTT. Chame essa função para conectar seu dispositivo ao IoT Platform.
Funções:
Esta função obtém os seguintes parâmetros de conexão MQTT: username, password e mqttClientId.
-
Parâmetros de entrada:
Parâmetro
Tipo
Descrição
productKey
String
ProductKey do produto ao qual o dispositivo pertence. Identifica o dispositivo no IoT Platform.
deviceName
String
DeviceName do dispositivo. Identifica o dispositivo no IoT Platform.
deviceSecret
String
DeviceSecret do dispositivo. Identifica o dispositivo no IoT Platform.
clientId
String
ClientID do dispositivo. Para identificar o dispositivo com eficiência, use o endereço MAC ou o número de série (SN) como ClientID.
timeStamp
String
Timestamp que indica a hora atual em milissegundos. Este parâmetro é opcional.
-
Parâmetros de saída:
Parâmetro
Tipo
Descrição
mqttUsername
String
Nome de usuário usado para estabelecer a conexão MQTT.
mqttPassword
String
Senha usada para estabelecer a conexão MQTT.
mqttClientId
String
ID do cliente MQTT.
-
Adicione um arquivo de programa para conectar o dispositivo ao IoT Platform.
Para obter os parâmetros de conexão MQTT, escreva um programa que chame a função no arquivo MqttSign.py.
Esta seção apresenta as instruções de desenvolvimento e o código de exemplo.
-
Especifique as informações do 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" -
Defina as informações de conexão MQTT.
Chame a função
calculate_sign_timeno arquivo MqttSign.py. Essa função retorna os parâmetrosmqttUsername, mqttPassword e mqttClientId com base nos valores dos seguintes parâmetros de entrada: deviceSecret, timeStamp, clientId, productKey e deviceName.Neste exemplo, estabelece-se uma conexão TCP baseada em Transport Layer Security (TLS). Baixe o certificado raiz para configurar os parâmetros de conexão.
# 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)NotaCaso use uma instância pública da versão antiga, substitua cn-shanghai em
host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"pelo ID da região onde o dispositivo está localizado. Para mais informações sobre os formatos de IDs de região, consulte Regiões suportadas.-
Se você usar uma instância pública da nova versão ou uma instância Enterprise Edition, substitua instanceId em
host = instanceId + ".mqtt.iothub.aliyuncs.com"pelo ID da instância.Para obter o endpoint MQTT, siga estas etapas: faça login no IoT Platform console. Na página Overview, clique em no cartão da instância que deseja gerenciar. O endpoint MQTT aparece na página de detalhes da instância. Para mais informações, consulte Visualizar o endpoint de uma instância.
Para saber mais sobre as instâncias do IoT Platform, consulte Visão geral das instâncias.
-
Chame a função
Connect()para conectar o dispositivo ao 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 -
Use a função Publish() para publicar mensagens. Especifique um tópico para publicação e os payloads das mensagens.
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 mais detalhes sobre tópicos, consulte O que é um tópico?
-
Use a função Subscribe() para assinar o tópico e receber mensagens do IoT Platform.
def subscribe_topic(): # subscribe to subTopic("/a1LhUsK****/python***/user/get") and request messages to be delivered client.subscribe(subTopic)Para entender melhor os métodos de comunicação entre dispositivos, servidores e o IoT Platform, consulte Visão geral dos métodos de comunicação no IoT Platform.
-
Execute o projeto.
Código de exemplo
Execute o programa compilado com o código de exemplo para conectar o dispositivo ao IoT Platform.
-
Baixe o pacote contendo o código de exemplo neste link e extraia-o no diretório aiot-python-demo. A tabela a seguir descreve os arquivos incluídos nesse diretório.
Arquivo de certificado
Descrição
MqttSign.py
Contém o código usado para obter os parâmetros de conexão necessários para conectar um dispositivo ao IoT Platform via MQTT. Ao executar o arquivo, a função
calculate_sign_timerecupera os valores de mqttUsername, mqttPassword e mqttClientId.iot.py
Inclui a lógica de programação para conectar o dispositivo ao IoT Platform e permitir a comunicação.
root.crt
Certificado raiz do IoT Platform. Necessário para estabelecer a conexão dos dispositivos com a plataforma.
-
No arquivo iot.py, substitua as informações do dispositivo pelos seus próprios dados.
-
Altere os valores dos parâmetros productKey, deviceName e deviceSecret pelas informações do certificado do seu dispositivo.
# set the device info, include product key, device name, and device secret productKey = "a1LhUsK***" deviceName = "python***" deviceSecret = "bdd043d193782d11***" -
Opcional. Substitua os valores dos parâmetros timeStamp e clientId. É possível trocar o valor de clientId pelo endereço MAC ou SN do seu dispositivo.
NotaMesmo sem alterar esses valores, a conexão do dispositivo ao IoT Platform funcionará. Contudo, em cenários reais, recomenda-se substituir os parâmetros pelos valores efetivos.
-
Substitua .iot-as-mqtt.cn-shanghai.aliyuncs.com em
host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"pelo endpoint MQTT real.Para mais detalhes, consulte a Etapa 2 na seção "Conectar um dispositivo ao IoT Platform" deste tópico.
-
-
Execute o arquivo iot.py.
Após a execução, os seguintes logs locais serão gerados:
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: ABC4Faça login no IoT Platform console. Visualize o status e os logs do dispositivo na instância.
No painel de navegação à esquerda, escolha . O status do dispositivo aparecerá como Online.
Escolha . Nessa tela, visualize os IoT Platform logs e os on-premises device logs. Para mais informações, consulte Logs do IoT Platform e Logs locais do dispositivo.
Códigos de erro
Caso a conexão de um dispositivo ao IoT Platform via MQTT falhe, solucione o problema com base no código de erro retornado. Para mais informações, consulte Solução de problemas.