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:
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.
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:
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.
Hub'ınızın sol tarafındaki bölmede Paylaşılan erişim ilkeleri'ni seçin.
İlke listesinin üst kısmındaki menüden Paylaşılan ilke erişim ilkesi ekle'yi seçin.
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.
İlke listesinden yeni ilkenizi seçin.
Birincil bağlantı dizesi için kopyalama simgesini seçin ve değeri kaydedin.
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.
Ç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
Metin düzenleyicisi kullanarak yeni bir AddTagsAndQuery.py dosyası oluşturun.
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
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]"
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.
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()
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.
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.
Çalışma dizininizdeki bir komut isteminden Python için Azure IoT Hub Cihaz SDK'sını yükleyin:
pip install azure-iot-device
Metin düzenleyicisi kullanarak yeni bir Rapor Bağlan ivity.py dosyası oluşturun.
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
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]"
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
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()
Cihaz uygulamasını çalıştırın:
python ReportConnectivity.py
Cihaz ikizi bildirilen özelliklerin güncelleştirildiğini onaylamanız gerekir.
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.
Cihaz uygulamanızda, hizmet uygulaması tarafından gönderilen istenen özellikler ikizi düzeltme ekinin alındığını onaylayacaksınız.
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:
Cihazlardan telemetri gönderme, hızlı başlangıç: IoT Tak Çalıştır cihazdan Azure IoT Hub'a telemetri gönderme makalesine bakın.
Cihaz ikizlerinin istenen özelliklerini kullanarak cihazları yapılandırma, bkz . Öğretici: Cihazlarınızı arka uç hizmetinden yapılandırma.
Kullanıcı tarafından denetlenen bir uygulamadan fan açma gibi cihazları etkileşimli olarak denetleme konusuna bakın. Hızlı Başlangıç: IoT hub'ına bağlı bir cihazı denetleme.