Wysyłanie komunikatów z chmury do urządzenia przy użyciu IoT Hub (Python)
Azure IoT Hub to w pełni zarządzana usługa, która ułatwia niezawodną i bezpieczną dwukierunkową komunikację między milionami urządzeń a zapleczem rozwiązania.
W tym artykule wyjaśniono, jak:
Wysyłanie komunikatów z zaplecza rozwiązania do urządzenia w chmurze (C2D) do jednego urządzenia za pośrednictwem IoT Hub
Odbieranie komunikatów z chmury do urządzeń na urządzeniu
Uwaga
Funkcje opisane w tym artykule są dostępne tylko w warstwie Standardowa IoT Hub. Aby uzyskać więcej informacji na temat warstw podstawowych i standardowych/bezpłatnych IoT Hub, zobacz Wybieranie odpowiedniej warstwy IoT Hub dla rozwiązania.
Na końcu tego artykułu uruchomisz dwie aplikacje konsolowe języka Python:
SimulatedDevice.py: symuluje urządzenie łączące się z centrum IoT Hub i odbiera komunikaty z chmury do urządzenia.
SendCloudToDeviceMessage.py: wysyła komunikaty z chmury do urządzenia do aplikacji symulowanego urządzenia za pośrednictwem IoT Hub.
Aby dowiedzieć się więcej na temat komunikatów z chmury do urządzenia, zobacz Wysyłanie komunikatów z chmury do urządzenia z centrum IoT Hub.
Uwaga
IoT Hub ma obsługę zestawu SDK dla wielu platform urządzeń i języków (C, Java, Python i JavaScript) za pośrednictwem zestawów SDK urządzeń usługi Azure IoT.
Wymagania wstępne
Aktywne konto platformy Azure. (Jeśli nie masz konta, możesz utworzyć bezpłatne konto w ciągu zaledwie kilku minut).
Centrum IoT. Utwórz go za pomocą interfejsu wiersza polecenia lub Azure Portal.
Zarejestrowane urządzenie. Zarejestruj jeden w Azure Portal.
Zalecane jest użycie języka Python w wersji 3.7 lub nowszej. Upewnij się, że używasz 32-bitowej lub 64-bitowej instalacji zgodnie z wymaganiami konfiguracji. Po wyświetleniu monitu podczas instalacji upewnij się, że język Python został dodany do zmiennej środowiskowej specyficznej dla platformy.
Upewnij się, że port 8883 jest otwarty w zaporze. Przykład urządzenia w tym artykule używa protokołu MQTT, który komunikuje się za pośrednictwem portu 8883. Ten port może zostać zablokowany w niektórych środowiskach sieci firmowych i edukacyjnych. Aby uzyskać więcej informacji i sposobów obejścia tego problemu, zobacz Łączenie się z IoT Hub (MQTT).
Odbieranie komunikatów w aplikacji urządzenia symulowanego
W tej sekcji utworzysz aplikację konsolową języka Python, aby symulować urządzenie i odbierać komunikaty z chmury do urządzenia z centrum IoT Hub.
W wierszu polecenia w katalogu roboczym zainstaluj zestaw SDK urządzenia Azure IoT Hub dla języka Python:
pip install azure-iot-device
Za pomocą edytora tekstów utwórz plik o nazwie SimulatedDevice.py.
Dodaj następujące
import
instrukcje i zmienne na początku pliku SimulatedDevice.py :import time from azure.iot.device import IoTHubDeviceClient RECEIVED_MESSAGES = 0
Dodaj następujący kod do pliku SimulatedDevice.py .
{deviceConnectionString}
Zastąp wartość symbolu zastępczego parametrami połączenia dla zarejestrowanego urządzenia w sekcji Wymagania wstępne:CONNECTION_STRING = "{deviceConnectionString}"
Zdefiniuj następującą funkcję używaną do drukowania odebranych komunikatów w konsoli programu :
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))
Dodaj następujący kod, aby zainicjować klienta i poczekać na odebranie komunikatu cloud-to-device:
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()
Dodaj następującą funkcję główną:
if __name__ == '__main__': main()
Zapisz i zamknij plik SimulatedDevice.py.
Aby uzyskać więcej informacji na temat cyklu życia komunikatów z chmury do urządzenia i IoT Hub sposobu przetwarzania komunikatów w chmurze do urządzenia, zobacz Wysyłanie komunikatów z chmury do urządzenia z centrum IoT Hub.
Pobieranie parametrów połączenia centrum IoT Hub
W tym artykule utworzysz usługę zaplecza do wysyłania komunikatów z chmury do urządzenia za pośrednictwem IoT Hub. Aby wysyłać komunikaty z chmury do urządzenia, usługa wymaga uprawnień połączenia z usługą . Domyślnie każda IoT Hub jest tworzona z zasadami dostępu współdzielonego o nazwie usługa, która przyznaje to uprawnienie.
Aby uzyskać IoT Hub parametry połączenia dla zasad usługi, wykonaj następujące kroki:
W Azure Portal wybierz pozycję Grupy zasobów. Wybierz grupę zasobów, w której znajduje się centrum, a następnie wybierz centrum z listy zasobów.
W okienku po lewej stronie centrum IoT wybierz pozycję Zasady dostępu współdzielonego.
Z listy zasad wybierz zasady usługi .
Skopiuj podstawowe parametry połączenia i zapisz wartość.
Aby uzyskać więcej informacji na temat zasad i uprawnień dostępu współdzielonego IoT Hub, zobacz Kontrola dostępu i uprawnienia.
Wysyłanie komunikatu z chmury do urządzenia
W tej sekcji utworzysz aplikację konsolową języka Python, która wysyła komunikaty z chmury do urządzenia do aplikacji symulowanego urządzenia. Potrzebny jest identyfikator urządzenia z urządzenia i parametry połączenia centrum IoT Hub.
W katalogu roboczym otwórz wiersz polecenia i zainstaluj zestaw SDK usługi Azure IoT Hub dla języka Python.
pip install azure-iot-hub
Za pomocą edytora tekstów utwórz plik o nazwie SendCloudToDeviceMessage.py.
Dodaj następujące
import
instrukcje i zmienne na początku pliku 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}"
Dodaj następujący kod do pliku SendCloudToDeviceMessage.py .
{iot hub connection string}
Zastąp wartości symbole zastępcze i{device id}
parametrami połączenia centrum IoT Hub i identyfikatorem urządzenia zanotowanymi wcześniej:CONNECTION_STRING = "{IoTHubConnectionString}" DEVICE_ID = "{deviceId}"
Dodaj następujący kod, aby wysyłać komunikaty do urządzenia:
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" )
Dodaj następującą funkcję główną:
if __name__ == '__main__': print ( "Starting the Python IoT Hub C2D Messaging service sample..." ) iothub_messaging_sample_run()
Zapisz i zamknij plik SendCloudToDeviceMessage.py .
Uruchamianie aplikacji
Teraz możesz przystąpić do uruchamiania aplikacji.
W wierszu polecenia w katalogu roboczym uruchom następujące polecenie, aby nasłuchiwać komunikatów z chmury do urządzenia:
python SimulatedDevice.py
Otwórz nowy wiersz polecenia w katalogu roboczym i uruchom następujące polecenie, aby wysłać komunikaty z chmury do urządzenia:
python SendCloudToDeviceMessage.py
Zanotuj komunikaty odebrane przez urządzenie.
Następne kroki
W tym artykule przedstawiono sposób wysyłania i odbierania komunikatów z chmury do urządzenia.
Aby dowiedzieć się więcej na temat komunikatów z chmury do urządzenia, zobacz Wysyłanie komunikatów z chmury do urządzenia z centrum IoT Hub.
Aby dowiedzieć się więcej o formatach komunikatów IoT Hub, zobacz Tworzenie i odczytywanie komunikatów IoT Hub.