Aracılığıyla paylaş


Cihaz yönetimini kullanmaya başlama (Python)

Arka uç uygulamaları, cihazlarda cihaz yönetimi eylemlerini uzaktan başlatmak ve izlemek için cihaz ikizleri ve doğrudan yöntemler gibi Azure IoT Hub temel öğelerini kullanabilir. Bu makalede bir arka uç uygulamasının ve cihaz uygulamasının IoT Hub'ı kullanarak uzak cihaz yeniden başlatmayı başlatmak ve izlemek için birlikte nasıl çalışabileceği gösterilir.

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.

Buluttaki bir arka uç uygulamasından cihaz yönetimi eylemlerini (yeniden başlatma, fabrika sıfırlama ve üretici yazılımı güncelleştirmesi gibi) başlatmak için doğrudan bir yöntem kullanın. Cihaz aşağıdakiler için sorumludur:

  • IoT Hub'dan gönderilen yöntem isteğini işleme.

  • Cihazda ilgili cihaza özgü eylemi başlatma.

  • IoT Hub'a bildirilen özellikler aracılığıyla durum güncelleştirmeleri sağlama.

Cihaz yönetimi eylemlerinizin ilerleme durumunu raporlamak üzere cihaz ikizi sorguları çalıştırmak için bulutta bir arka uç uygulaması kullanabilirsiniz.

Bu makalede şunların nasıl oluşturulacağı gösterilmektedir:

  • dmpatterns_getstarted_device.py: Cihazı yeniden başlatan ve son yeniden başlatma zamanını bildiren doğrudan bir yönteme sahip sanal cihaz uygulaması. Doğrudan yöntemler buluttan çağrılır.

  • dmpatterns_getstarted_service.py: IoT hub'ınız aracılığıyla sanal cihaz uygulamasında doğrudan yöntemi çağıran bir Python konsol uygulaması. Yanıtı görüntüler ve bildirilen özellikleri güncelleştirir.

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.

  • IoT hub'ınıza kayıtlı bir cihaz. IoT hub'ınızda bir cihaz yoksa Cihazı kaydetme bölümünde yer alan adımları izleyin.

  • 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ğlanma.

IoT hub'ına yeni bir cihaz kaydetme

Bu bölümde, bu makale için bir cihaz kimliği oluşturmak için Azure CLI'yi kullanacaksınız. Cihaz kimlikleri büyük/küçük harfe duyarlıdır.

  1. Azure Cloud Shell’i açın.

  2. Azure Cloud Shell'de aşağıdaki komutu çalıştırarak Azure CLI için Microsoft Azure IoT Uzantısı'nı yükleyin:

    az extension add --name azure-iot
    
  3. adlı myDeviceId yeni bir cihaz kimliği oluşturun ve şu komutlarla cihaz bağlantı dizesi alın:

    az iot hub device-identity create --device-id myDeviceId --hub-name {Your IoT Hub name} --resource-group {Resource group of the Hub}
    az iot hub device-identity connection-string show --device-id myDeviceId --hub-name {Your IoT Hub name} --resource-group {Resource group of the Hub} -o table
    

    Önemli

    Cihaz kimliği; müşteri desteği ve sorun giderme için toplanan günlüklerde görünüyor olabilir, bu nedenle adlandırırken herhangi bir önemli bilgi vermekten kaçının.

Sonuçtan cihaz bağlantı dizesi not edin. Bu cihaz bağlantı dizesi, cihaz uygulaması tarafından IoT Hub'ınıza cihaz olarak bağlanmak için kullanılır.

Doğrudan yöntemle cihaz uygulaması oluşturma

Bu bölümde şunları yapacaksınız:

  • Bulut tarafından çağrılan doğrudan bir yönteme yanıt veren bir Python konsol uygulaması oluşturun.

  • Cihaz yeniden başlatma benzetimi yapın.

  • Cihaz ikizi sorgularının cihazları ve en son ne zaman yeniden başlatıldıklarını tanımlamasını sağlamak için bildirilen özellikleri kullanın.

Daha önce kullandığınız Azure Cloud Shell'de veya Python ile başka bir ortamda cihaz kodunu oluşturun.

  1. Komut isteminizde aşağıdaki komutu çalıştırarak azure-iot-device paketini yükleyin:

    pip install azure-iot-device
    
  2. Bir metin düzenleyicisi kullanarak çalışma dizininizde dmpatterns_getstarted_device.py adlı bir dosya oluşturun.

  3. dmpatterns_getstarted_device.py dosyasının başlangıcına aşağıdaki import deyimleri ekleyin.

    import time
    import datetime
    from azure.iot.device import IoTHubDeviceClient, MethodResponse
    
  4. CONNECTION_STRING değişkenini ekleyin. {deviceConnectionString} Yer tutucu değerini cihazınızla bağlantı dizesi değiştirin. Bu bağlantı dizesi daha önce IoT hub'ına yeni bir cihaz kaydetme bölümünde kopyalamıştınız.

    CONNECTION_STRING = "{deviceConnectionString}"
    
  5. Cihazdaki doğrudan yöntemler için yapılandırılmış bir istemcinin örneğini oluşturmak için aşağıdaki işlevi ekleyin.

    def create_client():
        # Instantiate the client
        client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
    
        # Define the handler for method requests
        def method_request_handler(method_request):
            if method_request.name == "rebootDevice":
                # Act on the method by rebooting the device
                print("Rebooting device")
                time.sleep(20)
                print("Device rebooted")
    
                # ...and patching the reported properties
                current_time = str(datetime.datetime.now())
                reported_props = {"rebootTime": current_time}
                client.patch_twin_reported_properties(reported_props)
                print( "Device twins updated with latest rebootTime")
    
                # Create a method response indicating the method request was resolved
                resp_status = 200
                resp_payload = {"Response": "This is the response from the device"}
                method_response = MethodResponse(method_request.request_id, resp_status, resp_payload)
    
            else:
                # Create a method response indicating the method request was for an unknown method
                resp_status = 404
                resp_payload = {"Response": "Unknown method"}
                method_response = MethodResponse(method_request.request_id, resp_status, resp_payload)
    
            # Send the method response
            client.send_method_response(method_response)
    
        try:
            # Attach the handler to the client
            client.on_method_request_received = method_request_handler
        except:
            # In the event of failure, clean up
            client.shutdown()
    
        return client
    
  6. Doğrudan yöntem örneğini başlatın ve bekleyin.

    def main():
        print ("Starting the IoT Hub Python sample...")
        client = create_client()
    
        print ("Waiting for commands, press Ctrl-C to exit")
        try:
            # Wait for program exit
            while True:
                time.sleep(1000)
        except KeyboardInterrupt:
            print("IoTHubDeviceClient sample stopped")
        finally:
            # Graceful exit
            print("Shutting down IoT Hub Client")
            client.shutdown()
    
    if __name__ == '__main__':
        main()
    
  7. dmpatterns_getstarted_device.py dosyasını kaydedin ve kapatın.

Not

Sade ve basit bir anlatım gözetildiği için bu öğretici herhangi bir yeniden deneme ilkesi uygulamaz. Üretim kodunda Geçici Hata İşleme makalesinde önerilen yeniden deneme ilkelerini (üstel geri alma gibi) uygulamanız gerekir.

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

Bu makalede, bir cihazda doğrudan yöntem çağıran bir arka uç hizmeti oluşturacaksınız. IoT Hub aracılığıyla bir cihazda doğrudan yöntem çağırmak için hizmetinizin hizmet bağlama iznine sahip olması gerekir. Varsayılan olarak, her IoT Hub bu izni veren hizmet adlı bir paylaşılan erişim ilkesiyle oluşturulur.

Hizmet ilkesi için IoT Hub 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. IoT hub'ınızın sol tarafındaki bölmede Paylaşılan erişim ilkeleri'ni seçin.

  3. İlke listesinden hizmet ilkesini seçin.

  4. Birincil bağlantı dizesi kopyalayın ve değeri kaydedin.

Azure portalında IoT Hub'ınızdan bağlantı dizesi almayı 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.

Yeniden başlatmayı tetikleyen bir hizmet uygulaması oluşturma

Bu bölümde, doğrudan bir yöntem kullanarak bir cihazda uzaktan yeniden başlatma başlatan bir Python konsol uygulaması oluşturacaksınız. Uygulama, cihaz için son yeniden başlatma zamanını bulmak için cihaz ikizi sorgularını kullanır.

Azure Cloud Shell'de veya Python ile başka bir ortamda konsol kodunu oluşturun.

  1. Komut isteminizde aşağıdaki komutu çalıştırarak azure-iot-hub paketini yükleyin:

    pip install azure-iot-hub
    
  2. Bir metin düzenleyicisi kullanarak çalışma dizininizde dmpatterns_getstarted_service.py adlı bir dosya oluşturun.

  3. dmpatterns_getstarted_service.py dosyasının başlangıcına aşağıdaki import deyimleri ekleyin.

    import sys, time
    
    from azure.iot.hub import IoTHubRegistryManager
    from azure.iot.hub.models import CloudToDeviceMethod, CloudToDeviceMethodResult, Twin
    
  4. Aşağıdaki değişken bildirimlerini ekleyin. {IoTHubConnectionString} Yer tutucu değerini Daha önce IoT hub'ını alma bağlantı dizesi'nde kopyaladığınız IoT hub'ı bağlantı dizesi değiştirin. {deviceId} Yer tutucu değerini IoT hub'ına yeni bir cihaz kaydetme bölümünde kaydettiğiniz cihaz kimliğiyle değiştirin.

    CONNECTION_STRING = "{IoTHubConnectionString}"
    DEVICE_ID = "{deviceId}"
    
    METHOD_NAME = "rebootDevice"
    METHOD_PAYLOAD = "{\"method_number\":\"42\"}"
    TIMEOUT = 60
    WAIT_COUNT = 10
    
  5. Hedef cihazı yeniden başlatmak için cihaz yöntemini çağırmak, ardından cihaz ikizlerini sorgulamak ve son yeniden başlatma zamanını almak için aşağıdaki işlevi ekleyin.

    def iothub_devicemethod_sample_run():
        try:
            # Create IoTHubRegistryManager
            registry_manager = IoTHubRegistryManager(CONNECTION_STRING)
    
            print ( "" )
            print ( "Invoking device to reboot..." )
    
            # Call the direct method.
            deviceMethod = CloudToDeviceMethod(method_name=METHOD_NAME, payload=METHOD_PAYLOAD)
            response = registry_manager.invoke_device_method(DEVICE_ID, deviceMethod)
    
            print ( "" )
            print ( "Successfully invoked the device to reboot." )
    
            print ( "" )
            print ( response.payload )
    
            while True:
                print ( "" )
                print ( "IoTHubClient waiting for commands, press Ctrl-C to exit" )
    
                status_counter = 0
                while status_counter <= WAIT_COUNT:
                    twin_info = registry_manager.get_twin(DEVICE_ID)
    
                    if twin_info.properties.reported.get("rebootTime") != None :
                        print ("Last reboot time: " + twin_info.properties.reported.get("rebootTime"))
                    else:
                        print ("Waiting for device to report last reboot time...")
    
                    time.sleep(5)
                    status_counter += 1
    
        except Exception as ex:
            print ( "" )
            print ( "Unexpected error {0}".format(ex) )
            return
        except KeyboardInterrupt:
            print ( "" )
            print ( "IoTHubDeviceMethod sample stopped" )
    
    if __name__ == '__main__':
        print ( "Starting the IoT Hub Service Client DeviceManagement Python sample..." )
        print ( "    Connection string = {0}".format(CONNECTION_STRING) )
        print ( "    Device ID         = {0}".format(DEVICE_ID) )
    
        iothub_devicemethod_sample_run()
    
  6. dmpatterns_getstarted_service.py dosyasını kaydedin ve kapatın.

