Share via


Envoi de messages cloud-à-appareil avec IoT Hub (Python)

Azure IoT Hub est un service entièrement géré qui permet d’autoriser des communications bidirectionnelles fiables et sécurisées entre des millions d’appareils et un serveur principal de solution.

Cet article vous montre comment :

  • Envoyer des messages cloud-à-appareil (C2D) de votre back-end de solution vers un seul appareil par IoT Hub

  • Recevoir des messages cloud-à-appareil sur un appareil

Notes

Les fonctionnalités décrites dans cet article sont uniquement disponibles au niveau Standard d’IoT Hub. Pour plus d’informations sur les niveaux de base et standard/gratuit d’IoT Hub, consultez Choisir le niveau IoT Hub correspondant à votre solution.

À la fin de cet article, exécutez deux applications console Python :

  • SimulatedDevice.py: simule un appareil qui se connecte à votre hub IoT et reçoit des messages du nuage vers l'appareil.

  • SendCloudToDeviceMessage.py : envoie des messages cloud-à-appareil à l’application d’appareil simulé par le biais d’IoT Hub.

Pour en savoir plus sur les messages cloud-à-appareil, consultez Envoyer des messages cloud-à-appareil à partir d’IoT Hub.

Notes

IoT Hub offre la prise en charge de kits SDK pour plusieurs plateformes d’appareils et langages (notamment C, Java, Python et JavaScript) par le biais de kits Azure IoT device SDK.

Prérequis

  • Un compte Azure actif. (Si vous ne possédez pas de compte, vous pouvez créer un compte gratuit en quelques minutes seulement.)

  • Un IoT Hub. Créez-en un avec l’interface CLI ou le portail Azure.

  • Appareil inscrit. Inscrivez-en un dans le portail Azure.

  • Python version 3.7 ou ultérieure est recommandé. Veillez à utiliser l’installation 32 bits ou 64 bits comme requis par votre programme d’installation. Lorsque vous y êtes invité pendant l’installation, veillez à ajouter Python à votre variable d’environnement propre à la plateforme.

  • Assurez-vous que le port 8883 est ouvert dans votre pare-feu. L’exemple d’appareil décrit dans cet article utilise le protocole MQTT, qui communique via le port 8883. Ce port peut être bloqué dans certains environnements réseau professionnels et scolaires. Pour plus d'informations sur les différentes façons de contourner ce problème, consultez Se connecter à IoT Hub (MQTT).

Recevoir des messages dans l’application d’appareil simulé

Dans cette section, vous créez une application de console Python pour simuler un appareil et recevoir des messages cloud-à-appareil à partir de l’IoT Hub.

  1. À partir d’une invite de commandes dans votre répertoire de travail, installez le Kit SDK Azure IoT Hub Device pour Python :

    pip install azure-iot-device
    
  2. À l'aide d'un éditeur de texte, créez un fichier nommé SimulatedDevice.py.

  3. Ajoutez les instructions et variables import ci-dessous au début du fichier SimulatedDevice.py :

    import time
    from azure.iot.device import IoTHubDeviceClient
    
    RECEIVED_MESSAGES = 0
    
  4. Ajoutez le code suivant au fichier SimulatedDevice.py. Remplacez la valeur de l’espace {deviceConnectionString} réservé par la chaîne de connexion de l’appareil inscrit dans Prérequis :

    CONNECTION_STRING = "{deviceConnectionString}"
    
  5. Définissez la fonction suivante qui est utilisée pour imprimer les messages reçus sur la console :

    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. Ajoutez le code suivant pour initialiser le client et attendre de recevoir le message cloud-à-appareil :

    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. Ajoutez la fonction principale suivante :

    if __name__ == '__main__':
        main()
    
  8. Enregistrez et fermez le fichier SimulatedDevice.py.

Pour plus d’informations sur le cycle de vie des messages cloud-à-appareil et sur la manière dont l’IoT Hub traite les messages cloud-à-appareil, consultez Envoyer des messages cloud-à-appareil à partir d’un hub IoT.

Obtenir la chaîne de connexion du hub IoT

Dans cet article, vous allez créer un service principal pour envoyer des messages cloud-à-appareil via votre IoT Hub. Pour envoyer des messages cloud-à-appareil, votre service a besoin de l'autorisation de connexion de service. Par défaut, chaque IoT Hub est créé avec une stratégie d’accès partagé nommée service qui accorde cette autorisation.

Pour obtenir la chaîne de connexion IoT Hub pour la stratégie service, procédez comme suit :

  1. Dans le portail Azure, sélectionnez Groupes de ressources. Sélectionnez le groupe de ressources dans lequel se trouve votre hub, puis sélectionnez votre hub dans la liste des ressources.

  2. Dans le volet de gauche de votre IoT Hub, sélectionnez Stratégies d’accès partagé.

  3. Dans la liste des stratégies, sélectionnez la stratégie service.

  4. Copiez la Chaîne de connexion principale, puis enregistrez la valeur.

Capture d’écran qui montre comment récupérer la chaîne de connexion de votre IoT Hub dans le portail Azure.

Pour plus d’informations sur les autorisations et les stratégies d’accès partagé IoT Hub, consultez Contrôle d’accès et autorisations.

Envoi d’un message cloud vers appareil

Dans cette section, vous créez une application de console Python qui envoie des messages cloud-à-appareil à l’application de l’appareil simulé. Vous avez besoin de l’ID d’appareil de votre appareil et de votre chaîne de connexion IoT Hub.

  1. Dans votre répertoire de travail, ouvrez une invite de commandes et installez le Kit de développement logiciel (SDK) Azure IoT Hub Service pour Python.

    pip install azure-iot-hub
    
  2. À l'aide d'un éditeur de texte, créez un fichier nommé SendCloudToDeviceMessage.py.

  3. Ajoutez les instructions et variables import ci-dessous au début du fichier 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. Ajoutez le code suivant au fichier SendCloudToDeviceMessage.py. Remplacez les valeurs d'espace réservé {iot hub connection string} et {device id} par la chaîne de connexion du hub IoT et l'identité d'appareil que vous avez notées précédemment :

    CONNECTION_STRING = "{IoTHubConnectionString}"
    DEVICE_ID = "{deviceId}"
    
  5. Ajoutez le code suivant pour envoyer des messages à votre appareil :

    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. Ajoutez la fonction principale suivante :

    if __name__ == '__main__':
        print ( "Starting the Python IoT Hub C2D Messaging service sample..." )
    
        iothub_messaging_sample_run()
    
  7. Enregistrez et fermez le fichier SendCloudToDeviceMessage.py.

Exécution des applications

Vous êtes maintenant prêt à exécuter les applications.

  1. À l'invite de commandes de votre répertoire de travail, exécutez la commande suivante pour écouter les messages cloud-à-appareil :

    python SimulatedDevice.py
    

    Exécution de l’application de périphérique simulé

  2. Ouvrez une nouvelle invite de commandes dans votre répertoire de travail et exécutez la commande suivante pour envoyer des messages cloud-à-appareil :

    python SendCloudToDeviceMessage.py
    

    Exécutez l’application pour envoyer la commande cloud-à-appareil

  3. Notez les messages reçus par l'appareil.

    Message reçu

Étapes suivantes

Dans cet article, vous avez appris à envoyer et recevoir des messages de cloud-à-appareil.