Share via


Cihaz ikizlerini kullanmaya başlama (Python)

Cihaz ikizleri; meta veriler, yapılandırmalar ve koşullar gibi cihaz durumu bilgilerini depolayan JSON belgelerdir. IoT Hub, ona bağlanan her cihaz için bir cihaz ikizi kalıcı hale getirmekte.

Not

Bu makalede açıklanan özellikler yalnızca IoT Hub'ın standart katmanında kullanılabilir. Temel ve standart/ücretsiz IoT Hub katmanları hakkında daha fazla bilgi için bkz. Çözümünüz için doğru IoT Hub katmanını seçme.

Cihaz ikizlerini kullanarak:

  • Çözüm arka ucunuzdan cihaz meta verilerini depolayın.

  • Kullanılabilir özellikler ve koşullar gibi geçerli durum bilgilerini (örneğin, kullanılan bağlantı yöntemi) cihaz uygulamanızdan bildirin.

  • Cihaz uygulaması ve arka uç uygulaması arasında üretici yazılımı ve yapılandırma güncelleştirmeleri gibi uzun süre çalışan iş akışlarının durumunu eşitleyin.

  • Cihaz meta verilerinizi, yapılandırmanızı veya durumunuzu sorgular.

Cihaz ikizleri eşitleme ve cihaz yapılandırmalarını ve koşullarını sorgulamak için tasarlanmıştır. Cihaz ikizlerinin ne zaman kullanılacağı da dahil olmak üzere cihaz ikizleri hakkında daha fazla bilgi için bkz . Cihaz ikizlerini anlama.

IoT hub'ları, aşağıdaki öğeleri içeren cihaz ikizlerini depolar:

  • Etiketler' e tıklayın. Cihaz meta verilerine yalnızca çözüm arka ucu tarafından erişilebilir.

  • İstenen özellikler. Çözüm arka ucu tarafından değiştirilebilir ve cihaz uygulaması tarafından gözlemlenebilir JSON nesneleri.

  • Bildirilen özellikler. Cihaz uygulaması tarafından değiştirilebilir ve çözüm arka ucu tarafından okunabilir JSON nesneleri.

Etiketler ve özellikler dizi içeremez, ancak iç içe nesneler içerebilir.

Aşağıdaki çizimde cihaz ikizi kuruluşu gösterilmektedir:

Cihaz ikizi kavram diyagramının ekran görüntüsü.

Ayrıca, çözüm arka ucu yukarıdaki tüm verilere göre cihaz ikizlerini sorgulayabilir. Cihaz ikizleri hakkında daha fazla bilgi için bkz . Cihaz ikizlerini anlama. Sorgulama hakkında daha fazla bilgi için bkz . IoT Hub sorgu dili.

Bu makalede aşağıdaki işlemler hakkında bilgi edinirsiniz:

  • Bağlantı kanalını cihaz ikizinde bildirilen bir özellik olarak raporlamak için sanal bir cihaz uygulaması kullanın.

  • Daha önce oluşturulan etiketlerdeki ve özelliklerdeki filtreleri kullanarak arka uç uygulamanızdaki cihazları sorgular.

Bu makalede iki Python konsol uygulaması oluşturacaksınız:

  • AddTagsAndQuery.py: Etiket ekleyen ve cihaz ikizlerini sorgulayan bir arka uç uygulaması.

  • Rapor Bağlan ivity.py: IoT hub'ınıza bağlanan ve bağlantı durumunu bildiren sanal bir cihaz uygulaması.

Not

Hem cihaz hem de arka uç uygulamaları oluşturmak için kullanılabilen SDK araçları hakkında daha fazla bilgi için bkz . Azure IoT SDK'ları.

Önkoşullar

  • Etkin bir Azure hesabı. (Hesabınız yoksa, yalnızca birkaç dakika içinde ücretsiz bir hesap oluşturabilirsiniz.)

  • Bir IoT hub'ı. CLI veya Azure portalı ile bir tane oluşturun.

  • Kayıtlı bir cihaz. Azure portalında bir tane kaydedin.

  • Python sürüm 3.7 veya üzeri önerilir. Kurulumunuzun gereksinimine uygun olarak 32 bit veya 64 bit yüklemeyi kullanmaya dikkat edin. Yükleme sırasında istendiğinde, platforma özgü ortam değişkeninize Python’u eklediğinizden emin olun.

  • Güvenlik duvarınızda 8883 numaralı bağlantı noktasının açık olduğundan emin olun. Bu makaledeki cihaz örneği, 8883 numaralı bağlantı noktası üzerinden iletişim kuran MQTT protokollerini kullanır. Bu bağlantı noktası bazı kurumsal ve eğitim ağı ortamlarında engellenebilir. Bu sorunu çözmenin daha fazla bilgi ve yolları için bkz. IoT Hub'a (MQTT) Bağlan.

IoT hub'ını bağlantı dizesi alma

Bu makalede, bir cihaz ikizine istenen özellikleri ekleyen bir arka uç hizmeti oluşturacak ve ardından kimlik kayıt defterini sorgulayarak uygun şekilde güncelleştirilmiş bildirilen özelliklere sahip tüm cihazları bulacaksınız. Hizmetinizin bir cihaz ikizinin istenen özelliklerini değiştirmek için hizmet bağlantı iznine ve kimlik kayıt defterini sorgulamak için kayıt defteri okuma iznine ihtiyacı var. Yalnızca bu iki izni içeren varsayılan paylaşılan erişim ilkesi yoktur, bu nedenle bir tane oluşturmanız gerekir.

Hizmet bağlama ve kayıt defteri okuma izinleri veren bir paylaşılan erişim ilkesi oluşturmak ve bu ilke için bir bağlantı dizesi almak için şu adımları izleyin:

  1. Azure portalında Kaynak grupları'nı seçin. Hub'ınızın bulunduğu kaynak grubunu seçin ve ardından kaynak listesinden hub'ınızı seçin.

  2. Hub'ınızın sol tarafındaki bölmede Paylaşılan erişim ilkeleri'ni seçin.

  3. İlke listesinin üst kısmındaki menüden Paylaşılan ilke erişim ilkesi ekle'yi seçin.

  4. Sağdaki Paylaşılan erişim ilkesi ekle bölmesinde, ilkeniz için serviceAndRegistryRead gibi açıklayıcı bir ad girin. İzinler'in altında Kayıt Defteri Okuma ve Hizmet Bağlan'ni ve ardından Ekle'yi seçin.

    Yeni bir paylaşılan erişim ilkesinin nasıl ekleneceğini gösteren ekran görüntüsü.

  5. İlke listesinden yeni ilkenizi seçin.

  6. Birincil bağlantı dizesi için kopyalama simgesini seçin ve değeri kaydedin.

    bağlantı dizesi nasıl alındığını gösteren ekran görüntüsü.

IoT Hub paylaşılan erişim ilkeleri ve izinleri hakkında daha fazla bilgi için bkz . Erişim denetimi ve izinleri.

İstenen özellikleri ve sorgu ikizlerini güncelleştiren bir hizmet uygulaması oluşturma

