Skicka meddelanden från moln till enhet med IoT Hub (python)Send cloud-to-device messages with IoT Hub (Python)

Azure IoT Hub är en fullständigt hanterad tjänst som hjälper till att möjliggöra tillförlitlig och säker dubbelriktad kommunikation mellan miljon tals enheter och Server delen av lösningen.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. Snabb starten Skicka telemetri från en enhet till en IoT Hub visar hur du skapar en IoT-hubb, etablerar en enhets identitet i den och kodar en simulerad enhets app som skickar enhet till molnet-meddelanden.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.

Anteckning

De funktioner som beskrivs i den här artikeln är bara tillgängliga på standard-nivån för IoT Hub.The features described in this article are available only in the standard tier of IoT Hub. Mer information om nivåerna Basic och standard/Free IoT Hub finns i Välj rätt IoT Hub nivå.For more information about the basic and standard/free IoT Hub tiers, see Choose the right IoT Hub tier.

Den här självstudien bygger på Skicka telemetri från en enhet till en IoT-hubb.This tutorial builds on Send telemetry from a device to an IoT hub. Det visar hur du:It shows you how to:

  • Skicka meddelanden från moln till enhet från Server delen av lösningen till en enda enhet via IoT Hub.From your solution back end, send cloud-to-device messages to a single device through IoT Hub.

  • Ta emot meddelanden från molnet till enheten på en enhet.Receive cloud-to-device messages on a device.

Du hittar mer information om moln-till-enhet-meddelanden i guiden för IoT Hub utvecklare.You can find more information on cloud-to-device messages in the IoT Hub developer guide.

I slutet av den här självstudien kör du två python-konsol program:At the end of this tutorial, you run two Python console apps:

  • SimulatedDevice.py, en modifierad version av appen som skapats i Skicka telemetri från en enhet till en IoT-hubb, som ansluter till din IoT-hubb och tar emot meddelanden från molnet till enheten.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, som skickar meddelanden från moln till enhet till den simulerade Device-appen via IoT Hub.SendCloudToDeviceMessage.py, which sends cloud-to-device messages to the simulated device app through IoT Hub.

Anteckning

IoT Hub har SDK-stöd för många enhets plattformar och språk (inklusive C, Java, Java Script och python) via SDK: er för Azure IoT-enheter.IoT Hub has SDK support for many device platforms and languages (including C, Java, Javascript, and Python) through Azure IoT device SDKs. Instruktioner för hur du använder python för att ansluta enheten till den här själv studie kursen och i allmänhet till Azure IoT Hub finns i Azure IoT python SDK.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.

FörutsättningarPrerequisites

  • Kontrol lera att port 8883 är öppen i brand väggen.Make sure that port 8883 is open in your firewall. Enhets exemplet i den här artikeln använder MQTT-protokoll, som kommunicerar via port 8883.The device sample in this article uses MQTT protocol, which communicates over port 8883. Den här porten kan blockeras i vissa företags-och miljö nätverks miljöer.This port may be blocked in some corporate and educational network environments. Mer information och sätt att kringgå det här problemet finns i ansluta till IoT Hub (MQTT).For more information and ways to work around this issue, see Connecting to IoT Hub (MQTT).

Ta emot meddelanden i den simulerade Device-appenReceive messages in the simulated device app

I det här avsnittet skapar du en python-konsol-app för att simulera enheten och ta emot meddelanden från molnet till enheten från IoT Hub.In this section, you create a Python console app to simulate the device and receive cloud-to-device messages from the IoT hub.

  1. Installera Azure IoT Hub Device SDK för python från en kommando tolk i arbets katalogen:From a command prompt in your working directory, install the Azure IoT Hub Device SDK for Python:

    pip install azure-iot-device
    
  2. Skapa en fil med namnet SimulatedDevice.py med hjälp av en text redigerare.Using a text editor, create a file named SimulatedDevice.py.

  3. Lägg till följande- import instruktioner och variabler i början av SimulatedDevice.py -filen: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. Lägg till följande kod i SimulatedDevice.py -filen.Add the following code to SimulatedDevice.py file. Ersätt {deviceConnectionString} placeholder-värdet med enhets anslutnings strängen för den enhet som du skapade i Skicka telemetri från en enhet till en IoT Hub -snabb start: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. Lägg till följande funktion för att skriva ut mottagna meddelanden till-konsolen: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. Lägg till följande kod för att initiera klienten och vänta på att ta emot meddelanden från molnet till enheten: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. Lägg till följande huvud funktion: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. Spara och stäng filen SimulatedDevice.py.Save and close the SimulatedDevice.py file.

Hämta anslutnings strängen för IoT HubGet the IoT hub connection string

