Enviar mensagens da nuvem para dispositivo com o Hub IoT (Python)
O Hub IoT do Azure é um serviço totalmente gerenciado que ajuda a permitir comunicações bidirecionais confiáveis e seguras entre milhões de dispositivos e um back-end de solução.
Este artigo mostra como:
Enviar mensagens de nuvem para dispositivo (CD2), do back-end da solução para um único dispositivo, por meio do Hub IoT
Receber mensagens da nuvem para dispositivo em um dispositivo
Observação
Os recursos descritos neste artigo estão disponíveis apenas na camada padrão do Hub IoT. Para obter mais informações sobre as camadas básica e padrão/gratuita do Hub IoT, confira Escolher a camada certa do Hub IoT para sua solução.
No fim deste artigo, você executará dois aplicativos de console Python:
SimulatedDevice.py: simula um dispositivo que se conecta ao hub IoT e recebe mensagens de nuvem para dispositivo.
SendCloudToDeviceMessage.py: envia uma mensagem da nuvem para dispositivo ao aplicativo de dispositivo simulado por meio do Hub IoT.
Para saber mais sobre mensagens da nuvem para o dispositivo, confira Enviar mensagens da nuvem para o dispositivo de um Hub IoT.
Observação
O Hub IoT tem suporte a SDK para várias plataformas de dispositivo e linguagens (C, Java, Python e JavaScript) por meio dos SDKs do dispositivo IoT do Azure.
Pré-requisitos
Uma conta ativa do Azure. (Se você não tiver uma conta, poderá criar uma conta gratuita em apenas alguns minutos.)
Um hub IoT. Crie um com a CLI ou o portal do Azure.
Um dispositivo registrado. Registre um no portal do Azure.
O Python versão 3.7 ou posterior é recomendado. Certifique-se de usar a instalação de 32 bits ou 64 bits conforme exigido pelo seu programa de instalação. Quando solicitado durante a instalação, certifique-se de adicionar Python à variável de ambiente específica da plataforma.
Verifique se a porta 8883 está aberta no firewall. O exemplo de dispositivo deste artigo usa o protocolo MQTT, que se comunica pela porta 8883. Essa porta poderá ser bloqueada em alguns ambientes de rede corporativos e educacionais. Para obter mais informações e maneiras de resolver esse problema, confira Como se conectar ao Hub IoT (MQTT).
Receber mensagens no aplicativo do dispositivo simulado
Nesta seção, você cria um aplicativo de console do Python para simular um dispositivo e receber mensagens da nuvem para dispositivo do hub IoT.
De um prompt de comando em seu diretório de trabalho, instale o SDK de Dispositivo do Hub IoT do Azure para Python:
pip install azure-iot-device
Usando um editor de texto, crie um arquivo nomeado SimulatedDevice.py.
Adicione as seguintes instruções
import
e variáveis ao início do arquivo SimulatedDevice.py:import time from azure.iot.device import IoTHubDeviceClient RECEIVED_MESSAGES = 0
Adicione o código a seguir ao arquivo SimulatedDevice.py. Substitua o valor do espaço reservado
{deviceConnectionString}
pela cadeia de conexão do dispositivo registrado em Pré-requisitos:CONNECTION_STRING = "{deviceConnectionString}"
Defina a função a seguir que é usada para imprimir mensagens recebidas no console:
def message_handler(message): global RECEIVED_MESSAGES RECEIVED_MESSAGES += 1 print("") print("Message received:") # print data from both system and application (custom) properties for property in vars(message).items(): print (" {}".format(property)) print("Total calls received: {}".format(RECEIVED_MESSAGES))
Adicione o seguinte código para inicializar o cliente e aguarde para receber a mensagem da nuvem para o dispositivo:
def main(): print ("Starting the Python IoT Hub C2D Messaging device sample...") # Instantiate the client client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING) print ("Waiting for C2D messages, press Ctrl-C to exit") try: # Attach the handler to the client client.on_message_received = message_handler while True: time.sleep(1000) except KeyboardInterrupt: print("IoT Hub C2D Messaging device sample stopped") finally: # Graceful exit print("Shutting down IoT Hub Client") client.shutdown()
Adicione a seguinte função principal:
if __name__ == '__main__': main()
Salve e feche o arquivo SimulatedDevice.py.
Para obter mais informações sobre o ciclo de vida de mensagem da nuvem para dispositivo e como o Hub IoT processa mensagens de nuvem para dispositivo, confira Enviar mensagens de nuvem para dispositivo por meio de um Hub IoT.
Obter a cadeia de conexão do hub IoT
Neste artigo, você criará um serviço de back-end para enviar mensagens de nuvem para dispositivo por meio do seu Hub IoT. Para enviar mensagens de nuvem para dispositivo, o serviço precisa da permissão conexão de serviço. Por padrão, todo Hub IoT é criado com uma política de acesso compartilhado chamada serviço que concede essa permissão.
Para obter a cadeia de conexão do Hub IoT para a política de serviço, siga estas etapas:
No portal do Azure, selecione Grupos de recursos. Selecione o grupo de recursos em que o Hub está localizado e, em seguida, selecione o seu hub na lista de recursos.
No painel do lado esquerdo do hub IoT, selecione Políticas de acesso compartilhado.
Na lista de políticas, selecione a política de serviço.
Copie a Cadeia de conexão primária e salve o valor.
Para obter mais informações sobre permissões e políticas de acesso compartilhado do Hub IoT, consulte Controle de acesso e permissões.
Envie uma mensagem da nuvem para o dispositivo
Nesta seção, você cria um aplicativo do console do Python que envia mensagens da nuvem para dispositivo ao aplicativo de dispositivo simulado. Você precisa da ID do dispositivo e da cadeia de conexão do hub IoT.
Em seu diretório de trabalho, abra um prompt de comando e instale o SDK de Serviço do Hub IoT para Python.
pip install azure-iot-hub
Usando um editor de texto, crie um arquivo nomeado SendCloudToDeviceMessage.py.
Adicione as seguintes instruções
import
e variáveis ao início do arquivo SendCloudToDeviceMessage.py:import random import sys from azure.iot.hub import IoTHubRegistryManager MESSAGE_COUNT = 2 AVG_WIND_SPEED = 10.0 MSG_TXT = "{\"service client sent a message\": %.2f}"
Adicione o código a seguir ao arquivo SendCloudToDeviceMessage.py. Substitua os valores de espaço reservado
{iot hub connection string}
e{device id}
pela cadeia de conexão do hub IoT e pela ID do dispositivo anotadas anteriormente:CONNECTION_STRING = "{IoTHubConnectionString}" DEVICE_ID = "{deviceId}"
Adicione o seguinte código para enviar mensagens para o seu dispositivo:
def iothub_messaging_sample_run(): try: # Create IoTHubRegistryManager registry_manager = IoTHubRegistryManager(CONNECTION_STRING) for i in range(0, MESSAGE_COUNT): print ( 'Sending message: {0}'.format(i) ) data = MSG_TXT % (AVG_WIND_SPEED + (random.random() * 4 + 2)) props={} # optional: assign system properties props.update(messageId = "message_%d" % i) props.update(correlationId = "correlation_%d" % i) props.update(contentType = "application/json") # optional: assign application properties prop_text = "PropMsg_%d" % i props.update(testProperty = prop_text) registry_manager.send_c2d_message(DEVICE_ID, data, properties=props) try: # Try Python 2.xx first raw_input("Press Enter to continue...\n") except: pass # Use Python 3.xx in the case of exception input("Press Enter to continue...\n") except Exception as ex: print ( "Unexpected error {0}" % ex ) return except KeyboardInterrupt: print ( "IoT Hub C2D Messaging service sample stopped" )
Adicione a seguinte função principal:
if __name__ == '__main__': print ( "Starting the Python IoT Hub C2D Messaging service sample..." ) iothub_messaging_sample_run()
Salve e feche o arquivo SendCloudToDeviceMessage.py.
Executar os aplicativos
Tudo pronto para executar os aplicativos.
No prompt de comando no diretório de trabalho, execute o seguinte comando para escutar mensagens da nuvem para dispositivo:
python SimulatedDevice.py
Abra um novo prompt de comando no diretório de trabalho e execute o seguinte comando para enviar mensagens da nuvem para dispositivo:
python SendCloudToDeviceMessage.py
Observe as mensagens recebidas pelo dispositivo.
Próximas etapas
Neste artigo, você aprendeu a enviar e receber mensagens de nuvem para dispositivo.
Para saber mais sobre mensagens da nuvem para o dispositivo, confira Enviar mensagens da nuvem para o dispositivo de um Hub IoT.
Para saber mais sobre o formato de mensagem do Hub IoT, confira Criar e ler mensagens do Hub IoT.