Bu bölümde, {Cihaz Kimliği} ile ilişkilendirilmiş cihaz ikizine konum meta verileri ekleyen bir Python konsol uygulaması oluşturacaksınız. Uygulama, ABD'de bulunan cihazlar için IoT hub'ını sorgular ve ardından hücresel ağ bağlantısı bildiren cihazları sorgular.

  1. Çalışma dizininizde bir komut istemi açın ve Python için Azure IoT Hub Hizmet SDK'sını yükleyin.

    pip install azure-iot-hub
    
  2. Metin düzenleyicisi kullanarak yeni bir AddTagsAndQuery.py dosyası oluşturun.

  3. Hizmet SDK’sından gerekli modülleri içeri aktarmak için aşağıdaki kodu ekleyin:

    import sys
    from time import sleep
    from azure.iot.hub import IoTHubRegistryManager
    from azure.iot.hub.models import Twin, TwinProperties, QuerySpecification, QueryResult
    
  4. Aşağıdaki kodu ekleyin. değerini, IoT hub'ını alma bağlantı dizesi'nde kopyaladığınız IoT hub'ı bağlantı dizesi ile değiştirin[IoTHub Connection String]. değerini IoT hub'ında kayıtlı cihazınızdaki cihaz kimliği (ad) ile değiştirin [Device Id] .

    IOTHUB_CONNECTION_STRING = "[IoTHub Connection String]"
    DEVICE_ID = "[Device Id]"
    
  5. AddTagsAndQuery.py dosyasına aşağıdaki kodu ekleyin:

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

    IoTHubRegistryManager nesnesi, hizmetten cihaz ikizleriyle etkileşim kurmak için gereken tüm yöntemleri kullanıma sunar. Kod önce IoTHubRegistryManager nesnesini başlatır, ardından cihaz ikizini DEVICE_ID için güncelleştirir ve son olarak iki sorgu çalıştırır. Birincisi yalnızca Redmond43 tesisinde bulunan cihazların cihaz ikizlerini seçer ve ikincisi sorguyu yalnızca hücresel ağ üzerinden bağlanan cihazları seçecek şekilde daraltıyor.

  6. iothub_service_sample_run işlevini uygulamak için AddTagsAndQuery.py sonuna aşağıdaki kodu ekleyin:

    if __name__ == '__main__':
        print("Starting the Python IoT Hub Device Twin service sample...")
        print()
    
        iothub_service_sample_run()
    
  7. Uygulamayı şu şekilde çalıştırın:

    python AddTagsAndQuery.py
    

    Sorgunun sonuçlarında redmond43'te bulunan tüm cihazları soran ve sonuçları hücresel ağ kullanan cihazlarla kısıtlayan sorgu için hiçbiri olmayan bir cihaz görmeniz gerekir. Sonraki bölümde, hücresel ağ kullanacak bir cihaz uygulaması oluşturacak ve nasıl değiştiğini görmek için bu sorguyu yeniden çalıştıracaksınız.

    Redmond'daki tüm cihazları gösteren ilk sorgunun ekran görüntüsü.

Bildirilen özellikleri güncelleştiren bir cihaz uygulaması oluşturma

Bu bölümde, hub'ınıza {Cihaz Kimliği} olarak bağlanan bir Python konsol uygulaması oluşturacak ve ardından cihaz ikizinizin bildirilen özelliklerini güncelleştirerek bir hücresel ağ kullanarak bağlandığını onaylaacaksınız.

  1. Çalışma dizininizdeki bir komut isteminden Python için Azure IoT Hub Cihaz SDK'sını yükleyin:

    pip install azure-iot-device
    
  2. Metin düzenleyicisi kullanarak yeni bir Rapor Bağlan ivity.py dosyası oluşturun.

  3. Cihaz SDK'sından gerekli modülleri içeri aktarmak için aşağıdaki kodu ekleyin:

    import time
    from azure.iot.device import IoTHubModuleClient
    
  4. Aşağıdaki kodu ekleyin. [IoTHub Device Connection String] Yer tutucu değerini IoT Hub'ına bir cihaz kaydettiğinizde gördüğünüz cihaz bağlantı dizesi değiştirin:

    CONNECTION_STRING = "[IoTHub Device Connection String]"
    
  5. Bir istemci örneği oluşturmak ve cihaz ikizleri işlevini uygulamak için Report Bağlan ivity.py dosyasına aşağıdaki kodu ekleyin:

    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. Uygulamayı çalıştırmak için Report Bağlan ivity.py sonuna aşağıdaki kodu ekleyin:

    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. Cihaz uygulamasını çalıştırın:

    python ReportConnectivity.py
    

    Cihaz ikizi bildirilen özelliklerin güncelleştirildiğini onaylamanız gerekir.

    cihaz uygulamasından bildirilen özellikleri güncelleştirme

  8. Cihaz artık bağlantı bilgilerini bildirdiği için her iki sorguda da görünmelidir. Geri dönün ve sorguları yeniden çalıştırın:

    python AddTagsAndQuery.py
    

    Bu kez {Device ID} her iki sorgu sonuçlarında da görünmelidir.

    hizmet uygulamasında ikinci sorgu

    Cihaz uygulamanızda, hizmet uygulaması tarafından gönderilen istenen özellikler ikizi düzeltme ekinin alındığını onaylayacaksınız.

    cihaz uygulamasında istenen özellikleri alma

Bu makalede şunları yapacaksınız:

  • Arka uç uygulamasından etiket olarak cihaz meta verileri eklendi
  • Cihaz ikizinde bildirilen cihaz bağlantı bilgileri
  • IoT Hub sorgu dilini kullanarak cihaz ikizi bilgilerini sorgulama

Sonraki adımlar

Şunlar hakkında bilgi edinmek için: