Sdílet prostřednictvím


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.)

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

  • 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í.

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í.

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í:

    Výstup aplikace simulovaného zařízení

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

    Aktivace výstupu služby 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 práce se službou IoT Hub a vzory správy 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í.