Share via


Felhőből eszközre irányuló üzenetek küldése IoT Hub (Python) használatával

Azure IoT Hub egy teljes körűen felügyelt szolgáltatás, amely megbízható és biztonságos kétirányú kommunikációt tesz lehetővé több millió eszköz és egy megoldás háttérrendszere között.

Ez a cikk a következőkhöz nyújt útmutatást:

  • Felhőből eszközre (C2D) irányuló üzenetek küldése a megoldás háttérrendszeréből egyetlen eszközre a IoT Hub

  • Felhőből eszközre irányuló üzenetek fogadása egy eszközön

Megjegyzés

A cikkben ismertetett funkciók csak a IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub szintekkel kapcsolatos további információkért lásd: A megoldáshoz megfelelő IoT Hub szint kiválasztása.

A cikk végén két Python-konzolalkalmazást fog futtatni:

  • SimulatedDevice.py: szimulál egy eszközt, amely csatlakozik az IoT Hubhoz, és fogadja a felhőből az eszközre irányuló üzeneteket.

  • SendCloudToDeviceMessage.py: felhőből eszközre irányuló üzeneteket küld a szimulált eszközalkalmazásnak IoT Hub keresztül.

Ha többet szeretne megtudni a felhőből az eszközre irányuló üzenetekről, olvassa el A felhőből az eszközre irányuló üzenetek küldése IoT Hubról című témakört.

Megjegyzés

IoT Hub számos eszközplatformhoz és nyelvhez (C, Java, Python és JavaScript) támogatja az SDK-t az Azure IoT eszközoldali SDK-kon keresztül.

Előfeltételek

  • Aktív Azure-fiók. (Ha nincs fiókja, létrehozhat egy ingyenes fiókot néhány perc alatt.)

  • Egy IoT Hub. Hozzon létre egyet a parancssori felülettel vagy a Azure Portal.

  • Regisztrált eszköz. Regisztráljon egyet a Azure Portal.

  • A Python 3.7-es vagy újabb verziója ajánlott. Mindenképp a rendszernek megfelelő, 32 vagy 64 bites telepítést használja. Amikor a rendszer erre kéri, mindenképp adja hozzá a Pythont a platformspecifikus környezeti változóhoz.

  • Győződjön meg arról, hogy a 8883-as port nyitva van a tűzfalon. A cikkben szereplő eszközminta MQTT protokollt használ, amely a 8883-es porton keresztül kommunikál. Ez a port bizonyos vállalati és oktatási hálózati környezetekben blokkolható. További információkért és a probléma megoldásának módjaiért lásd: Csatlakozás IoT Hub (MQTT)-hez.

Üzenetek fogadása a szimulált eszközalkalmazásban

Ebben a szakaszban egy Python-konzolalkalmazást hoz létre egy eszköz szimulálásához és az IoT Hubról a felhőből az eszközre irányuló üzenetek fogadásához.

  1. Telepítse a Azure IoT Hub Pythonhoz készült eszközoldali SDK-t egy parancssorból a munkakönyvtárból:

    pip install azure-iot-device
    
  2. Szövegszerkesztővel hozzon létre egy SimulatedDevice.py nevű fájlt.

  3. Adja hozzá a következő import utasításokat és változókat a SimulatedDevice.py fájl elején:

    import time
    from azure.iot.device import IoTHubDeviceClient
    
    RECEIVED_MESSAGES = 0
    
  4. Adja hozzá a következő kódot SimulatedDevice.py fájlhoz. Cserélje le a {deviceConnectionString} helyőrző értékét a regisztrált eszköz kapcsolati sztring az Előfeltételek területen:

    CONNECTION_STRING = "{deviceConnectionString}"
    
  5. Adja meg a következő függvényt, amely a fogadott üzenetek konzolra való nyomtatására szolgál:

    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. Adja hozzá a következő kódot az ügyfél inicializálásához, és várja meg a felhőből az eszközre üzenet fogadását:

    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. Adja hozzá a következő fő függvényt:

    if __name__ == '__main__':
        main()
    
  8. Mentse és zárja be a SimulatedDevice.py fájlt.

A felhőből az eszközre irányuló üzenetéletciklusról és arról, hogy IoT Hub hogyan dolgozza fel a felhőből az eszközre irányuló üzeneteket, olvassa el A felhőből az eszközre irányuló üzenetek küldése IoT Hubról című témakört.

Az IoT Hub kapcsolati sztring lekérése

Ebben a cikkben egy háttérszolgáltatást hoz létre, amellyel felhőből eszközre irányuló üzeneteket küldhet a IoT Hub keresztül. A felhőből az eszközre irányuló üzenetek küldéséhez a szolgáltatásnak rendelkeznie kell a szolgáltatás csatlakoztatási engedélyével. Alapértelmezés szerint minden IoT Hub egy szolgáltatás nevű megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja.

A szolgáltatásszabályzathoz tartozó IoT Hub kapcsolati sztring az alábbi lépésekkel szerezheti be:

  1. A Azure Portal válassza az Erőforráscsoportok lehetőséget. Válassza ki azt az erőforráscsoportot, ahol a központ található, majd válassza ki a központot az erőforrások listájából.

  2. Az IoT Hub bal oldali paneljén válassza a Megosztott hozzáférési szabályzatok lehetőséget.

  3. A szabályzatok listájából válassza ki a szolgáltatásházirendet.

  4. Másolja ki az Elsődleges kapcsolati sztring, és mentse az értéket.

Képernyőkép a kapcsolati sztring a Azure Portal IoT Hub való lekéréséről.

A IoT Hub megosztott hozzáférési szabályzatokkal és engedélyekkel kapcsolatos további információkért lásd: Hozzáférés-vezérlés és engedélyek.

Üzenet küldése felhőből eszközre

Ebben a szakaszban egy Python-konzolalkalmazást hoz létre, amely felhőből eszközre irányuló üzeneteket küld a szimulált eszközalkalmazásnak. Szüksége lesz az eszköz azonosítójára és az IoT Hub kapcsolati sztring.

  1. Nyisson meg egy parancssort a munkakönyvtárban, és telepítse a Pythonhoz készült Azure IoT Hub Service SDK-t.

    pip install azure-iot-hub
    
  2. Szövegszerkesztővel hozzon létre egy SendCloudToDeviceMessage.py nevű fájlt.

  3. Adja hozzá a következő import utasításokat és változókat a SendCloudToDeviceMessage.py fájl elején:

    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. Adja hozzá a következő kódot SendCloudToDeviceMessage.py fájlhoz. Cserélje le a és {device id} helyőrző {iot hub connection string} értékeket a korábban feljegyzett IoT Hub-kapcsolati sztring és eszközazonosítóra:

    CONNECTION_STRING = "{IoTHubConnectionString}"
    DEVICE_ID = "{deviceId}"
    
  5. Adja hozzá az alábbi kódot az üzenetek eszközre küldéséhez:

    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. Adja hozzá a következő fő függvényt:

    if __name__ == '__main__':
        print ( "Starting the Python IoT Hub C2D Messaging service sample..." )
    
        iothub_messaging_sample_run()
    
  7. Mentse és zárja be SendCloudToDeviceMessage.py fájlt.

Az alkalmazások futtatása

Most már készen áll az alkalmazások futtatására.

  1. Futtassa a következő parancsot a parancssorban a felhőből az eszközre irányuló üzenetek figyeléséhez:

    python SimulatedDevice.py
    

    A szimulált eszközalkalmazás futtatása

  2. Nyisson meg egy új parancssort a munkakönyvtárban, és futtassa a következő parancsot a felhőből az eszközre irányuló üzenetek küldéséhez:

    python SendCloudToDeviceMessage.py
    

    Futtassa az alkalmazást a felhőből az eszközre parancs elküldéséhez

  3. Jegyezze fel az eszköz által fogadott üzeneteket.

    Fogadott üzenet

Következő lépések

Ebben a cikkben megtanulta, hogyan küldhet és fogadhat felhőből eszközre irányuló üzeneteket.