IoT Hub modül kimliği ve modül ikizi (Python) ile çalışmaya başlama
Modül kimlikleri ve modül ikizleri , Azure IoT Hub cihaz kimliklerine ve cihaz ikizlerine benzer, ancak daha ayrıntılı bir ayrıntı sağlar. Azure IoT Hub cihaz kimlikleri ve cihaz ikizleri bir arka uç uygulamasının bir cihazı yapılandırmasına ve cihazın koşullarına görünürlük sağlamasına olanak tanırken modül kimlikleri ve modül ikizleri bir cihazın tek tek bileşenleri için bu özellikleri sağlar. İşletim sistemi cihazları veya üretici yazılımı cihazları gibi birden çok bileşeni olan yetenekli cihazlarda, her bileşen için yalıtılmış yapılandırma ve koşullar sağlar.
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.
Bu makalenin sonunda üç Python uygulamasına sahipsiniz:
CreateModule: Cihaz ve modül istemcilerinizi bağlamak için bir cihaz kimliği, modül kimliği ve ilişkili güvenlik anahtarları oluşturur.
UpdateModuleTwinDesiredProperties: Güncelleştirilmiş modül ikizini, istenen özellikleri IoT Hub'ınıza gönderir.
ReceiveModuleTwinDesiredPropertiesPatch: modül ikizini alır, cihazınızda istenen özellikler düzeltme eki.
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.)
Azure aboneliğinizde bir IoT hub'ı. Henüz bir hub'ına sahip değilseniz IoT hub'ı oluşturma makalesindeki adımları izleyebilirsiniz.
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.
Modül kimlik doğrulaması
Modül kimliklerinin kimliğini doğrulamak için simetrik anahtarları veya X.509 sertifikalarını kullanabilirsiniz. X.509 sertifika kimlik doğrulaması için modülün sertifikasının gibi CN=<deviceid>/<moduleid>
biçimlendirilmiş ortak adı (CN) olmalıdır. Örneğin:
openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"
IoT hub'ını bağlantı dizesi alma
Bu makalede, kimlik kayıt defterine bir cihaz ekleyen ve ardından bu cihaza bir modül ekleyen bir arka uç hizmeti oluşturacaksınız. Bu hizmet, kayıt defteri yazma iznini (kayıt defteri okumayı da içerir) gerektirir. Ayrıca yeni oluşturulan modülün modül ikizine istenen özellikleri ekleyen bir hizmet oluşturursunuz. Bu hizmetin hizmet bağlama iznine ihtiyacı var. Bu izinleri tek tek veren varsayılan paylaşılan erişim ilkeleri olsa da, bu bölümde bu izinlerin ikisini de içeren özel bir paylaşılan erişim ilkesi oluşturursunuz.
Hizmet bağlama ve kayıt defteri yazma 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ündeki menüden Paylaşılan erişim ilkesi ekle'yi seçin.
Paylaşılan erişim ilkesi ekle'nin altında, ilkeniz için serviceAndRegistryReadWrite gibi açıklayıcı bir ad girin. İzinler'in altında Kayıt Defteri Yazma ve Hizmet Bağlama'yı ve ardından Ekle'yi seçin. (Kayıt Defteri Yazma'yi seçtiğinizde Kayıt Defteri Okuma izni otomatik olarak eklenir.)
İlke listesinden yeni ilkenizi seçin.
Paylaşılan erişim anahtarları'nın altında Birincil bağlantı dizesi kopyala 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.
Önemli
Bu makale, paylaşılan erişim imzası kullanarak hizmete bağlanma adımlarını içerir. Bu kimlik doğrulama yöntemi test ve değerlendirme için uygundur, ancak Microsoft Entra ID veya yönetilen kimliklerle bir hizmette kimlik doğrulaması yapmak daha güvenli bir yaklaşımdır. Daha fazla bilgi edinmek için bkz . En iyi güvenlik yöntemleri > Bulut güvenliği.
IoT Hub'da cihaz kimliği ve modül kimliği oluşturma
Bu bölümde, IoT hub'ınızdaki kimlik kayıt defterinde cihaz kimliği ve modül kimliği oluşturan bir Python hizmet uygulaması oluşturacaksınız. Cihaz veya modül, kimlik kayıt defterinde bir girdisi olmadığı sürece IoT hub'ına bağlanamaz. Daha fazla bilgi için bkz . IoT hub'ınızdaki kimlik kayıt defterini anlama. Bu konsol uygulamasını çalıştırdığınızda, hem cihaz hem de modül için benzersiz bir kimlik ve anahtar oluşturur. Kimlik ve anahtar büyük/küçük harfe duyarlıdır. Cihazınız ve modülünüz, IoT Hub’ına cihazdan buluta iletileri gönderdiğinde kendisini tanımlamak için bu değerleri kullanır.
Önemli
Bu makale, simetrik anahtar kimlik doğrulaması olarak da adlandırılan paylaşılan erişim imzasını kullanarak bir cihazı bağlama adımlarını içerir. Bu kimlik doğrulama yöntemi test ve değerlendirme için uygundur, ancak X.509 sertifikalarını kullanarak bir cihazın kimliğini doğrulamak daha güvenli bir yaklaşımdır. Daha fazla bilgi edinmek için bkz . En iyi güvenlik yöntemleri > Bağlantı güvenliği.
Komut isteminizde aşağıdaki komutu çalıştırarak azure-iot-hub paketini yükleyin:
pip install azure-iot-hub
Komut isteminizde aşağıdaki komutu çalıştırarak msrest paketini yükleyin. HTTPOperationError özel durumlarını yakalamak için bu pakete ihtiyacınız var.
pip install msrest
Metin düzenleyicisi kullanarak çalışma dizininizde CreateModule.py adlı bir dosya oluşturun.
Python dosyanıza aşağıdaki kodu ekleyin. YourIoTHubConnectionString değerini IoT hub bağlantı dizesi alma bölümünde kopyaladığınız bağlantı dizesi değiştirin.
import sys from msrest.exceptions import HttpOperationError from azure.iot.hub import IoTHubRegistryManager CONNECTION_STRING = "YourIotHubConnectionString" DEVICE_ID = "myFirstDevice" MODULE_ID = "myFirstModule" try: # RegistryManager iothub_registry_manager = IoTHubRegistryManager(CONNECTION_STRING) try: # CreateDevice - let IoT Hub assign keys primary_key = "" secondary_key = "" device_state = "enabled" new_device = iothub_registry_manager.create_device_with_sas( DEVICE_ID, primary_key, secondary_key, device_state ) except HttpOperationError as ex: if ex.response.status_code == 409: # 409 indicates a conflict. This happens because the device already exists. new_device = iothub_registry_manager.get_device(DEVICE_ID) else: raise print("device <" + DEVICE_ID + "> has primary key = " + new_device.authentication.symmetric_key.primary_key) try: # CreateModule - let IoT Hub assign keys primary_key = "" secondary_key = "" managed_by = "" new_module = iothub_registry_manager.create_module_with_sas( DEVICE_ID, MODULE_ID, managed_by, primary_key, secondary_key ) except HttpOperationError as ex: if ex.response.status_code == 409: # 409 indicates a conflict. This happens because the module already exists. new_module = iothub_registry_manager.get_module(DEVICE_ID, MODULE_ID) else: raise print("device/module <" + DEVICE_ID + "/" + MODULE_ID + "> has primary key = " + new_module.authentication.symmetric_key.primary_key) except Exception as ex: print("Unexpected error {0}".format(ex)) except KeyboardInterrupt: print("IoTHubRegistryManager sample stopped")
Komut isteminizde aşağıdaki komutu çalıştırın:
python CreateModule.py
Bu uygulama myFirstDevice kimliğine sahip bir cihaz kimliği ve myFirstDevice cihazı altında myFirstModule kimliğine sahip bir modül kimliği oluşturur. (Cihaz veya modül kimliği kimlik kayıt defterinde zaten varsa, kod yalnızca mevcut cihaz veya modül bilgilerini alır.) Uygulama, her kimliğin kimliğini ve birincil anahtarını görüntüler.
Not
IoT Hub kimlik kayıt defteri yalnızca IoT hub'ına güvenli erişim sağlamak amacıyla cihaz ve modül kimliklerini depolar. Kimlik kayıt defteri, cihaz kimliklerini ve anahtarlarını güvenlik kimlik bilgileri olarak kullanmak için depolar. Kimlik kayıt defterinin her cihaz için depoladığı etkin/devre dışı bayrağını kullanarak, ilgili cihaza erişimi devre dışı bırakabilirsiniz. Uygulamanızın cihaza özgü diğer meta verileri depolaması gerekiyorsa uygulamaya özgü bir depo kullanması gerekir. Modül kimlikleri için etkin/devre dışı bayrağı yoktur. Daha fazla bilgi için bkz . IoT hub'ınızdaki kimlik kayıt defterini anlama.
Python hizmet SDK'sını kullanarak modül ikizini güncelleştirme
Bu bölümde, modül ikizi istenen özelliklerini güncelleştiren bir Python hizmet uygulaması oluşturacaksınız.
Komut isteminizde aşağıdaki komutu çalıştırarak azure-iot-hub paketini yükleyin. Önceki bölümde azure-iot-hub paketini yüklediyseniz bu adımı atlayabilirsiniz.
pip install azure-iot-hub
Metin düzenleyicisi kullanarak çalışma dizininizde UpdateModuleTwinDesiredProperties.py adlı bir dosya oluşturun.
Python dosyanıza aşağıdaki kodu ekleyin. YourIoTHubConnectionString değerini IoT hub bağlantı dizesi alma bölümünde kopyaladığınız bağlantı dizesi değiştirin.
import sys from azure.iot.hub import IoTHubRegistryManager from azure.iot.hub.models import Twin, TwinProperties CONNECTION_STRING = "YourIoTHubConnectionString" DEVICE_ID = "myFirstDevice" MODULE_ID = "myFirstModule" try: # RegistryManager iothub_registry_manager = IoTHubRegistryManager(CONNECTION_STRING) module_twin = iothub_registry_manager.get_module_twin(DEVICE_ID, MODULE_ID) print ( "" ) print ( "Module twin properties before update :" ) print ( "{0}".format(module_twin.properties) ) # Update twin twin_patch = Twin() twin_patch.properties = TwinProperties(desired={"telemetryInterval": 122}) updated_module_twin = iothub_registry_manager.update_module_twin( DEVICE_ID, MODULE_ID, twin_patch, module_twin.etag ) print ( "" ) print ( "Module twin properties after update :" ) print ( "{0}".format(updated_module_twin.properties) ) except Exception as ex: print ( "Unexpected error {0}".format(ex) ) except KeyboardInterrupt: print ( "IoTHubRegistryManager sample stopped" )
Cihaz tarafında güncelleştirmeleri alma
Bu bölümde, cihazınızda modül ikizi istenen özellikler güncelleştirmesini almak için bir Python uygulaması oluşturacaksınız.
Modülünüzü bağlantı dizesi alın. Azure portalında IoT Hub'ınıza gidin ve sol bölmede Cihazlar'ı seçin. Cihaz listesinden myFirstDevice öğesini seçin ve açın. Modül kimlikleri'nin altında myFirstModule öğesini seçin. Bağlantı dizesi (birincil anahtar) için kopyalama simgesini seçin. Aşağıdaki adımda bu bağlantı dizesi gerekir.
Komut isteminizde aşağıdaki komutu çalıştırarak azure-iot-device paketini yükleyin:
pip install azure-iot-device
Metin düzenleyicisi kullanarak çalışma dizininizde ReceiveModuleTwinDesiredPropertiesPatch.py adlı bir dosya oluşturun.
Python dosyanıza aşağıdaki kodu ekleyin. YourModuleConnectionString değerini 1. adımda kopyaladığınız modül bağlantı dizesi değiştirin.
import time from azure.iot.device import IoTHubModuleClient CONNECTION_STRING = "YourModuleConnectionString" def twin_patch_handler(twin_patch): print("") print("Twin desired properties patch received:") print(twin_patch) def main(): print ("Starting the IoT Hub Python sample...") client = IoTHubModuleClient.create_from_connection_string(CONNECTION_STRING) print ("Waiting for commands, press Ctrl-C to exit") try: # Attach the handler to the client client.on_twin_desired_properties_patch_received = twin_patch_handler while True: time.sleep(1000) except KeyboardInterrupt: print("IoTHubModuleClient sample stopped") finally: # Graceful exit print("Shutting down IoT Hub Client") client.shutdown() if __name__ == '__main__': main()
Uygulamaları çalıştırma
Bu bölümde ReceiveModuleTwinDesiredPropertiesPatch cihaz uygulamasını çalıştıracak ve ardından modülünüzün istenen özelliklerini güncelleştirmek için UpdateModuleTwinDesiredProperties hizmet uygulamasını çalıştıracaksınız.
Bir komut istemi açın ve cihaz uygulamasını çalıştırın:
python ReceiveModuleTwinDesiredPropertiesPatch.py
Ayrı bir komut istemi açın ve hizmet uygulamasını çalıştırın:
python UpdateModuleTwinDesiredProperties.py
TelemetryInterval desired özelliğinin hizmet uygulaması çıkışınızdaki güncelleştirilmiş modül ikizinde göründüğüne dikkat edin:
Aynı özellik, cihaz uygulama çıkışınızda alınan istenen özellikler düzeltme ekinde görünür:
Sonraki adımlar
IoT Hub’ı kullanmaya başlamak ve diğer IoT senaryolarını keşfetmek için bkz: