Megosztás a következőn keresztül:


Ismerkedés az ikereszközökkel (Python)

Az ikereszközök JSON-dokumentumok, amelyek az eszközök állapotinformációit, például a metaadatokat, konfigurációkat és állapotokat tárolják. Az IoT Hub minden olyan eszközhöz megőrzi az ikereszközt, amely csatlakozik hozzá.

Feljegyzés

A cikkben ismertetett funkciók csak az IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub-szintekről további információt a megoldáshoz megfelelő IoT Hub-szint kiválasztása című témakörben talál.

Az ikereszközök használata:

  • Tárolja az eszköz metaadatait a megoldás háttérrendszeréből.

  • Jelentse az aktuális állapotinformációkat, például az elérhető képességeket és feltételeket, például a használt kapcsolati módszert az eszközalkalmazásból.

  • Szinkronizálja a hosszan futó munkafolyamatok állapotát, például a belső vezérlőprogramot és a konfigurációs frissítéseket egy eszközalkalmazás és egy háttéralkalmazás között.

  • Az eszköz metaadatainak, konfigurációjának vagy állapotának lekérdezése.

Az ikereszközök szinkronizálásra, valamint eszközkonfigurációk és feltételek lekérdezésére lettek tervezve. Az ikereszközökkel kapcsolatos további információkért, beleértve az ikereszközök használatát is, olvassa el az ikereszközök ismertetése című témakört.

Az IoT Hubs az ikereszközöket tárolja, amelyek a következő elemeket tartalmazzák:

  • Címkék. Az eszköz metaadatait csak a megoldás háttérrendszere érheti el.

  • Kívánt tulajdonságok. A megoldás háttérrendszere által módosítható és az eszközalkalmazás által megfigyelhető JSON-objektumok.

  • Jelentett tulajdonságok. Az eszközalkalmazás által módosítható és a megoldás háttérrendszere által olvasható JSON-objektumok.

A címkék és tulajdonságok nem tartalmazhatnak tömböket, de beágyazott objektumokat is tartalmazhatnak.

Az alábbi ábra az ikereszközök szervezetét mutatja be:

Képernyőkép egy ikereszköz-koncepciódiagramról.

Emellett a megoldás háttérrendszere az összes fenti adat alapján lekérdezheti az ikereszközöket. Az ikereszközökkel kapcsolatos további információkért tekintse meg az ikereszközökkel kapcsolatos tudnivalókat. A lekérdezéssel kapcsolatos további információkért lásd az IoT Hub lekérdezési nyelvét.

Ez a cikk bemutatja, hogyan:

  • Szimulált eszközalkalmazás használatával jelentse a kapcsolati csatornáját az ikereszköz jelentett tulajdonságaként.

  • Lekérdezheti az eszközöket a háttéralkalmazásból a korábban létrehozott címkék és tulajdonságok szűrőinek használatával.

Ebben a cikkben két Python-konzolalkalmazást hoz létre:

  • AddTagsAndQuery.py: egy háttéralkalmazás, amely címkéket ad hozzá, és lekérdezi az ikereszközöket.

  • ReportConnectivity.py: egy szimulált eszközalkalmazás, amely csatlakozik az IoT Hubhoz, és jelenti annak kapcsolati állapotát.

Feljegyzés

Az eszköz- és háttéralkalmazások készítéséhez elérhető SDK-eszközökről az Azure IoT SDK-kban talál további információt.

Előfeltételek

  • Aktív Azure-fiók. (Ha nincs fiókja, létrehozhat egy ingyenes fiókot néhány perc alatt.)

  • Egy IoT Hub. Hozzon létre egyet a parancssori felülettel vagy az Azure Portallal.

  • Az IoT Hubon regisztrált eszköz. Ha nincs eszköze az IoT Hubon, kövesse az eszköz regisztrálása című témakörben leírt lépéseket.

  • A Python 3.7-es vagy újabb verziója ajánlott. Mindenképp a rendszernek megfelelő, 32 vagy 64 bites telepítést használja. Amikor a rendszer erre kéri, mindenképp adja hozzá a Pythont a platformspecifikus környezeti változóhoz.

  • Győződjön meg arról, hogy a 8883-as port nyitva van a tűzfalon. A cikkben szereplő eszközminta MQTT protokollt használ, amely a 8883-es porton keresztül kommunikál. Ez a port néhány vállalati és oktatási hálózati környezetben blokkolható. További információkért és a probléma megoldásának módjaiért lásd: Csatlakozás az IoT Hubhoz (MQTT).

