Odesílání zpráv z cloudu do zařízení pomocí IoT Hub (Python)
Azure IoT Hub je plně spravovaná služba, která pomáhá zajistit spolehlivou a zabezpečenou obousměrnou komunikaci mezi miliony zařízení a back-endem řešení.
V tomto článku se dozvíte, jak:
Odesílání zpráv typu cloud-zařízení (C2D) z back-endu řešení do jednoho zařízení prostřednictvím IoT Hub
Příjem zpráv z cloudu do zařízení na zařízení
Poznámka
Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard IoT Hub. Další informace o úrovních IoT Hub Basic a Standard/Free najdete v tématu Volba správné IoT Hub úrovně pro vaše řešení.
Na konci tohoto článku spustíte dvě konzolové aplikace Pythonu:
SimulatedDevice.py: Simuluje zařízení, které se připojuje k centru IoT a přijímá zprávy z cloudu do zařízení.
SendCloudToDeviceMessage.py: Odesílá zprávy z cloudu do aplikace simulovaného zařízení prostřednictvím IoT Hub.
Další informace o zprávách cloud-zařízení najdete v tématu Odesílání zpráv z cloudu do zařízení ze služby IoT Hub.
Poznámka
IoT Hub podporuje sadu SDK pro mnoho platforem a jazyků zařízení (C, Java, Python a JavaScript) prostřednictvím sad SDK pro zařízení Azure IoT.
Požadavky
Aktivní účet Azure. (Pokud účet nemáte, můžete si bezplatný účet vytvořit za pár minut.)
Centrum IoT. Vytvořte ho pomocí rozhraní příkazového řádku nebo Azure Portal.
Zaregistrované zařízení. Zaregistrujte jednu v Azure Portal.
Doporučuje se Python verze 3.7 nebo novější. Ujistěte se, že používáte 32bitovou, nebo 64bitovou instalaci podle požadavků vašeho nastavení. Po zobrazení výzvy v průběhu instalace nezapomeňte přidat Python do proměnné prostředí pro konkrétní platformu.
Ujistěte se, že je v bráně firewall otevřený port 8883. Ukázka zařízení v tomto článku používá protokol MQTT, který komunikuje přes port 8883. Tento port může být v některých podnikových a vzdělávacích síťových prostředích blokovaný. Další informace a způsoby, jak tento problém obejít, najdete v tématu Připojení k IoT Hub (MQTT).
Příjem zpráv v aplikaci simulovaného zařízení
V této části vytvoříte konzolovou aplikaci Pythonu pro simulaci zařízení a příjem zpráv z cloudu do zařízení ze služby IoT Hub.
Z příkazového řádku v pracovním adresáři nainstalujte sadu AZURE IOT HUB Device SDK pro Python:
pip install azure-iot-device
Pomocí textového editoru vytvořte soubor s názvem SimulatedDevice.py.
Na začátek souboru SimulatedDevice.py přidejte následující
import
příkazy a proměnné:import time from azure.iot.device import IoTHubDeviceClient RECEIVED_MESSAGES = 0
Do souboru SimulatedDevice.py přidejte následující kód. V části
{deviceConnectionString}
Požadavky nahraďte zástupnou hodnotu připojovacím řetězcem pro zaregistrované zařízení:CONNECTION_STRING = "{deviceConnectionString}"
Definujte následující funkci, která se používá k tisku přijatých zpráv do konzoly:
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))
Přidejte následující kód pro inicializaci klienta a počkejte na přijetí zprávy cloud-zařízení:
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()
Přidejte následující hlavní funkci:
if __name__ == '__main__': main()
Uložte a zavřete soubor SimulatedDevice.py.
Další informace o životním cyklu zpráv cloud-zařízení a o tom, jak IoT Hub zpracovává zprávy z cloudu do zařízení, najdete v tématu Odesílání zpráv z cloudu do zařízení ze služby IoT Hub.
Získání připojovacího řetězce služby IoT Hub
V tomto článku vytvoříte back-endovou službu pro odesílání zpráv z cloudu do zařízení prostřednictvím IoT Hub. K odesílání zpráv z cloudu do zařízení potřebuje vaše služba oprávnění pro připojení služby . Ve výchozím nastavení se každá IoT Hub vytvoří se zásadou sdíleného přístupu s názvem služba, která toto oprávnění uděluje.
Chcete-li získat IoT Hub připojovací řetězec pro zásady služby, postupujte takto:
V Azure Portal vyberte Skupiny prostředků. Vyberte skupinu prostředků, ve které se nachází vaše centrum, a pak vyberte centrum ze seznamu prostředků.
V levém podokně centra IoT vyberte Zásady sdíleného přístupu.
V seznamu zásad vyberte zásadu služby .
Zkopírujte primární připojovací řetězec a hodnotu uložte.
Další informace o IoT Hub zásady a oprávnění sdíleného přístupu najdete v tématu Řízení přístupu a oprávnění.
Odeslání zprávy z cloudu do zařízení
V této části vytvoříte konzolovou aplikaci Pythonu, která odesílá zprávy z cloudu do zařízení do aplikace simulovaného zařízení. Potřebujete ID zařízení z vašeho zařízení a připojovací řetězec služby IoT Hub.
V pracovním adresáři otevřete příkazový řádek a nainstalujte sadu AZURE IOT HUB Service SDK pro Python.
pip install azure-iot-hub
Pomocí textového editoru vytvořte soubor s názvem SendCloudToDeviceMessage.py.
Na začátek souboru SendCloudToDeviceMessage.py přidejte následující
import
příkazy a proměnné: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}"
Do souboru SendCloudToDeviceMessage.py přidejte následující kód.
{iot hub connection string}
Zástupné hodnoty a{device id}
nahraďte připojovacím řetězcem služby IoT Hub a ID zařízení, které jste si poznamenali dříve:CONNECTION_STRING = "{IoTHubConnectionString}" DEVICE_ID = "{deviceId}"
Přidejte následující kód pro odesílání zpráv do zařízení:
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" )
Přidejte následující hlavní funkci:
if __name__ == '__main__': print ( "Starting the Python IoT Hub C2D Messaging service sample..." ) iothub_messaging_sample_run()
Uložte a zavřete SendCloudToDeviceMessage.py soubor.
Spuštění aplikací
Teď jste připraveni spustit aplikace.
Na příkazovém řádku v pracovním adresáři spusťte následující příkaz, který naslouchá zprávě cloud-zařízení:
python SimulatedDevice.py
Otevřete nový příkazový řádek v pracovním adresáři a spuštěním následujícího příkazu odesílejte zprávy cloud-zařízení:
python SendCloudToDeviceMessage.py
Poznamenejte si zprávy přijaté zařízením.
Další kroky
V tomto článku jste zjistili, jak odesílat a přijímat zprávy z cloudu do zařízení.
Další informace o zprávách cloud-zařízení najdete v tématu Odesílání zpráv z cloudu do zařízení ze služby IoT Hub.
Další informace o IoT Hub formátech zpráv najdete v tématu Vytváření a čtení IoT Hub zpráv.