Sdílet prostřednictvím


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

Snímek obrazovky s diagramem konceptu 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:

  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 vyberte zásady sdíleného přístupu.

  3. V horní nabídce nad seznamem zásad vyberte Přidat zásady přístupu ke sdíleným zásadám.

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

    Snímek obrazovky, který ukazuje, jak přidat nové zásady sdíleného přístupu

  5. Ze seznamu zásad vyberte novou zásadu.

  6. Vyberte ikonu kopírování pro primární připojovací řetězec a uložte hodnotu.

    Snímek obrazovky, který ukazuje, jak načíst připojovací řetězec

Další informace ozásadách

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

  1. 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
    
  2. Pomocí textového editoru vytvořte nový soubor AddTagsAndQuery.py .

  3. 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
    
  4. 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]"
    
  5. 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íť.

  6. 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()
    
  7. 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í.

    Snímek obrazovky prvního dotazu zobrazující všechna zařízení v Redmondu

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

  1. 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
    
  2. Pomocí textového editoru vytvořte nový soubor ReportConnectivity.py .

  3. 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
    
  4. 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]"
    
  5. 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
    
  6. 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()
    
  7. Spusťte aplikaci zařízení:

    python ReportConnectivity.py
    

    Měli byste vidět potvrzení, že se aktualizovaly vlastnosti hlášené dvojčetem zařízení.

    aktualizace ohlášených vlastností z aplikace zařízení

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

    druhý dotaz na aplikaci služby

    V aplikaci zařízení se zobrazí potvrzení, že byla přijata oprava dvojčete požadovaných vlastností odeslaná aplikací služby.

    příjem požadovaných vlastností v aplikaci zařízení

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: