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

Back-endové aplikace můžou pomocí Azure IoT Hub primitiv, jako jsou dvojčata zařízení a přímé metody, vzdáleně spouštět a monitorovat akce správy zařízení na zařízeních. V tomto článku se dozvíte, jak back-endová aplikace a aplikace zařízení můžou spolupracovat na zahájení a monitorování vzdáleného restartování zařízení pomocí IoT Hub.

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

K zahájení akcí správy zařízení (jako je restartování, obnovení továrního nastavení a aktualizace firmwaru) z back-endové aplikace v cloudu použijte přímou metodu. Zařízení zodpovídá za:

  • Zpracování požadavku metody odeslaného z 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í IoT Hub.

Pomocí back-endové aplikace v cloudu můžete spouštět dotazy dvojčat zařízení a hlásit tak 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 volají z cloudu.

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

Poznámka

Další informace o nástrojích sady SDK, které jsou k dispozici pro vytváření aplikací pro zařízení i back-end, najdete v tématu Sady SDK Pro 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).

Registrace nového zařízení ve službě IoT Hub

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. V Azure Cloud Shell spuštěním následujícího příkazu nainstalujte rozšíření Microsoft Azure IoT pro Azure CLI:

    az extension add --name azure-iot
    
  3. Pomocí těchto příkazů vytvořte novou identitu zařízení s názvem myDeviceId a načtěte připojovací řetězec zařízení:

    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í se může zobrazit v protokolech shromažďovaných pro účely zákaznické podpory a řešení potíží, proto se ujistěte, že při pojmenování nepoužíváte žádné citlivé údaje.

Poznamenejte si připojovací řetězec zařízení z výsledku. Tento připojovací řetězec zařízení používá aplikace zařízení k připojení k vašemu IoT Hub 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čat zařízení k identifikaci zařízení a jejich posledního restartování.

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

  1. Spuštěním následujícího příkazu na příkazovém řádku 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 . {deviceConnectionString} Zástupnou hodnotu nahraďte připojovacím řetězcem zařízení. Tento připojovací řetězec jste dříve zkopírovali v části Registrace nového zařízení v centru IoT.

    CONNECTION_STRING = "{deviceConnectionString}"
    
  5. Přidejte následující funkci pro vytvoření instance klienta nakonfigurovaného pro přímé metody na 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í zpochybnění), jak navrhuje článek Zpracování přechodných chyb.

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

V tomto článku vytvoříte back-endovou službu, která na zařízení vyvolá přímou metodu. K vyvolání přímé metody na zařízení prostřednictvím IoT Hub potřebuje vaše služba oprávnění 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í.

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čat zařízení ke zjištění času posledního restartování daného zařízení.

V Azure Cloud Shell nebo jiném prostředí s Pythonem vytvořte kód konzoly.

  1. Spuštěním následujícího příkazu na příkazovém řádku 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 hodnotu zástupného symbolu připojovacím řetězcem služby IoT Hub, který jste zkopírovali dříve v části Získání připojovacího řetězce služby IoT Hub. {deviceId} Zástupnou hodnotu nahraďte ID zařízení, které jste zaregistrovali v části Registrace nového zařízení ve službě IoT Hub.

    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, která vyvolá metodu zařízení k restartování cílového zařízení, pak se dotazuje na dvojčata zařízení a získá čas 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 zařízení vytvořili, spusťte následující příkaz, který začne naslouchat přímé metodě restartování.

    python dmpatterns_getstarted_device.py
    
  2. Na příkazovém řádku, kde službu vytváříte, spusťte následující příkaz, který aktivuje vzdálené restartování a dotazem na dvojče zařízení zjistí č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 metodu přímého 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 se dvojčete 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í primitiv dvojčat zařízení a metod typu 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 se zařízení konfigurují tak, aby prováděla akce v době, která minimalizuje přerušení a výpadky. Časová období údržby zařízení se běžně používají k definování času, kdy má zařízení aktualizovat svou konfiguraci. Vaše back-endová řešení můžou pomocí požadovaných vlastností dvojčete zařízení definovat a aktivovat zásadu, která umožňuje časové období údržby. Když zařízení obdrží zásady časového období údržby, může pomocí ohlášené vlastnosti dvojčete zařízení nahlásit stav zásad. Back-endová aplikace pak může pomocí dotazů na dvojčete zařízení osvědčovat 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í zařízení a dotazovali jste 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 Hub a zařízení, jako je například kompletní aktualizace na základě obrázků ve službě Device Update pro Azure IoT Hub článek s využitím 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 Plánování a vysílání úloh.