I den här artikeln skapar du en backend-tjänst för att skicka meddelanden från molnet till enheten via IoT-hubben som du skapade i Skicka telemetri från en enhet till en IoT-hubb.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. För att skicka meddelanden från molnet till enheten måste tjänsten ha behörighet för tjänst anslutning .To send cloud-to-device messages, your service needs the service connect permission. Som standard skapas varje IoT Hub med en delad åtkomst princip med namnet tjänst som ger den här behörigheten.By default, every IoT Hub is created with a shared access policy named service that grants this permission.

Följ dessa steg om du vill hämta IoT Hub anslutnings sträng för tjänst principen:To get the IoT Hub connection string for the service policy, follow these steps:

  1. I Azure Portalväljer du resurs grupper.In the Azure portal, select Resource groups. Välj den resurs grupp där navet finns och välj sedan hubben i listan över resurser.Select the resource group where your hub is located, and then select your hub from the list of resources.

  2. I den vänstra rutan i IoT Hub väljer du principer för delad åtkomst.On the left-side pane of your IoT hub, select Shared access policies.

  3. Välj tjänst princip i listan över principer.From the list of policies, select the service policy.

  4. Under delade åtkomst nycklar väljer du kopierings ikonen för anslutnings strängen – primär nyckel och spara värdet.Under Shared access keys, select the copy icon for the Connection string -- primary key and save the value.

    Visa hur anslutningssträngen hämtas

Mer information om IoT Hub principer för delad åtkomst och behörigheter finns i åtkomst kontroll och behörigheter.For more information about IoT Hub shared access policies and permissions, see Access control and permissions.

Skicka ett meddelande från moln till enhetSend a cloud-to-device message

I det här avsnittet skapar du en python-konsol-app som skickar meddelanden från molnet till enheten till den simulerade Device-appen.In this section, you create a Python console app that sends cloud-to-device messages to the simulated device app. Du behöver enhets-ID för enheten som du har lagt till i Skicka telemetri från en enhet till en IoT Hub -snabb start.You need the device ID of the device you added in the Send telemetry from a device to an IoT hub quickstart. Du behöver också den IoT Hub-anslutningssträng som du kopierade tidigare i Hämta IoT Hub-anslutningssträngen.You also need the IoT hub connection string you copied previously in Get the IoT hub connection string.

  1. Öppna en kommando tolk i arbets katalogen och installera Azure IoT Hub service SDK för 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. Skapa en fil med namnet SendCloudToDeviceMessage.py med hjälp av en text redigerare.Using a text editor, create a file named SendCloudToDeviceMessage.py.

  3. Lägg till följande- import instruktioner och variabler i början av SendCloudToDeviceMessage.py -filen: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. Lägg till följande kod i SendCloudToDeviceMessage.py -filen.Add the following code to SendCloudToDeviceMessage.py file. Ersätt {iot hub connection string} värdena och {device id} plats hållarna med IoT Hub-anslutningssträngen och enhets-ID: t som du antecknade tidigare: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. Lägg till följande kod för att skicka meddelanden till enheten: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. Lägg till följande huvud funktion:Add the following main function:

    if __name__ == '__main__':
        print ( "Starting the Python IoT Hub C2D Messaging service sample..." )
    
        iothub_messaging_sample_run()
    
  7. Spara och Stäng SendCloudToDeviceMessage.py -filen.Save and close SendCloudToDeviceMessage.py file.

Köra programmenRun the applications

Nu är det dags att köra programmen.You are now ready to run the applications.

  1. Kör följande kommando i kommando tolken i arbets katalogen för att lyssna efter meddelanden från molnet till enheten:At the command prompt in your working directory, run the following command to listen for cloud-to-device messages:

    python SimulatedDevice.py
    

    Kör den simulerade Device-appen

  2. Öppna en ny kommando tolk i arbets katalogen och kör följande kommando för att skicka meddelanden från molnet till enheten:Open a new command prompt in your working directory and run the following command to send cloud-to-device messages:

    python SendCloudToDeviceMessage.py
    

    Kör appen för att skicka kommandot från molnet till enheten

  3. Anteckna vilka meddelanden som tas emot av enheten.Note the messages received by the device.

    Meddelande mottaget

Nästa stegNext steps

I den här självstudien har du lärt dig hur du skickar och tar emot meddelanden från molnet till enheten.In this tutorial, you learned how to send and receive cloud-to-device messages.

Exempel på kompletta lösningar från slut punkt till slut punkt som använder IoT Hub finns i Azure IoT Remote Monitoring Solution Accelerator.To see examples of complete end-to-end solutions that use IoT Hub, see Azure IoT Remote Monitoring solution accelerator.

Mer information om hur du utvecklar lösningar med IoT Hub finns i IoT Hub Developer Guide.To learn more about developing solutions with IoT Hub, see the IoT Hub developer guide.