Začínáme se správou zařízení (Python)

Back-endové aplikace můžou používat primitiva služby Azure IoT Hub, jako jsou dvojčata zařízení a přímé metody, ke vzdálenému spuštění a monitorování akcí správy zařízení na zařízeních. V tomto článku se dozvíte, jak může back-endová aplikace a aplikace zařízení spolupracovat na zahájení a monitorování vzdáleného restartování zařízení pomocí IoT Hubu.

Poznámka:

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

Pomocí přímé metody iniciujte akce správy zařízení (například restartování, obnovení továrního nastavení a aktualizace firmwaru) z back-endové aplikace v cloudu. Zařízení zodpovídá za:

  • Zpracování požadavku metody odeslaného ze služby IoT Hub

  • Inicializování odpovídající akce specifické pro zařízení na zařízení

  • Poskytování aktualizací stavu prostřednictvím ohlášených vlastností do IoT Hubu

Pomocí back-endové aplikace v cloudu můžete spouštět dotazy dvojčete zařízení a hlásit průběh akcí správy zařízení.

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

  • dmpatterns_getstarted_device.py: aplikace simulovaného zařízení s přímou metodou, která zařízení restartuje a hlásí čas posledního restartování. Přímé metody se vyvolávají z cloudu.

  • dmpatterns_getstarted_service.py: konzolová aplikace Pythonu, která volá přímou metodu v aplikaci simulovaného zařízení prostřednictvím centra IoT. Zobrazí odpověď a aktualizované ohlášené vlastnosti.

Poznámka:

Další informace o nástrojích SADY SDK dostupných k sestavení zařízení i back-endových aplikací najdete v tématu Sady SDK Azure IoT.

Požadavky

  • Aktivní účet Azure (Pokud účet nemáte, můžete si během několika minut vytvořit bezplatný účet.)

  • Centrum IoT ve vašem předplatném Azure Pokud centrum ještě nemáte, můžete postupovat podle kroků v tématu Vytvoření centra IoT.

  • Zařízení zaregistrované ve službě IoT Hub. Pokud ve službě IoT Hub nemáte zařízení, postupujte podle pokynů v části Registrace zařízení.

  • 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 blokovaný v některých podnikových a vzdělávacích síťových prostředích. Další informace a způsoby řešení tohoto problému najdete v tématu Připojení ke službě IoT Hub (MQTT).

Registrace nového zařízení v IoT Hubu

V této části použijete Azure CLI k vytvoření identity zařízení pro tento článek. V ID zařízení se rozlišují malá a velká písmena.

  1. Otevřete Azure Cloud Shell.

  2. Spuštěním následujícího příkazu v Azure Cloud Shellu nainstalujte rozšíření Microsoft Azure IoT pro Azure CLI:

    az extension add --name azure-iot
    
  3. Vytvořte novou identitu zařízení volanou myDeviceId a načtěte připojovací řetězec zařízení pomocí těchto příkazů:

    az iot hub device-identity create --device-id myDeviceId --hub-name {Your IoT Hub name} --resource-group {Resource group of the Hub}
    az iot hub device-identity connection-string show --device-id myDeviceId --hub-name {Your IoT Hub name} --resource-group {Resource group of the Hub} -o table
    

    Důležité

    ID zařízení může být viditelné v protokolech shromažďovaných pro účely zákaznické podpory a řešení potíží. Proto jako název nepoužívejte citlivé údaje.

Poznamenejte si připojovací řetězec zařízení z výsledku. Toto zařízení připojovací řetězec používá aplikace zařízení k připojení k IoT Hubu jako zařízení.

Vytvoření aplikace zařízení pomocí přímé metody

V této části:

  • Vytvořte konzolovou aplikaci Pythonu, která reaguje na přímou metodu volanou cloudem.

  • Simulace restartování zařízení

  • Pomocí ohlášených vlastností povolte dotazy dvojčete zařízení k identifikaci zařízení a k jejich poslednímu restartování.

Důležité

Tento článek obsahuje postup připojení zařízení pomocí sdíleného přístupového podpisu, označovaného také jako ověřování symetrického klíče. Tato metoda ověřování je vhodná pro testování a vyhodnocení, ale ověřování zařízení pomocí certifikátů X.509 je bezpečnější přístup. Další informace najdete v tématu Zabezpečení osvědčených postupů > zabezpečení připojení.

V Azure Cloud Shellu, které jste dříve použili, nebo v jakémkoli jiném prostředí s Pythonem, vytvořte kód zařízení.

  1. Na příkazovém řádku spusťte následující příkaz a nainstalujte balíček azure-iot-device :

    pip install azure-iot-device
    
  2. Pomocí textového editoru vytvořte v pracovním adresáři soubor s názvem dmpatterns_getstarted_device.py .

  3. Na začátek souboru dmpatterns_getstarted_device.py přidejte následující import příkazy.

    import time
    import datetime
    from azure.iot.device import IoTHubDeviceClient, MethodResponse
    
  4. Přidejte proměnnou CONNECTION_STRING . Nahraďte hodnotu zástupného symbolu {deviceConnectionString} připojovací řetězec zařízení. Toto připojovací řetězec jste zkopírovali dříve v části Registrace nového zařízení v Centru IoT.

    CONNECTION_STRING = "{deviceConnectionString}"
    
  5. Přidejte následující funkci, která vytvoří instanci klienta nakonfigurovaného pro přímé metody v zařízení.

    def create_client():
        # Instantiate the client
        client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
    
        # Define the handler for method requests
        def method_request_handler(method_request):
            if method_request.name == "rebootDevice":
                # Act on the method by rebooting the device
                print("Rebooting device")
                time.sleep(20)
                print("Device rebooted")
    
                # ...and patching the reported properties
                current_time = str(datetime.datetime.now())
                reported_props = {"rebootTime": current_time}
                client.patch_twin_reported_properties(reported_props)
                print( "Device twins updated with latest rebootTime")
    
                # Create a method response indicating the method request was resolved
                resp_status = 200
                resp_payload = {"Response": "This is the response from the device"}
                method_response = MethodResponse(method_request.request_id, resp_status, resp_payload)
    
            else:
                # Create a method response indicating the method request was for an unknown method
                resp_status = 404
                resp_payload = {"Response": "Unknown method"}
                method_response = MethodResponse(method_request.request_id, resp_status, resp_payload)
    
            # Send the method response
            client.send_method_response(method_response)
    
        try:
            # Attach the handler to the client
            client.on_method_request_received = method_request_handler
        except:
            # In the event of failure, clean up
            client.shutdown()
    
        return client
    
  6. Spusťte ukázku přímé metody a počkejte.

    def main():
        print ("Starting the IoT Hub Python sample...")
        client = create_client()
    
        print ("Waiting for commands, press Ctrl-C to exit")
        try:
            # Wait for program exit
            while True:
                time.sleep(1000)
        except KeyboardInterrupt:
            print("IoTHubDeviceClient sample stopped")
        finally:
            # Graceful exit
            print("Shutting down IoT Hub Client")
            client.shutdown()
    
    if __name__ == '__main__':
        main()
    
  7. Uložte a zavřete soubor dmpatterns_getstarted_device.py .

Poznámka:

Za účelem zjednodušení tento kurz neimplementuje žádné zásady opakování. V produkčním kódu byste měli implementovat zásady opakování (například exponenciální zpoždování), jak je doporučeno v článku Zpracování přechodných chyb.

Získání připojovací řetězec centra IoT

V tomto článku vytvoříte back-endovou službu, která vyvolá přímou metodu na zařízení. K vyvolání přímé metody na zařízení prostřednictvím IoT Hubu potřebuje vaše služba oprávnění k připojení ke službě. Ve výchozím nastavení se každá služba IoT Hub vytvoří pomocí zásady sdíleného přístupu s názvem služby , která toto oprávnění uděluje.

Pokud chcete získat připojovací řetězec ioT Hubu pro zásady služby, postupujte takto:

  1. Na webu 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 uložte hodnotu.

Snímek obrazovky znázorňující, jak načíst připojovací řetězec ze služby IoT Hub na webu Azure Portal

Další informace ozásadách

Vytvoření aplikace služby pro aktivaci restartování

V této části vytvoříte konzolovou aplikaci Pythonu, která zahájí vzdálené restartování zařízení pomocí přímé metody. Aplikace používá dotazy dvojčete zařízení ke zjištění času posledního restartování tohoto zařízení.

Důležité

Tento článek obsahuje postup připojení ke službě pomocí sdíleného přístupového podpisu. Tato metoda ověřování je vhodná pro testování a vyhodnocení, ale ověřování ve službě pomocí MICROSOFT Entra ID nebo spravovaných identit je bezpečnější přístup. Další informace najdete v tématu Osvědčené postupy > zabezpečení cloudu.

