Cloud-naar-apparaat-berichten verzenden met IoT Hub (Python)

Azure IoT Hub is een volledig beheerde service die betrouwbare en veilige bidirectionele communicatie tussen miljoenen apparaten en een back-end van een oplossing mogelijk maakt.

In dit artikel leest u informatie over:

  • Cloud-naar-apparaat-berichten (C2D) verzenden vanaf de back-end van uw oplossing naar één apparaat via IoT Hub

  • Cloud-naar-apparaat-berichten ontvangen op een apparaat

Notitie

De functies die in dit artikel worden beschreven, zijn alleen beschikbaar in de standaardlaag van de IoT Hub. Zie Choose the right IoT Hub tier for your solution (De juiste IoT Hub laag voor uw oplossing kiezen) voor meer informatie over de lagen Basic en Standard/free IoT Hub.

Aan het einde van dit artikel voert u twee Python-console-apps uit:

  • SimulatedDevice.py: simuleert een apparaat dat verbinding maakt met uw IoT-hub en cloud-naar-apparaat-berichten ontvangt.

  • SendCloudToDeviceMessage.py: verzendt cloud-naar-apparaat-berichten naar de gesimuleerde apparaat-app via IoT Hub.

Zie Cloud-naar-apparaat-berichten verzenden vanuit een IoT-hub voor meer informatie over cloud-naar-apparaat-berichten.

Notitie

IoT Hub biedt SDK-ondersteuning voor veel apparaatplatforms en -talen (C, Java, Python en JavaScript) via de Azure IoT-apparaat-SDK's.

Vereisten

  • Een actief Azure-account. (Als u geen account hebt, kunt u binnen een paar minuten een gratis account maken.)

  • Een IoT-hub. Maak er een met de CLI of de Azure Portal.

  • Een geregistreerd apparaat. Registreer er een in de Azure Portal.

  • Python versie 3.7 of hoger wordt aanbevolen. Zorg ervoor dat u de 32-bits of 64-bits installatie gebruikt, zoals vereist door uw configuratie. Zorg ervoor dat u Python toevoegt aan uw platformspecifieke omgevingsvariabele als u hierom wordt gevraagd tijdens de installatie.

  • Zorg ervoor dat de poort 8883 is geopend in de firewall. Het apparaatvoorbeeld in dit artikel maakt gebruik van het MQTT-protocol, dat communiceert via poort 8883. Deze poort is in sommige netwerkomgevingen van bedrijven en onderwijsinstellingen mogelijk geblokkeerd. Zie Verbinding maken met IoT Hub (MQTT) voor meer informatie en manieren om dit probleem te omzeilen.

Berichten ontvangen in de gesimuleerde apparaat-app

In deze sectie maakt u een Python-console-app om een apparaat te simuleren en cloud-naar-apparaat-berichten van de IoT-hub te ontvangen.

  1. Installeer de Azure IoT Hub Device SDK voor Python vanaf een opdrachtprompt in uw werkmap:

    pip install azure-iot-device
    
  2. Maak met een teksteditor een bestand met de naam SimulatedDevice.py.

  3. Voeg de volgende import instructies en variabelen toe aan het begin van het SimulatedDevice.py-bestand :

    import time
    from azure.iot.device import IoTHubDeviceClient
    
    RECEIVED_MESSAGES = 0
    
  4. Voeg de volgende code toe aan SimulatedDevice.py bestand. Vervang de waarde van de {deviceConnectionString} tijdelijke aanduiding door de connection string voor het geregistreerde apparaat in Vereisten:

    CONNECTION_STRING = "{deviceConnectionString}"
    
  5. Definieer de volgende functie die wordt gebruikt om ontvangen berichten naar de console af te drukken:

    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. Voeg de volgende code toe om de client te initialiseren en wacht totdat het cloud-naar-apparaat-bericht wordt ontvangen:

    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. Voeg de volgende hoofdfunctie toe:

    if __name__ == '__main__':
        main()
    
  8. Sla het bestand SimulatedDevice.py op en sluit het.

Zie Cloud-naar-apparaat-berichten verzenden vanuit een IoT-hub voor meer informatie over de levenscyclus van cloud-naar-apparaat-berichten en hoe IoT Hub cloud-naar-apparaat-berichten verwerkt.

De IoT Hub-connection string ophalen

In dit artikel maakt u een back-endservice voor het verzenden van cloud-naar-apparaat-berichten via uw IoT Hub. Als u cloud-naar-apparaat-berichten wilt verzenden, heeft uw service de machtiging serviceverbinding nodig. Standaard wordt elke IoT Hub gemaakt met een gedeeld toegangsbeleid met de naam service die deze machtiging verleent.

Volg deze stappen om de IoT Hub connection string voor het servicebeleid op te halen:

  1. Selecteer Resourcegroepenin de Azure Portal. Selecteer de resourcegroep waar uw hub zich bevindt en selecteer vervolgens uw hub in de lijst met resources.

  2. Selecteer in het linkerdeelvenster van uw IoT-hub beleid voor gedeelde toegang.

  3. Selecteer het servicebeleid in de lijst met beleidsregels.

  4. Kopieer de Primaire connection string en sla de waarde op.

Schermopname van het ophalen van de connection string van uw IoT Hub in de Azure Portal.

Zie Toegangsbeheer en machtigingen voor meer informatie over IoT Hub gedeelde toegangsbeleid en -machtigingen.

Een cloud-naar-apparaat-bericht verzenden

In deze sectie maakt u een Python-console-app waarmee cloud-naar-apparaat-berichten worden verzonden naar de gesimuleerde apparaat-app. U hebt de apparaat-id van uw apparaat en uw IoT Hub connection string nodig.

  1. Open een opdrachtprompt in uw werkmap en installeer de Azure IoT Hub Service SDK voor Python.

    pip install azure-iot-hub
    
  2. Maak met een teksteditor een bestand met de naam SendCloudToDeviceMessage.py.

  3. Voeg de volgende import instructies en variabelen toe aan het begin van het SendCloudToDeviceMessage.py-bestand :

    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. Voeg de volgende code toe aan SendCloudToDeviceMessage.py bestand. Vervang de {iot hub connection string} tijdelijke aanduidingen en {device id} door de IoT Hub-connection string en apparaat-id die u eerder hebt genoteerd:

    CONNECTION_STRING = "{IoTHubConnectionString}"
    DEVICE_ID = "{deviceId}"
    
  5. Voeg de volgende code toe om berichten naar uw apparaat te verzenden:

    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. Voeg de volgende hoofdfunctie toe:

    if __name__ == '__main__':
        print ( "Starting the Python IoT Hub C2D Messaging service sample..." )
    
        iothub_messaging_sample_run()
    
  7. Sla SendCloudToDeviceMessage.py bestand op en sluit het.

De toepassingen uitvoeren

U bent nu klaar om de toepassingen uit te voeren.

  1. Voer bij de opdrachtprompt in uw werkmap de volgende opdracht uit om te luisteren naar cloud-naar-apparaat-berichten:

    python SimulatedDevice.py
    

    De app voor een gesimuleerd apparaat uitvoeren

  2. Open een nieuwe opdrachtprompt in uw werkmap en voer de volgende opdracht uit om cloud-naar-apparaat-berichten te verzenden:

    python SendCloudToDeviceMessage.py
    

    De app uitvoeren om de cloud-naar-apparaat-opdracht te verzenden

  3. Noteer de berichten die door het apparaat zijn ontvangen.

    Bericht ontvangen

Volgende stappen

In dit artikel hebt u geleerd hoe u cloud-naar-apparaat-berichten verzendt en ontvangt.