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.
Otevřete Azure Cloud Shell.
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
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í.
Na příkazovém řádku spusťte následující příkaz a nainstalujte balíček azure-iot-device :
pip install azure-iot-device
Pomocí textového editoru vytvořte v pracovním adresáři soubor s názvem dmpatterns_getstarted_device.py .
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
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}"
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
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()
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:
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ů.
V levém podokně centra IoT vyberte zásady sdíleného přístupu.
V seznamu zásad vyberte zásadu služby .
Zkopírujte primární připojovací řetězec a uložte hodnotu.
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.
Na příkazovém řádku spusťte následující příkaz a nainstalujte balíček azure-iot-hub :
pip install azure-iot-hub
Pomocí textového editoru vytvořte v pracovním adresáři soubor s názvem dmpatterns_getstarted_service.py .
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
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
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()
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í.
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
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
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í:
Následující příklad ukazuje službu, která volá přímou metodu restartování a dotazuje dvojče zařízení na stav:
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í.