Wysyłanie komunikatów z chmury do urządzeń za pomocą IoT Hub (Python)Send cloud-to-device messages with IoT Hub (Python)

Azure IoT Hub to w pełni zarządzana usługa, która pomaga zapewnić niezawodne i niezawodną komunikację dwukierunkową między milionami urządzeń i zapleczem rozwiązania.Azure IoT Hub is a fully managed service that helps enable reliable and secure bi-directional communications between millions of devices and a solution back end. Wysyłanie danych telemetrycznych z urządzenia do centrum IoT Hub pokazuje, jak utworzyć Centrum IoT, zainicjować w nim tożsamość urządzenia i kod aplikacji symulowanego urządzenia, która wysyła komunikaty z urządzenia do chmury.The Send telemetry from a device to an IoT hub quickstart shows how to create an IoT hub, provision a device identity in it, and code a simulated device app that sends device-to-cloud messages.

Uwaga

Funkcje opisane w tym artykule są dostępne tylko w warstwie Standardowa IoT Hub.The features described in this article are available only in the standard tier of IoT Hub. Aby uzyskać więcej informacji na temat warstw Podstawowa i Standardowa/bezpłatna IoT Hub, zobacz Wybieranie odpowiedniej warstwy IoT Hub.For more information about the basic and standard/free IoT Hub tiers, see Choose the right IoT Hub tier.

Ten samouczek kompiluje na temat wysyłania danych telemetrycznych z urządzenia do centrum IoT Hub.This tutorial builds on Send telemetry from a device to an IoT hub. Pokazano, jak:It shows you how to:

  • Z zaplecza rozwiązania Wyślij komunikaty z chmury do urządzenia do jednego urządzenia za pośrednictwem IoT Hub.From your solution back end, send cloud-to-device messages to a single device through IoT Hub.

  • Odbieraj komunikaty z chmury do urządzenia na urządzeniu.Receive cloud-to-device messages on a device.

Więcej informacji na temat komunikatów z chmury do urządzeń można znaleźć w przewodniku dewelopera IoT Hub.You can find more information on cloud-to-device messages in the IoT Hub developer guide.

Na końcu tego samouczka uruchamiasz dwie aplikacje konsolowe języka Python:At the end of this tutorial, you run two Python console apps:

  • SimulatedDevice.py, zmodyfikowana wersja aplikacji utworzona w wysyłanie danych telemetrycznych z urządzenia do centrum IoT, która łączy się z Centrum IoT Hub i odbiera komunikaty z chmury do urządzenia.SimulatedDevice.py, a modified version of the app created in Send telemetry from a device to an IoT hub, which connects to your IoT hub and receives cloud-to-device messages.

  • SendCloudToDeviceMessage.py, która wysyła komunikaty z chmury do urządzenia do aplikacji symulowanego urządzenia za pomocą IoT Hub.SendCloudToDeviceMessage.py, which sends cloud-to-device messages to the simulated device app through IoT Hub.

Uwaga

IoT Hub obsługuje zestaw SDK dla wielu platform i języków urządzeń (w tym C, Java, JavaScript i Python) za pomocą zestawów SDK urządzeń usługi Azure IoT.IoT Hub has SDK support for many device platforms and languages (including C, Java, Javascript, and Python) through Azure IoT device SDKs. Aby uzyskać instrukcje dotyczące sposobu używania języka Python do łączenia urządzenia z kodem tego samouczka i ogólnie do usługi Azure IoT Hub, zobacz zestaw SDK usługi Azure IoT Python.For instructions on how to use Python to connect your device to this tutorial's code, and generally to Azure IoT Hub, see the Azure IoT Python SDK.

Wymagania wstępnePrerequisites

  • Upewnij się, że port 8883 jest otwarty w zaporze.Make sure that port 8883 is open in your firewall. W przykładzie urządzenia w tym artykule jest używany protokół MQTT, który komunikuje się przez port 8883.The device sample in this article uses MQTT protocol, which communicates over port 8883. Ten port może być blokowany w niektórych firmowych i edukacyjnych środowiskach sieciowych.This port may be blocked in some corporate and educational network environments. Aby uzyskać więcej informacji i sposobów obejścia tego problemu, zobacz nawiązywanie połączenia z IoT Hub (MQTT).For more information and ways to work around this issue, see Connecting to IoT Hub (MQTT).

Odbieraj komunikaty w aplikacji symulowanego urządzeniaReceive messages in the simulated device app

W tej sekcji utworzysz aplikację konsolową języka Python w celu symulowania urządzenia i otrzymywania komunikatów z chmury do urządzeń z Centrum IoT.In this section, you create a Python console app to simulate the device and receive cloud-to-device messages from the IoT hub.

  1. W wierszu polecenia w katalogu roboczym zainstaluj zestaw SDK usługi Azure IoT Hub Device dla języka Python:From a command prompt in your working directory, install the Azure IoT Hub Device SDK for Python:

    pip install azure-iot-device
    
  2. Za pomocą edytora tekstów Utwórz plik o nazwie SimulatedDevice.py.Using a text editor, create a file named SimulatedDevice.py.

  3. Dodaj następujące import instrukcje i zmienne na początku pliku SimulatedDevice.py :Add the following import statements and variables at the start of the SimulatedDevice.py file:

    import threading
    import time
    from azure.iot.device import IoTHubDeviceClient
    
    RECEIVED_MESSAGES = 0
    
  4. Dodaj następujący kod do pliku SimulatedDevice.py .Add the following code to SimulatedDevice.py file. Zastąp {deviceConnectionString} wartość symbolu zastępczego parametrami połączenia urządzenia dla urządzenia utworzonego w obszarze wysyłanie danych telemetrycznych z urządzenia do centrum IoT Hub :Replace the {deviceConnectionString} placeholder value with the device connection string for the device you created in the Send telemetry from a device to an IoT hub quickstart:

    CONNECTION_STRING = "{deviceConnectionString}"
    
  5. Dodaj następującą funkcję, aby wydrukować odebrane komunikaty do konsoli:Add the following function to print received messages to the console:

    def message_listener(client):
        global RECEIVED_MESSAGES
        while True:
            message = client.receive_message()
            RECEIVED_MESSAGES += 1
            print("\nMessage received:")
    
            #print data and both system and application (custom) properties
            for property in vars(message).items():
                print ("    {0}".format(property))
    
            print( "Total calls received: {}".format(RECEIVED_MESSAGES))
            print()
    
  6. Dodaj następujący kod, aby zainicjować klienta i poczekać na odebranie komunikatu z chmury do urządzenia:Add the following code to initialize the client and wait to receive the cloud-to-device message:

    def iothub_client_sample_run():
        try:
            client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
    
            message_listener_thread = threading.Thread(target=message_listener, args=(client,))
            message_listener_thread.daemon = True
            message_listener_thread.start()
    
            while True:
                time.sleep(1000)
    
        except KeyboardInterrupt:
            print ( "IoT Hub C2D Messaging device sample stopped" )
    
  7. Dodaj następującą funkcję główną:Add the following main function:

    if __name__ == '__main__':
        print ( "Starting the Python IoT Hub C2D Messaging device sample..." )
        print ( "Waiting for C2D messages, press Ctrl-C to exit" )
    
        iothub_client_sample_run()
    
  8. Zapisz i zamknij plik SimulatedDevice.py.Save and close the SimulatedDevice.py file.

Pobierz parametry połączenia usługi IoT HubGet the IoT hub connection string

W tym artykule opisano tworzenie usługi zaplecza do wysyłania komunikatów z chmury do urządzenia za pośrednictwem Centrum IoT utworzonego w artykule wysyłanie danych telemetrycznych z urządzenia do centrum IoT Hub.In this article, you create a backend service to send cloud-to-device messages through the IoT hub you created in Send telemetry from a device to an IoT hub. Aby można było wysyłać komunikaty z chmury do urządzenia, usługa wymaga uprawnień do połączenia z usługą .To send cloud-to-device messages, your service needs the service connect permission. Domyślnie każdy IoT Hub jest tworzony przy użyciu zasad dostępu współdzielonego o nazwie Usługa , która przyznaje to uprawnienie.By default, every IoT Hub is created with a shared access policy named service that grants this permission.

