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.
Ç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 SimulatedDevice.py adlı bir dosya oluşturun.
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
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}"
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))
İ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()
Aşağıdaki ana işlevi ekleyin:
if __name__ == '__main__': main()
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:
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.
IoT hub'ınızın sol tarafındaki bölmede Paylaşılan erişim ilkeleri'ni seçin.
İlke listesinden hizmet ilkesini seçin.
Birincil bağlantı dizesini kopyalayın ve değeri kaydedin.
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.
Ç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
Metin düzenleyicisi kullanarak SendCloudToDeviceMessage.py adlı bir dosya oluşturun.
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}"
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}"
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" )
Aşağıdaki ana işlevi ekleyin:
if __name__ == '__main__': print ( "Starting the Python IoT Hub C2D Messaging service sample..." ) iothub_messaging_sample_run()
SendCloudToDeviceMessage.py dosyasını kaydedin ve kapatın.
Uygulamaları çalıştırma
Artık uygulamaları çalıştırmaya hazırsınız.
Çalışma dizininizdeki komut isteminde, buluttan cihaza iletileri dinlemek için aşağıdaki komutu çalıştırın:
python SimulatedDevice.py
Ç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
Cihaz tarafından alınan iletileri not alın.
Sonraki adımlar
Bu makalede, buluttan cihaza iletileri göndermeyi ve almayı öğrendiniz.
Buluttan cihaza iletiler hakkında daha fazla bilgi edinmek için bkz. IoT hub'ından buluttan cihaza iletiler gönderme.
IoT Hub ileti biçimleri hakkında daha fazla bilgi edinmek için bkz. İleti oluşturma ve okuma IoT Hub.