Začínáme s dvojčaty zařízení (Python)
Dvojčata zařízení jsou dokumenty JSON s uloženými informacemi o stavu zařízení, včetně metadat, konfigurací a podmínek. IoT Hub zachová dvojče zařízení pro každé zařízení, které se k němu připojí.
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í.
Dvojčata zařízení použijte k:
Uložte metadata zařízení z back-endu řešení.
Nahlašujte aktuální informace o stavu, jako jsou dostupné možnosti a podmínky, například použitá metoda připojení, z vaší aplikace zařízení.
Synchronizujte stav dlouhotrvajících pracovních postupů, jako jsou aktualizace firmwaru a konfigurace, mezi aplikací zařízení a back-endovou aplikací.
Zadejte dotaz na metadata, konfiguraci nebo stav zařízení.
Dvojčata zařízení jsou navržená pro synchronizaci a dotazování konfigurací a podmínek zařízení. Další informace o dvojčatech zařízení, včetně případů použití dvojčat zařízení, najdete v tématu Principy dvojčat zařízení.
IoT Hubs ukládají dvojčata zařízení, která obsahují následující prvky:
Značky. Metadata zařízení jsou přístupná jenom back-endem řešení.
Požadované vlastnosti. Objekty JSON upravitelné back-endem řešení a pozorovatelné aplikací zařízení.
Ohlášené vlastnosti Objekty JSON upravitelné aplikací zařízení a čitelné back-endem řešení.
Značky a vlastnosti nemohou obsahovat pole, ale mohou obsahovat vnořené objekty.
Následující obrázek znázorňuje organizaci dvojčete zařízení:
Back-end řešení navíc může dotazovat dvojčata zařízení na základě všech výše uvedených dat. Další informace o dvojčatech zařízení najdete v tématu Principy dvojčat zařízení. Další informace o dotazování najdete v dotazovacím jazyce služby IoT Hub.
V tomto článku se dozvíte, jak:
Pomocí aplikace simulovaného zařízení můžete hlásit svůj kanál připojení jako ohlášenou vlastnost dvojčete zařízení.
Dotazování zařízení z back-endové aplikace pomocí filtrů na značky a vlastnosti, které jste vytvořili dříve.
V tomto článku vytvoříte dvě konzolové aplikace Pythonu:
AddTagsAndQuery.py: back-endová aplikace, která přidává značky a dotazy dvojčat zařízení.
ReportConnectivity.py: aplikace simulovaného zařízení, která se připojuje k centru IoT a hlásí její podmínku připojení.
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).
Získání připojovací řetězec centra IoT
V tomto článku vytvoříte back-endovou službu, která přidá požadované vlastnosti do dvojčete zařízení, a pak se do registru identit dotazuje, aby zjistila všechna zařízení s ohlášenými vlastnostmi, které byly odpovídajícím způsobem aktualizovány. Vaše služba potřebuje oprávnění k připojení služby k úpravě požadovaných vlastností dvojčete zařízení a potřebuje oprávnění ke čtení registru pro dotazování registru identit. Neexistují žádné výchozí zásady sdíleného přístupu, které obsahují pouze tato dvě oprávnění, takže potřebujete vytvořit jednu.
Chcete-li vytvořit zásadu sdíleného přístupu, která uděluje oprávnění ke čtení služby a registru a získat připojovací řetězec pro tuto zásadu, 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 vyberte zásady sdíleného přístupu.
V horní nabídce nad seznamem zásad vyberte Přidat zásady přístupu ke sdíleným zásadám.
V podokně Přidat zásady sdíleného přístupu vpravo zadejte popisný název zásady, například serviceAndRegistryRead. V části Oprávnění vyberte Možnost Čtení registru a Připojení ke službě a pak vyberte Přidat.
Ze seznamu zásad vyberte novou zásadu.
Vyberte ikonu kopírování pro primární připojovací řetězec a uložte hodnotu.
Vytvoření aplikace služby, která aktualizuje požadované vlastnosti a dotazuje dvojčata
V této části vytvoříte konzolovou aplikaci Pythonu, která přidá metadata polohy do dvojčete zařízení přidruženého k vašemu {ID zařízení}. Aplikace se dotazuje ioT Hubu na zařízení umístěná v USA a pak se dotazuje zařízení, která hlásí připojení mobilní sítě.
V pracovním adresáři otevřete příkazový řádek a nainstalujte sadu SDK služby Azure IoT Hub pro Python.
pip install azure-iot-hub
Pomocí textového editoru vytvořte nový soubor AddTagsAndQuery.py .
Přidejte následující kód, který importuje požadované moduly ze sady SDK služby:
import sys from time import sleep from azure.iot.hub import IoTHubRegistryManager from azure.iot.hub.models import Twin, TwinProperties, QuerySpecification, QueryResult
Přidejte následující kód. Nahraďte
[IoTHub Connection String]
připojovací řetězec IoT Hub, který jste zkopírovali v připojovací řetězec Get the IoT Hub. Nahraďte[Device Id]
ID zařízení (název) z registrovaného zařízení v centru IoT.IOTHUB_CONNECTION_STRING = "[IoTHub Connection String]" DEVICE_ID = "[Device Id]"
Do souboru AddTagsAndQuery.py přidejte následující kód:
def iothub_service_sample_run(): try: iothub_registry_manager = IoTHubRegistryManager(IOTHUB_CONNECTION_STRING) new_tags = { 'location' : { 'region' : 'US', 'plant' : 'Redmond43' } } twin = iothub_registry_manager.get_twin(DEVICE_ID) twin_patch = Twin(tags=new_tags, properties= TwinProperties(desired={'power_level' : 1})) twin = iothub_registry_manager.update_twin(DEVICE_ID, twin_patch, twin.etag) # Add a delay to account for any latency before executing the query sleep(1) query_spec = QuerySpecification(query="SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'") query_result = iothub_registry_manager.query_iot_hub(query_spec, None, 100) print("Devices in Redmond43 plant: {}".format(', '.join([twin.device_id for twin in query_result.items]))) print() query_spec = QuerySpecification(query="SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity = 'cellular'") query_result = iothub_registry_manager.query_iot_hub(query_spec, None, 100) print("Devices in Redmond43 plant using cellular network: {}".format(', '.join([twin.device_id for twin in query_result.items]))) except Exception as ex: print("Unexpected error {0}".format(ex)) return except KeyboardInterrupt: print("IoT Hub Device Twin service sample stopped")
Objekt IoTHubRegistryManager zveřejňuje všechny metody potřebné k interakci s dvojčaty zařízení ze služby. Kód nejprve inicializuje objekt IoTHubRegistryManager , pak aktualizuje dvojče zařízení pro DEVICE_ID a nakonec spustí dva dotazy. První vybere pouze dvojčata zařízení umístěná v závodu Redmond43 a druhý dotaz upřesní tak, že vybere jenom zařízení připojená přes mobilní síť.
Na konec AddTagsAndQuery.py přidejte následující kód, který implementuje funkci iothub_service_sample_run :
if __name__ == '__main__': print("Starting the Python IoT Hub Device Twin service sample...") print() iothub_service_sample_run()
Spusťte aplikaci pomocí:
python AddTagsAndQuery.py
Ve výsledcích dotazu byste měli vidět jedno zařízení s žádostí o všechna zařízení umístěná v Redmond43 a žádný dotaz, který výsledky omezuje na zařízení, která používají mobilní síť. V další části vytvoříte aplikaci zařízení, která bude používat mobilní síť, a znovu spustíte tento dotaz, abyste viděli, jak se mění.
Vytvoření aplikace zařízení, která aktualizuje ohlášené vlastnosti
V této části vytvoříte konzolovou aplikaci Pythonu, která se připojí k vašemu centru jako { ID zařízení} a pak aktualizuje ohlášené vlastnosti dvojčete zařízení, aby potvrdili, že je připojená pomocí mobilní sítě.
Z příkazového řádku v pracovním adresáři nainstalujte sadu Sdk pro zařízení služby Azure IoT Hub pro Python:
pip install azure-iot-device
Pomocí textového editoru vytvořte nový soubor ReportConnectivity.py .
Přidejte následující kód pro import požadovaných modulů ze sady SDK zařízení:
import time from azure.iot.device import IoTHubModuleClient
Přidejte následující kód.
[IoTHub Device Connection String]
Nahraďte zástupnou hodnotu připojovací řetězec zařízení, které jste viděli při registraci zařízení ve službě IoT Hub:CONNECTION_STRING = "[IoTHub Device Connection String]"
Do souboru ReportConnectivity.py přidejte následující kód, který vytvoří instanci klienta a implementuje funkce dvojčat zařízení:
def create_client(): # Instantiate client client = IoTHubModuleClient.create_from_connection_string(CONNECTION_STRING) # Define behavior for receiving twin desired property patches def twin_patch_handler(twin_patch): print("Twin patch received:") print(twin_patch) try: # Set handlers on the client client.on_twin_desired_properties_patch_received = twin_patch_handler except: # Clean up in the event of failure client.shutdown() return client
Na konec ReportConnectivity.py přidejte následující kód, který spustí aplikaci:
def main(): print ( "Starting the Python IoT Hub Device Twin device sample..." ) client = create_client() print ( "IoTHubModuleClient waiting for commands, press Ctrl-C to exit" ) try: # Update reported properties with cellular information print ( "Sending data as reported property..." ) reported_patch = {"connectivity": "cellular"} client.patch_twin_reported_properties(reported_patch) print ( "Reported properties updated" ) # Wait for program exit while True: time.sleep(1000000) except KeyboardInterrupt: print ("IoT Hub Device Twin device sample stopped") finally: # Graceful exit print("Shutting down IoT Hub Client") client.shutdown() if __name__ == '__main__': main()
Spusťte aplikaci zařízení:
python ReportConnectivity.py
Měli byste vidět potvrzení, že se aktualizovaly vlastnosti hlášené dvojčetem zařízení.
Když teď zařízení nahlásilo informace o připojení, mělo by se zobrazit v obou dotazech. Vraťte se zpět a spusťte dotazy znovu:
python AddTagsAndQuery.py
Tentokrát by se vaše {ID zařízení} mělo zobrazit v obou výsledcích dotazu.
V aplikaci zařízení se zobrazí potvrzení, že byla přijata oprava dvojčete požadovaných vlastností odeslaná aplikací služby.
V tomto článku:
- Přidání metadat zařízení jako značek z back-endové aplikace
- Nahlášené informace o připojení zařízení ve dvojčeti zařízení
- Dotazování na informace dvojčete zařízení pomocí dotazovacího jazyka služby IoT Hub
Další kroky
Informace o:
Odeslání telemetrie ze zařízení najdete v článku Rychlý start: Odesílání telemetrie ze zařízení ioT technologie Plug and Play do služby Azure IoT Hub.
Konfigurace zařízení pomocí požadovaných vlastností dvojčete zařízení najdete v části Kurz: Konfigurace zařízení z back-endové služby.
Interaktivní ovládání zařízení, například zapnutí ventilátoru z uživatelem řízené aplikace, najdete v rychlém startu: Řízení zařízení připojeného k centru IoT.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro