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.

  1. W wierszu polecenia w katalogu roboczym zainstaluj zestaw SDK urządzenia Azure IoT Hub dla języka Python:

    pip install azure-iot-device
    
  2. Za pomocą edytora tekstów utwórz plik o nazwie SimulatedDevice.py.

  3. 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
    
  4. 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}"
    
  5. 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))
    
  6. 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()
    
  7. Dodaj następującą funkcję główną:

    if __name__ == '__main__':
        main()
    
  8. 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:

  1. 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.

  2. W okienku po lewej stronie centrum IoT wybierz pozycję Zasady dostępu współdzielonego.

  3. Z listy zasad wybierz zasady usługi .

  4. Skopiuj podstawowe parametry połączenia i zapisz wartość.

Zrzut ekranu przedstawiający sposób pobierania parametrów połączenia z IoT Hub w Azure Portal.

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.

  1. 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
    
  2. Za pomocą edytora tekstów utwórz plik o nazwie SendCloudToDeviceMessage.py.

  3. 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}"
    
  4. 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}"
    
  5. 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" )
    
  6. Dodaj następującą funkcję główną:

    if __name__ == '__main__':
        print ( "Starting the Python IoT Hub C2D Messaging service sample..." )
    
        iothub_messaging_sample_run()
    
  7. Zapisz i zamknij plik SendCloudToDeviceMessage.py .

Uruchamianie aplikacji

Teraz możesz przystąpić do uruchamiania aplikacji.

  1. W wierszu polecenia w katalogu roboczym uruchom następujące polecenie, aby nasłuchiwać komunikatów z chmury do urządzenia:

    python SimulatedDevice.py
    

    Uruchamianie aplikacji symulowanego urządzenia

  2. 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
    

    Uruchom aplikację, aby wysłać polecenie cloud-to-device

  3. Zanotuj komunikaty odebrane przez urządzenie.

    Odebrano wiadomość

Następne kroki

W tym artykule przedstawiono sposób wysyłania i odbierania komunikatów z chmury do urządzenia.