Uygulamaları çalıştırma

Artık cihaz kodunu ve cihazın yeniden başlatılmasını başlatan hizmet kodunu çalıştırmaya hazırsınız.

  1. Cihazı oluşturduğunuz komut isteminde, yeniden başlatma doğrudan yöntemini dinlemeye başlamak için aşağıdaki komutu çalıştırın.

    python dmpatterns_getstarted_device.py
    
  2. Hizmeti oluşturduğunuz komut isteminde aşağıdaki komutu çalıştırarak uzaktan yeniden başlatmayı tetikleyin ve cihaz ikizinin son yeniden başlatma zamanını bulması için sorgu yapın.

    python dmpatterns_getstarted_service.py
    
  3. Konsolunda doğrudan yönteme cihaz yanıtını görürsünüz.

    Aşağıda, yeniden başlatma doğrudan yöntemine cihaz yanıtı gösterilmektedir:

    Sanal cihaz uygulaması çıkışı

    Aşağıda, yeniden başlatma doğrudan yöntemini çağıran ve durum için cihaz ikizini yoklayan hizmet gösterilmektedir:

    Yeniden başlatma hizmeti çıkışını tetikleme

Cihaz yönetimi eylemlerini özelleştirme ve genişletme

IoT çözümleriniz tanımlı cihaz yönetimi desenleri kümesini genişletebilir veya cihaz ikizi ve buluttan cihaza yöntemi temel öğelerini kullanarak özel desenleri etkinleştirebilir. Cihaz yönetimi eylemlerine diğer örnekler arasında fabrika sıfırlaması, üretici yazılımı güncelleştirmesi, yazılım güncelleştirmesi, güç yönetimi, ağ ve bağlantı yönetimi ve veri şifreleme sayılabilir.

Cihaz bakım pencereleri

Genellikle, cihazları kesintileri ve kapalı kalma süresini en aza indiren bir zamanda eylem gerçekleştirecek şekilde yapılandırırsınız. Cihaz bakım pencereleri, bir cihazın yapılandırmasını güncelleştirme zamanını tanımlamak için yaygın olarak kullanılan bir desendir. Arka uç çözümleriniz, cihazınızda bakım penceresi sağlayan bir ilke tanımlamak ve etkinleştirmek için cihaz ikizinin istenen özelliklerini kullanabilir. Cihaz bakım penceresi ilkesini aldığında, ilkenin durumunu bildirmek için cihaz ikizinin bildirilen özelliğini kullanabilir. Arka uç uygulaması daha sonra cihaz ikizi sorgularını kullanarak cihazların ve her ilkenin uyumluluğunu kanıtlayabilir.

Sonraki adımlar

Bu makalede, bir cihazda uzaktan yeniden başlatma tetikleme için doğrudan bir yöntem kullandınız. Bildirilen özellikleri kullanarak cihazdan son yeniden başlatma zamanını bildirdiniz ve cihazın buluttan son yeniden başlatma zamanını bulmak için cihaz ikizini sorguladıysanız.

ToToTo, Raspberry Pi 3 B+ Başvuru Görüntüsünü kullanarak Azure IoT Hub için Cihaz Güncelleştirmesi makalesinde IoT Hub'ı ve uçtan uca görüntü tabanlı güncelleştirme gibi cihaz yönetimi desenlerini kullanmaya devam etmek için.

IoT çözümünüzü genişletmeyi ve yöntem çağrılarını birden çok cihazda zamanlamayı öğrenmek için bkz . İşleri zamanlama ve yayınlama.