V Azure Cloud Shellu nebo jiném prostředí pomocí Pythonu vytvořte kód konzoly.

  1. Na příkazovém řádku spusťte následující příkaz a nainstalujte balíček azure-iot-hub :

    pip install azure-iot-hub
    
  2. Pomocí textového editoru vytvořte v pracovním adresáři soubor s názvem dmpatterns_getstarted_service.py .

  3. Na začátek souboru dmpatterns_getstarted_service.py přidejte následující import příkazy.

    import sys, time
    
    from azure.iot.hub import IoTHubRegistryManager
    from azure.iot.hub.models import CloudToDeviceMethod, CloudToDeviceMethodResult, Twin
    
  4. Přidejte následující deklarace proměnných. {IoTHubConnectionString} Nahraďte zástupnou hodnotu připojovací řetězec IoT Hub, kterou jste zkopírovali dříve v připojovací řetězec Get the IoT Hub. {deviceId} Nahraďte zástupnou hodnotu ID zařízení, které jste zaregistrovali v registraci nového zařízení v Centru IoT.

    CONNECTION_STRING = "{IoTHubConnectionString}"
    DEVICE_ID = "{deviceId}"
    
    METHOD_NAME = "rebootDevice"
    METHOD_PAYLOAD = "{\"method_number\":\"42\"}"
    TIMEOUT = 60
    WAIT_COUNT = 10
    
  5. Přidejte následující funkci pro vyvolání metody zařízení pro restartování cílového zařízení, následné dotazování na dvojčata zařízení a získání času posledního restartování.

    def iothub_devicemethod_sample_run():
        try:
            # Create IoTHubRegistryManager
            registry_manager = IoTHubRegistryManager(CONNECTION_STRING)
    
            print ( "" )
            print ( "Invoking device to reboot..." )
    
            # Call the direct method.
            deviceMethod = CloudToDeviceMethod(method_name=METHOD_NAME, payload=METHOD_PAYLOAD)
            response = registry_manager.invoke_device_method(DEVICE_ID, deviceMethod)
    
            print ( "" )
            print ( "Successfully invoked the device to reboot." )
    
            print ( "" )
            print ( response.payload )
    
            while True:
                print ( "" )
                print ( "IoTHubClient waiting for commands, press Ctrl-C to exit" )
    
                status_counter = 0
                while status_counter <= WAIT_COUNT:
                    twin_info = registry_manager.get_twin(DEVICE_ID)
    
                    if twin_info.properties.reported.get("rebootTime") != None :
                        print ("Last reboot time: " + twin_info.properties.reported.get("rebootTime"))
                    else:
                        print ("Waiting for device to report last reboot time...")
    
                    time.sleep(5)
                    status_counter += 1
    
        except Exception as ex:
            print ( "" )
            print ( "Unexpected error {0}".format(ex) )
            return
        except KeyboardInterrupt:
            print ( "" )
            print ( "IoTHubDeviceMethod sample stopped" )
    
    if __name__ == '__main__':
        print ( "Starting the IoT Hub Service Client DeviceManagement Python sample..." )
        print ( "    Connection string = {0}".format(CONNECTION_STRING) )
        print ( "    Device ID         = {0}".format(DEVICE_ID) )
    
        iothub_devicemethod_sample_run()
    
  6. Uložte a zavřete soubor dmpatterns_getstarted_service.py .

Spouštění aplikací

Teď jste připraveni spustit kód zařízení a kód služby, který zahájí restartování zařízení.

  1. Na příkazovém řádku, kde jste vytvořili zařízení, spusťte následující příkaz a začněte naslouchat přímé metodě restartování.

    python dmpatterns_getstarted_device.py
    
  2. Na příkazovém řádku, kde vytvoříte službu, spusťte následující příkaz, který aktivuje vzdálené restartování a odešle dotaz dvojčete zařízení, aby zjistil čas posledního restartování.

    python dmpatterns_getstarted_service.py
    
  3. V konzole se zobrazí odpověď zařízení na přímou metodu.

    Následující příklad ukazuje odpověď zařízení na přímou metodu restartování:

    Snímek obrazovky znázorňující výstup aplikace simulovaného zařízení po přijetí přímé metody restartování

    Následující příklad ukazuje službu, která volá přímou metodu restartování a dotazuje dvojče zařízení na stav:

    Snímek obrazovky znázorňující výstup aplikace služby po odeslání přímé metody restartování

Přizpůsobení a rozšíření akcí správy zařízení

Vaše řešení IoT můžou rozšířit definovanou sadu vzorů správy zařízení nebo povolit vlastní vzory pomocí dvojčat zařízení a primitiv metod cloud-zařízení. Mezi další příklady akcí správy zařízení patří obnovení továrního nastavení, aktualizace firmwaru, aktualizace softwaru, řízení spotřeby, správa sítě a připojení a šifrování dat.

Časové období údržby zařízení

Obvykle konfigurujete zařízení tak, aby prováděla akce, které minimalizují přerušení a výpadky. Časové intervaly údržby zařízení se běžně používají k definování času, kdy má zařízení aktualizovat konfiguraci. Back-endová řešení můžou pomocí požadovaných vlastností dvojčete zařízení definovat a aktivovat zásadu na vašem zařízení, která umožňuje časové období údržby. Když zařízení obdrží zásadu časového období údržby, může pomocí ohlášené vlastnosti dvojčete zařízení nahlásit stav zásady. Back-endová aplikace pak může pomocí dotazů dvojčete zařízení otestovat dodržování předpisů u zařízení a jednotlivých zásad.

Další kroky

V tomto článku jste použili přímou metodu k aktivaci vzdáleného restartování zařízení. Pomocí ohlášených vlastností jste nahlásili čas posledního restartování ze zařízení a dotazovali jste se na dvojče zařízení, abyste zjistili čas posledního restartování zařízení z cloudu.

Pokud chcete pokračovat v začátcích se vzory správy ioT Hubu a zařízení, jako jsou kompletní aktualizace založené na imagích ve službě Device Update pro Azure IoT Hub, použijte referenční image Raspberry Pi 3 B+.

Informace o rozšíření řešení IoT a plánování volání metod na více zařízeních najdete v tématu Úlohy plánování a vysílání.