IoT Hub (Python) ile buluttan cihaza iletiler gönderme

Azure IoT Hub, milyonlarca cihaz ve bir çözüm arka ucu arasında güvenilir ve güvenli çift yönlü iletişimin etkinleştirilmesine yardımcı olan tam olarak yönetilen bir hizmettir.

Bu makale, şunları nasıl yapacağınızı gösterir:

  • IoT Hub aracılığıyla çözüm arka ucunuzdan tek bir cihaza buluttan cihaza (C2D) iletiler gönderme

  • Cihazda buluttan cihaza iletileri alma

Not

Bu makalede açıklanan özellikler yalnızca standart IoT Hub 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ı seçme.

Bu makalenin sonunda iki Python konsol uygulaması çalıştıracaksınız:

  • SimulatedDevice.py: IoT hub'ınıza bağlanan ve buluttan cihaza iletileri alan bir cihazın simülasyonunu oluşturur.

  • SendCloudToDeviceMessage.py: IoT Hub aracılığıyla sanal cihaz uygulamasına buluttan cihaza iletiler gönderir.

Buluttan cihaza iletiler hakkında daha fazla bilgi edinmek için bkz. IoT hub'ından buluttan cihaza iletiler gönderme.

Not

IoT Hub, Azure IoT cihaz SDK'ları aracılığıyla birçok cihaz platformu ve dili (C, Java, Python ve JavaScript) için SDK desteğine sahiptir.

Önkoşullar

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

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

  • Kayıtlı bir cihaz. Azure portal 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 bağlanma (MQTT).

Simülasyon cihazı uygulamasında ileti alma

Bu bölümde, bir cihazın simülasyonunu yapmak ve IoT hub'ından buluttan cihaza iletileri almak için bir Python konsol uygulaması oluşturacaksı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 SimulatedDevice.py adlı bir dosya oluşturun.

  3. SimulatedDevice.py dosyasının başlangıcına aşağıdaki import deyimleri ve değişkenleri ekleyin:

    import time
    from azure.iot.device import IoTHubDeviceClient
    
    RECEIVED_MESSAGES = 0
    
  4. SimulatedDevice.py dosyasına aşağıdaki kodu ekleyin. Önkoşullar bölümünde {deviceConnectionString} yer tutucu değerini kayıtlı cihazın bağlantı dizesiyle değiştirin:

    CONNECTION_STRING = "{deviceConnectionString}"
    
  5. Alınan iletileri konsola yazdırmak için kullanılan aşağıdaki işlevi tanımlayın:

    def message_handler(message):
        global RECEIVED_MESSAGES
        RECEIVED_MESSAGES += 1
        print("")
        print("Message received:")
    
        # print data from both system and application (custom) properties
        for property in vars(message).items():
            print ("    {}".format(property))
    
        print("Total calls received: {}".format(RECEIVED_MESSAGES))
    
  6. İstemciyi başlatmak ve buluttan cihaza iletisini almayı beklemek için aşağıdaki kodu ekleyin:

    def main():
        print ("Starting the Python IoT Hub C2D Messaging device sample...")
    
        # Instantiate the client
        client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
    
        print ("Waiting for C2D messages, press Ctrl-C to exit")
        try:
            # Attach the handler to the client
            client.on_message_received = message_handler
    
            while True:
                time.sleep(1000)
        except KeyboardInterrupt:
            print("IoT Hub C2D Messaging device sample stopped")
        finally:
            # Graceful exit
            print("Shutting down IoT Hub Client")
            client.shutdown()
    
  7. Aşağıdaki ana işlevi ekleyin:

    if __name__ == '__main__':
        main()
    
  8. SimulatedDevice.py dosyasını kaydedin ve kapatın.

Buluttan cihaza ileti yaşam döngüsü ve IoT Hub buluttan cihaza iletileri nasıl işlediği hakkında daha fazla bilgi için bkz. IoT hub'ından buluttan cihaza iletiler gönderme.

IoT hub bağlantı dizesini alma

Bu makalede, IoT Hub aracılığıyla buluttan cihaza iletiler göndermek için bir arka uç hizmeti oluşturacaksınız. Buluttan cihaza iletiler göndermek 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 ilkesinin IoT Hub bağlantı dizesini almak için şu adımları izleyin:

  1. Azure portalKaynak 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ı dizesini kopyalayın ve değeri kaydedin.

Azure portal bağlantı dizesini IoT Hub alma işlemini gösteren ekran görüntüsü.

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

Buluttan cihaza ileti gönderme

Bu bölümde, sanal cihaz uygulamasına buluttan cihaza iletiler gönderen bir Python konsol uygulaması oluşturacaksınız. Cihazınızdan cihaz kimliğine ve IoT hub bağlantı dizenize ihtiyacınız vardır.

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

    pip install azure-iot-hub
    
  2. Metin düzenleyicisi kullanarak SendCloudToDeviceMessage.py adlı bir dosya oluşturun.

  3. SendCloudToDeviceMessage.py dosyasının başlangıcına aşağıdaki import deyimleri ve değişkenleri ekleyin:

    import random
    import sys
    from azure.iot.hub import IoTHubRegistryManager
    
    MESSAGE_COUNT = 2
    AVG_WIND_SPEED = 10.0
    MSG_TXT = "{\"service client sent a message\": %.2f}"
    
  4. Aşağıdaki kodu SendCloudToDeviceMessage.py dosyasına ekleyin. {iot hub connection string} ve {device id} yer tutucu değerlerini daha önce not ettiğiniz IoT hub bağlantı dizesi ve cihaz kimliğiyle değiştirin:

    CONNECTION_STRING = "{IoTHubConnectionString}"
    DEVICE_ID = "{deviceId}"
    
  5. Cihazınıza ileti göndermek için aşağıdaki kodu ekleyin:

    def iothub_messaging_sample_run():
        try:
            # Create IoTHubRegistryManager
            registry_manager = IoTHubRegistryManager(CONNECTION_STRING)
    
            for i in range(0, MESSAGE_COUNT):
                print ( 'Sending message: {0}'.format(i) )
                data = MSG_TXT % (AVG_WIND_SPEED + (random.random() * 4 + 2))
    
                props={}
                # optional: assign system properties
                props.update(messageId = "message_%d" % i)
                props.update(correlationId = "correlation_%d" % i)
                props.update(contentType = "application/json")
    
                # optional: assign application properties
                prop_text = "PropMsg_%d" % i
                props.update(testProperty = prop_text)
    
                registry_manager.send_c2d_message(DEVICE_ID, data, properties=props)
    
            try:
                # Try Python 2.xx first
                raw_input("Press Enter to continue...\n")
            except:
                pass
                # Use Python 3.xx in the case of exception
                input("Press Enter to continue...\n")
    
        except Exception as ex:
            print ( "Unexpected error {0}" % ex )
            return
        except KeyboardInterrupt:
            print ( "IoT Hub C2D Messaging service sample stopped" )
    
  6. Aşağıdaki ana işlevi ekleyin:

    if __name__ == '__main__':
        print ( "Starting the Python IoT Hub C2D Messaging service sample..." )
    
        iothub_messaging_sample_run()
    
  7. SendCloudToDeviceMessage.py dosyasını kaydedin ve kapatın.

Uygulamaları çalıştırma

Artık uygulamaları çalıştırmaya hazırsınız.

  1. Çalışma dizininizdeki komut isteminde, buluttan cihaza iletileri dinlemek için aşağıdaki komutu çalıştırın:

    python SimulatedDevice.py
    

    Simülasyon cihazı uygulamasını çalıştırma

  2. Çalışma dizininizde yeni bir komut istemi açın ve buluttan cihaza iletiler göndermek için aşağıdaki komutu çalıştırın:

    python SendCloudToDeviceMessage.py
    

    Buluttan cihaza komutunu göndermek için uygulamayı çalıştırın

  3. Cihaz tarafından alınan iletileri not alın.

    İleti alındı

Sonraki adımlar

Bu makalede, buluttan cihaza iletileri göndermeyi ve almayı öğrendiniz.