Enviar mensagens da cloud para o dispositivo com Hub IoT (Python)
Hub IoT do Azure é um serviço totalmente gerido que ajuda a permitir comunicações bidirecionais fiáveis e seguras entre milhões de dispositivos e uma solução de back-end.
Este artigo mostra-lhe como:
Enviar mensagens da cloud para o dispositivo (C2D) a partir do back-end da solução para um único dispositivo através de Hub IoT
Receber mensagens da cloud para o dispositivo num dispositivo
Nota
As funcionalidades descritas neste artigo só estão disponíveis no escalão padrão do Hub IoT. Para obter mais informações sobre os escalões de Hub IoT básico e standard/gratuito, consulte Escolher o escalão de Hub IoT certo para a sua solução.
No final deste artigo, vai executar duas aplicações de consola Python:
SimulatedDevice.py: simula um dispositivo que se liga ao seu hub IoT e recebe mensagens da cloud para o dispositivo.
SendCloudToDeviceMessage.py: envia mensagens da cloud para o dispositivo para a aplicação de dispositivo simulado através de Hub IoT.
Para saber mais sobre as mensagens da cloud para o dispositivo, veja Enviar mensagens da cloud para o dispositivo a partir de um hub IoT.
Nota
Hub IoT tem suporte de SDK para muitas plataformas e linguagens de dispositivos (C, Java, Python e JavaScript) através dos SDKs de dispositivos IoT do Azure.
Pré-requisitos
Uma conta ativa do Azure. (Se não tiver uma conta, pode criar uma conta gratuita em apenas alguns minutos.)
Um hub IoT. Crie uma com a CLI ou a portal do Azure.
Um dispositivo registado. Registe um na portal do Azure.
Recomenda-se a versão 3.7 ou posterior do Python . Certifique-se de que utiliza a instalação de 32 ou 64 bits, conforme exigido pela sua configuração. Quando lhe for pedido durante a instalação, confirme que adiciona Python à variável de ambiente específica da sua plataforma.
Certifique-se de que a porta 8883 está aberta na firewall. O exemplo de dispositivo neste artigo utiliza o protocolo MQTT, que comunica através da porta 8883. Esta porta pode ser bloqueada em alguns ambientes de rede empresarial e educacional. Para obter mais informações e formas de contornar este problema, veja Ligar ao Hub IoT (MQTT).
Receber mensagens na aplicação de dispositivo simulado
Nesta secção, vai criar uma aplicação de consola Python para simular um dispositivo e receber mensagens da cloud para o dispositivo a partir do hub IoT.
A partir de uma linha de comandos no seu diretório de trabalho, instale o SDK do Dispositivo Hub IoT do Azure para Python:
pip install azure-iot-device
Com um editor de texto, crie um ficheiro com o nome SimulatedDevice.py.
Adicione as seguintes
import
instruções e variáveis no início do ficheiro de SimulatedDevice.py :import time from azure.iot.device import IoTHubDeviceClient RECEIVED_MESSAGES = 0
Adicione o seguinte código ao ficheiro SimulatedDevice.py . Substitua o valor do
{deviceConnectionString}
marcador de posição pela cadeia de ligação do dispositivo registado em Pré-requisitos:CONNECTION_STRING = "{deviceConnectionString}"
Defina a seguinte função que é utilizada para imprimir mensagens recebidas na consola:
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 cloud 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()
Guarde e feche o ficheiro SimulatedDevice.py.
Para obter mais informações sobre o ciclo de vida das mensagens da cloud para o dispositivo e como Hub IoT processa mensagens da cloud para o dispositivo, consulte Enviar mensagens da cloud para o dispositivo a partir de um hub IoT.
Obter a cadeia de ligação do hub IoT
Neste artigo, vai criar um serviço de back-end para enviar mensagens da cloud para o dispositivo através da sua Hub IoT. Para enviar mensagens da cloud para o dispositivo, o serviço precisa da permissão de ligação do serviço . Por predefinição, todos os Hub IoT são criados com uma política de acesso partilhado denominada serviço que concede esta permissão.
Para obter a cadeia de ligação Hub IoT para a política de serviço, siga estes passos:
Na portal do Azure, selecione Grupos de recursos. Selecione o grupo de recursos onde o hub está localizado e, em seguida, selecione o hub na lista de recursos.
No painel esquerdo do hub IoT, selecione Políticas de acesso partilhado.
Na lista de políticas, selecione a política de serviço .
Copie a cadeia de ligação Primária e guarde o valor.
Para obter mais informações sobre Hub IoT permissões e políticas de acesso partilhado, veja Controlo de acesso e permissões.
Enviar uma mensagem da cloud para o dispositivo
Nesta secção, vai criar uma aplicação de consola Python que envia mensagens da cloud para o dispositivo para a aplicação de dispositivo simulado. Precisa do ID do dispositivo e da cadeia de ligação do hub IoT.
No diretório de trabalho, abra uma linha de comandos e instale o SDK do Serviço Hub IoT do Azure para Python.
pip install azure-iot-hub
Com um editor de texto, crie um ficheiro com o nome SendCloudToDeviceMessage.py.
Adicione as seguintes
import
instruções e variáveis no início do ficheiro de 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 seguinte código ao ficheiro SendCloudToDeviceMessage.py . Substitua os valores de
{iot hub connection string}
marcador de posição e{device id}
pela cadeia de ligação do hub IoT e o ID do dispositivo que anotou 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()
Guarde e feche SendCloudToDeviceMessage.py ficheiro.
Executar as aplicações
Agora, está pronto para executar as aplicações.
Na linha de comandos do diretório de trabalho, execute o seguinte comando para escutar mensagens da cloud para o dispositivo:
python SimulatedDevice.py
Abra uma nova linha de comandos no diretório de trabalho e execute o seguinte comando para enviar mensagens da cloud para o dispositivo:
python SendCloudToDeviceMessage.py
Repare nas mensagens recebidas pelo dispositivo.
Passos seguintes
Neste artigo, aprendeu a enviar e receber mensagens da cloud para o dispositivo.
Para saber mais sobre as mensagens da cloud para o dispositivo, veja Enviar mensagens da cloud para o dispositivo a partir de um hub IoT.
Para saber mais sobre Hub IoT formatos de mensagens, consulte Criar e ler Hub IoT mensagens.