Aby uzyskać IoT Hub parametrów połączenia dla zasad usługi, wykonaj następujące kroki:To get the IoT Hub connection string for the service policy, follow these steps:

  1. W Azure Portalwybierz pozycję Grupy zasobów.In the Azure portal, select Resource groups. Wybierz grupę zasobów, w której znajduje się centrum, a następnie wybierz centrum z listy zasobów.Select the resource group where your hub is located, and then select your hub from the list of resources.

  2. W okienku po lewej stronie centrum IoT wybierz pozycję Zasady dostępu współdzielonych.On the left-side pane of your IoT hub, select Shared access policies.

  3. Z listy zasad wybierz zasady usługi.From the list of policies, select the service policy.

  4. W obszarze Klucze dostępu współdzielonych wybierz ikonę kopiowania dla opcji Connection string -- primary key (Ciąg połączenia — klucz podstawowy) i zapisz wartość.Under Shared access keys, select the copy icon for the Connection string -- primary key and save the value.

    Sposób pobierania parametrów połączenia

Aby uzyskać więcej informacji na IoT Hub zasad dostępu współdzielonych i uprawnień, zobacz Kontrola dostępu i uprawnienia.For more information about IoT Hub shared access policies and permissions, see Access control and permissions.

Wysyłanie komunikatu z chmury do urządzeniaSend a cloud-to-device message

W tej sekcji utworzysz aplikację konsolową w języku Python, która wysyła komunikaty z chmury do urządzenia do aplikacji symulowanego urządzenia.In this section, you create a Python console app that sends cloud-to-device messages to the simulated device app. Potrzebujesz identyfikatora urządzenia dodanego w polu Wyślij telemetrię z urządzenia do przewodnika Szybki Start dotyczącego usługi IoT Hub.You need the device ID of the device you added in the Send telemetry from a device to an IoT hub quickstart. Potrzebne są również parametry połączenia usługi IoT Hub, które zostały wcześniej skopiowane w polu Pobierz parametry połączenia usługi IoT Hub.You also need the IoT hub connection string you copied previously in Get the IoT hub connection string.

  1. W katalogu roboczym Otwórz wiersz polecenia i zainstaluj zestaw SDK usługi Azure IoT Hub dla języka Python.In your working directory, open a command prompt and install the Azure IoT Hub Service SDK for Python.

    pip install azure-iot-hub
    
  2. Za pomocą edytora tekstów Utwórz plik o nazwie SendCloudToDeviceMessage.py.Using a text editor, create a file named SendCloudToDeviceMessage.py.

  3. Dodaj następujące import instrukcje i zmienne na początku pliku SendCloudToDeviceMessage.py :Add the following import statements and variables at the start of the SendCloudToDeviceMessage.py file:

    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 .Add the following code to SendCloudToDeviceMessage.py file. Zastąp {iot hub connection string} {device id} wartości symboli i symbolami zastępczymi parametrów połączenia usługi IoT Hub i zanotowanym wcześniej identyfikatorem urządzenia:Replace the {iot hub connection string} and {device id} placeholder values with the IoT hub connection string and device ID you noted previously:

    CONNECTION_STRING = "{IoTHubConnectionString}"
    DEVICE_ID = "{deviceId}"
    
  5. Dodaj następujący kod, aby wysyłać komunikaty do urządzenia:Add the following code to send messages to your device:

    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ą:Add the following main function:

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

Uruchamianie aplikacjiRun the applications

Teraz można uruchomić aplikacje.You are now ready to run the applications.

  1. W wierszu polecenia w katalogu roboczym Uruchom następujące polecenie, aby nasłuchiwać komunikatów z chmury do urządzenia:At the command prompt in your working directory, run the following command to listen for cloud-to-device messages:

    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:Open a new command prompt in your working directory and run the following command to send cloud-to-device messages:

    python SendCloudToDeviceMessage.py
    

    Uruchom aplikację, aby wysłać polecenie z chmury do urządzenia

  3. Zwróć uwagę na komunikaty odebrane przez urządzenie.Note the messages received by the device.

    Odebrano komunikat

Następne krokiNext steps

W ramach tego samouczka nauczysz się wysyłać i odbierać komunikaty z chmury do urządzenia.In this tutorial, you learned how to send and receive cloud-to-device messages.

Aby zapoznać się z przykładami kompletnych kompleksowych rozwiązań, które używają IoT Hub, zobacz Akcelerator rozwiązania do monitorowania zdalnego usługi Azure IoT.To see examples of complete end-to-end solutions that use IoT Hub, see Azure IoT Remote Monitoring solution accelerator.

Aby dowiedzieć się więcej na temat opracowywania rozwiązań za pomocą IoT Hub, zobacz przewodnik dewelopera IoT Hub.To learn more about developing solutions with IoT Hub, see the IoT Hub developer guide.