Az IoT Hub kapcsolati sztring lekérése

Ebben a cikkben egy háttérszolgáltatást hoz létre, amely hozzáadja a kívánt tulajdonságokat egy ikereszközhöz, majd lekérdezi az identitásjegyzéket, hogy megtalálja az összes, ennek megfelelően frissített jelentett tulajdonságokkal rendelkező eszközt. A szolgáltatásnak szüksége van a szolgáltatás csatlakoztatási engedélyére az ikereszköz kívánt tulajdonságainak módosításához, és a beállításjegyzék olvasási engedélyére van szüksége az identitásjegyzék lekérdezéséhez. Nincs olyan alapértelmezett megosztott hozzáférési szabályzat, amely csak ezt a két engedélyt tartalmazza, ezért létre kell hoznia egyet.

Ha olyan megosztott hozzáférési szabályzatot szeretne létrehozni, amely szolgáltatás-kapcsolódási és beállításjegyzék-olvasási engedélyeket biztosít, és kapcsolati sztring szeretne kapni ehhez a szabályzathoz, kövesse az alábbi lépéseket:

  1. Az Azure Portalon válassza ki az Erőforráscsoportokat. Válassza ki azt az erőforráscsoportot, ahol a központ található, majd válassza ki a központot az erőforrások listájából.

  2. A központ bal oldali ablaktábláján válassza a Megosztott hozzáférési szabályzatok lehetőséget.

  3. A szabályzatok listája feletti felső menüben válassza a Megosztott házirend hozzáférési szabályzat hozzáadása lehetőséget.

  4. A jobb oldali Megosztott hozzáférési szabályzat hozzáadása panelen adjon meg egy leíró nevet a szabályzatnak, például serviceAndRegistryRead. Az Engedélyek területen válassza a Beállításjegyzék olvasása és a Service Connect, majd a Hozzáadás lehetőséget.

    Képernyőfelvétel, amely bemutatja, hogyan adhat hozzá új megosztott hozzáférési szabályzatot.

  5. Válassza ki az új szabályzatot a szabályzatok listájából.

  6. Válassza az Elsődleges kapcsolati sztring másolás ikont, és mentse az értéket.

    Képernyőkép a kapcsolati sztring lekéréséről.

További információ az IoT Hub megosztott hozzáférési szabályzatairól és engedélyeiről: Hozzáférés-vezérlés és engedélyek.

Szolgáltatásalkalmazás létrehozása, amely frissíti a kívánt tulajdonságokat és lekérdezi az ikerpéldányokat

Ebben a szakaszban létrehoz egy Python-konzolalkalmazást, amely helyadatokat ad hozzá a(z) {Device ID} azonosítójához társított ikereszközhöz. Az alkalmazás lekérdezi az IoT Hubot az USA-ban található eszközökhöz, majd lekérdezi a mobilhálózati kapcsolatot jelentéssel rendelkező eszközöket.

  1. A munkakönyvtárban nyisson meg egy parancssort, és telepítse a Pythonhoz készült Azure IoT Hub Service SDK-t.

    pip install azure-iot-hub
    
  2. Szövegszerkesztővel hozzon létre egy új AddTagsAndQuery.py fájlt.

  3. Adja hozzá az alábbi kódot a szükséges modulok importálásához a szolgáltatás SDK-jából:

    import sys
    from time import sleep
    from azure.iot.hub import IoTHubRegistryManager
    from azure.iot.hub.models import Twin, TwinProperties, QuerySpecification, QueryResult
    
  4. Adja hozzá a következő kódot. Cserélje le [IoTHub Connection String] az IoT Hub kapcsolati sztring az IoT Hub lekérése kapcsolati sztring. Cserélje le [Device Id] az IoT Hub regisztrált eszközének eszközazonosítóját (a nevet).

    IOTHUB_CONNECTION_STRING = "[IoTHub Connection String]"
    DEVICE_ID = "[Device Id]"
    
  5. Adja hozzá a következő kódot a AddTagsAndQuery.py fájlhoz:

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

    Az IoTHubRegistryManager objektum elérhetővé teszi a szolgáltatás ikereszközeivel való interakcióhoz szükséges összes metódust. A kód először inicializálja az IoTHubRegistryManager objektumot, majd frissíti az ikereszközt DEVICE_ID, és végül két lekérdezést futtat. Az első csak a Redmond43-üzemben található eszközök ikereszközeit választja ki, a második pedig pontosítja a lekérdezést, hogy csak azokat az eszközöket válassza ki, amelyek szintén mobilhálózaton keresztül csatlakoznak.

  6. Adja hozzá a következő kódot AddTagsAndQuery.py végén a iothub_service_sample_run függvény implementálásához:

    if __name__ == '__main__':
        print("Starting the Python IoT Hub Device Twin service sample...")
        print()
    
        iothub_service_sample_run()
    
  7. Futtassa az alkalmazást a következőkkel:

    python AddTagsAndQuery.py
    

    A lekérdezés eredményében egy eszköznek kell megjelennie, amely a Redmond43-ban található összes eszközt kéri le, a lekérdezéshez pedig egyet sem, amely az eredményeket mobilhálózatot használó eszközökre korlátozza. A következő szakaszban egy mobilhálózatot használó eszközalkalmazást fog létrehozni, és ezt a lekérdezést újrafuttatva láthatja, hogyan változik.

    Képernyőkép az első lekérdezésről, amelyen az összes redmondi eszköz látható.

Jelentett tulajdonságokat frissíteni kívánó eszközalkalmazás létrehozása

Ebben a szakaszban létrehoz egy Python-konzolalkalmazást, amely {Device ID} néven csatlakozik a központhoz, majd frissíti az ikereszköz jelentett tulajdonságait, hogy meggyőződjön arról, hogy mobilhálózattal csatlakozik.

  1. A munkakönyvtárban található parancssorból telepítse a Pythonhoz készült Azure IoT Hub Device SDK-t:

    pip install azure-iot-device
    
  2. Szövegszerkesztővel hozzon létre egy új ReportConnectivity.py fájlt.

  3. Adja hozzá a következő kódot a szükséges modulok az eszköz SDK-ból való importálásához:

    import time
    from azure.iot.device import IoTHubModuleClient
    
  4. Adja hozzá a következő kódot. Cserélje le a [IoTHub Device Connection String] helyőrző értéket arra az eszközre, kapcsolati sztring, amikor regisztrált egy eszközt az IoT Hubon:

    CONNECTION_STRING = "[IoTHub Device Connection String]"
    
  5. Adja hozzá a következő kódot a ReportConnectivity.py fájlhoz az ügyfél példányosításához és az ikereszköz-funkciók implementálásához:

    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. Adja hozzá a következő kódot ReportConnectivity.py végén az alkalmazás futtatásához:

    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. Futtassa az eszközalkalmazást:

    python ReportConnectivity.py
    

    Meg kell erősítenie, hogy az ikereszköz jelentett tulajdonságai frissültek.

    jelentett tulajdonságok frissítése az eszközalkalmazásból

  8. Most, hogy az eszköz jelentette a kapcsolati adatait, mindkét lekérdezésben meg kell jelennie. Térjen vissza, és futtassa újra a lekérdezéseket:

    python AddTagsAndQuery.py
    

    Ezúttal a(z ) {Device ID} -nak mindkét lekérdezés eredményében meg kell jelennie.

    második lekérdezés a szolgáltatásalkalmazásban

    Az eszközalkalmazásban megerősítést kap arról, hogy a szolgáltatásalkalmazás által küldött kívánt tulajdonságok ikerjavítása megérkezett.

    a kívánt tulajdonságok fogadása az eszközalkalmazásban

Ebben a cikkben:

  • Eszköz metaadatai hozzáadva címkékként egy háttéralkalmazásból
  • Jelentett eszközkapcsolati információk az ikereszközben
  • Az ikereszköz adatainak lekérése az IoT Hub lekérdezési nyelvével

Következő lépések

A következő tudnivalókat ismerheti meg: