Odesílání zpráv z cloudu do zařízení pomocí IoT Hub (Python)

Azure IoT Hub je plně spravovaná služba, která pomáhá zajistit spolehlivou a zabezpečenou obousměrnou komunikaci mezi miliony zařízení a back-endem řešení.

V tomto článku se dozvíte, jak:

  • Odesílání zpráv typu cloud-zařízení (C2D) z back-endu řešení do jednoho zařízení prostřednictvím IoT Hub

  • Příjem zpráv z cloudu do zařízení na zařízení

Poznámka

Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard IoT Hub. Další informace o úrovních IoT Hub Basic a Standard/Free najdete v tématu Volba správné IoT Hub úrovně pro vaše řešení.

Na konci tohoto článku spustíte dvě konzolové aplikace Pythonu:

  • SimulatedDevice.py: Simuluje zařízení, které se připojuje k centru IoT a přijímá zprávy z cloudu do zařízení.

  • SendCloudToDeviceMessage.py: Odesílá zprávy z cloudu do aplikace simulovaného zařízení prostřednictvím IoT Hub.

Další informace o zprávách cloud-zařízení najdete v tématu Odesílání zpráv z cloudu do zařízení ze služby IoT Hub.

Poznámka

IoT Hub podporuje sadu SDK pro mnoho platforem a jazyků zařízení (C, Java, Python a JavaScript) prostřednictvím sad SDK pro zařízení Azure IoT.

Požadavky

  • Aktivní účet Azure. (Pokud účet nemáte, můžete si bezplatný účet vytvořit za pár minut.)

  • Centrum IoT. Vytvořte ho pomocí rozhraní příkazového řádku nebo Azure Portal.

  • Zaregistrované zařízení. Zaregistrujte jednu v Azure Portal.

  • Doporučuje se Python verze 3.7 nebo novější. Ujistěte se, že používáte 32bitovou, nebo 64bitovou instalaci podle požadavků vašeho nastavení. Po zobrazení výzvy v průběhu instalace nezapomeňte přidat Python do proměnné prostředí pro konkrétní platformu.

  • Ujistěte se, že je v bráně firewall otevřený port 8883. Ukázka zařízení v tomto článku používá protokol MQTT, který komunikuje přes port 8883. Tento port může být v některých podnikových a vzdělávacích síťových prostředích blokovaný. Další informace a způsoby, jak tento problém obejít, najdete v tématu Připojení k IoT Hub (MQTT).

Příjem zpráv v aplikaci simulovaného zařízení

V této části vytvoříte konzolovou aplikaci Pythonu pro simulaci zařízení a příjem zpráv z cloudu do zařízení ze služby IoT Hub.

  1. Z příkazového řádku v pracovním adresáři nainstalujte sadu AZURE IOT HUB Device SDK pro Python:

    pip install azure-iot-device
    
  2. Pomocí textového editoru vytvořte soubor s názvem SimulatedDevice.py.

  3. Na začátek souboru SimulatedDevice.py přidejte následující import příkazy a proměnné:

    import time
    from azure.iot.device import IoTHubDeviceClient
    
    RECEIVED_MESSAGES = 0
    
  4. Do souboru SimulatedDevice.py přidejte následující kód. V části {deviceConnectionString}Požadavky nahraďte zástupnou hodnotu připojovacím řetězcem pro zaregistrované zařízení:

    CONNECTION_STRING = "{deviceConnectionString}"
    
  5. Definujte následující funkci, která se používá k tisku přijatých zpráv do konzoly:

    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. Přidejte následující kód pro inicializaci klienta a počkejte na přijetí zprávy cloud-zařízení:

    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. Přidejte následující hlavní funkci:

    if __name__ == '__main__':
        main()
    
  8. Uložte a zavřete soubor SimulatedDevice.py.

Další informace o životním cyklu zpráv cloud-zařízení a o tom, jak IoT Hub zpracovává zprávy z cloudu do zařízení, najdete v tématu Odesílání zpráv z cloudu do zařízení ze služby IoT Hub.

Získání připojovacího řetězce služby IoT Hub

V tomto článku vytvoříte back-endovou službu pro odesílání zpráv z cloudu do zařízení prostřednictvím IoT Hub. K odesílání zpráv z cloudu do zařízení potřebuje vaše služba oprávnění pro připojení služby . Ve výchozím nastavení se každá IoT Hub vytvoří se zásadou sdíleného přístupu s názvem služba, která toto oprávnění uděluje.

Chcete-li získat IoT Hub připojovací řetězec pro zásady služby, postupujte takto:

  1. V Azure Portal vyberte Skupiny prostředků. Vyberte skupinu prostředků, ve které se nachází vaše centrum, a pak vyberte centrum ze seznamu prostředků.

  2. V levém podokně centra IoT vyberte Zásady sdíleného přístupu.

  3. V seznamu zásad vyberte zásadu služby .

  4. Zkopírujte primární připojovací řetězec a hodnotu uložte.

Snímek obrazovky, který ukazuje, jak načíst připojovací řetězec z IoT Hub v Azure Portal

Další informace o IoT Hub zásady a oprávnění sdíleného přístupu najdete v tématu Řízení přístupu a oprávnění.

Odeslání zprávy z cloudu do zařízení

V této části vytvoříte konzolovou aplikaci Pythonu, která odesílá zprávy z cloudu do zařízení do aplikace simulovaného zařízení. Potřebujete ID zařízení z vašeho zařízení a připojovací řetězec služby IoT Hub.

  1. V pracovním adresáři otevřete příkazový řádek a nainstalujte sadu AZURE IOT HUB Service SDK pro Python.

    pip install azure-iot-hub
    
  2. Pomocí textového editoru vytvořte soubor s názvem SendCloudToDeviceMessage.py.

  3. Na začátek souboru SendCloudToDeviceMessage.py přidejte následující import příkazy a proměnné:

    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. Do souboru SendCloudToDeviceMessage.py přidejte následující kód. {iot hub connection string} Zástupné hodnoty a {device id} nahraďte připojovacím řetězcem služby IoT Hub a ID zařízení, které jste si poznamenali dříve:

    CONNECTION_STRING = "{IoTHubConnectionString}"
    DEVICE_ID = "{deviceId}"
    
  5. Přidejte následující kód pro odesílání zpráv do zařízení:

    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. Přidejte následující hlavní funkci:

    if __name__ == '__main__':
        print ( "Starting the Python IoT Hub C2D Messaging service sample..." )
    
        iothub_messaging_sample_run()
    
  7. Uložte a zavřete SendCloudToDeviceMessage.py soubor.

Spuštění aplikací

Teď jste připraveni spustit aplikace.

  1. Na příkazovém řádku v pracovním adresáři spusťte následující příkaz, který naslouchá zprávě cloud-zařízení:

    python SimulatedDevice.py
    

    Spuštění aplikace simulovaného zařízení

  2. Otevřete nový příkazový řádek v pracovním adresáři a spuštěním následujícího příkazu odesílejte zprávy cloud-zařízení:

    python SendCloudToDeviceMessage.py
    

    Spuštěním aplikace odešlete příkaz cloud-zařízení.

  3. Poznamenejte si zprávy přijaté zařízením.

    Přijatá zpráva

Další kroky

V tomto článku jste zjistili, jak odesílat a přijímat zprávy z cloudu do zařízení.