Mengirim pesan cloud-to-device dengan IoT Hub (Python)

Azure IoT Hub adalah layanan terkelola sepenuhnya yang membantu memungkinkan komunikasi dua arah yang andal dan aman antara jutaan perangkat dan ujung belakang solusi.

Artikel ini menunjukkan cara:

  • Mengirim pesan cloud-to-device (C2D) dari backend solusi Anda ke satu perangkat melalui IoT Hub

  • Menerima pesan cloud-ke-perangkat di suatu perangkat

Catatan

Fitur yang dijelaskan dalam artikel ini hanya tersedia di tingkat standar IoT Hub. Untuk informasi selengkapnya tentang tingkat IoT Hub dasar dan standar/gratis, lihat Memilih tingkat IoT Hub yang tepat untuk solusi Anda.

Di akhir artikel ini, Anda menjalankan dua aplikasi konsol Python:

  • SimulatedDevice.py: mensimulasikan perangkat yang tersambung ke hub IoT Anda dan menerima pesan cloud-ke-perangkat.

  • SendCloudToDeviceMessage.py: mengirim pesan cloud-ke-perangkat ke simulasi aplikasi perangkat melalui IoT Hub.

Untuk mempelajari selengkapnya tentang pesan cloud-ke-perangkat, lihat Mengirim pesan cloud-ke-perangkat dari hub IoT.

Catatan

IoT Hub memiliki dukungan SDK untuk banyak platform perangkat dan bahasa (termasuk C, Java, Python, dan JavaScript) melalui SDK perangkat IoT Azure.

Prasyarat

  • Akun Azure aktif. (Jika Anda tidak memiliki akun, Anda dapat membuat akun gratis hanya dalam beberapa menit.)

  • Sebuah IoT hub. Buat akun menggunakan CLI atau portal Azure.

  • Perangkat yang terdaftar. Daftarkan perangkat di portal Azure.

  • Python versi 3.7 atau yang lebih baru disarankan. Pastikan untuk menggunakan penginstalan 32-bit atau 64-bit seperti yang dipersyaratkan oleh pengaturan Anda. Saat diminta selama instalasi, pastikan untuk menambahkan Python ke variabel lingkungan khusus platform Anda.

  • Pastikan port 8883 terbuka di firewall Anda. Sampel perangkat dalam artikel ini menggunakan protokol MQTT, yang berkomunikasi melalui port 8883. Port ini mungkin diblokir di beberapa lingkungan jaringan perusahaan dan pendidikan. Untuk mengetahui informasi selengkapnya dan cara mengatasi masalah ini, lihat Menyambungkan ke IoT Hub (MQTT).

Menerima pesan di aplikasi perangkat yang disimulasikan

Di bagian ini, Anda membuat aplikasi konsol Python untuk menyimulasikan perangkat dan menerima pesan cloud-to-device dari IoT hub.

  1. Dari perintah di direktori kerja Anda, instal Azure IoT Hub Device SDK untuk Python:

    pip install azure-iot-device
    
  2. Menggunakan editor teks, buat file bernama SimulatedDevice.py.

  3. Tambahkan variabel dan pernyataan import berikut di awal file TpmEnrollment.py:

    import time
    from azure.iot.device import IoTHubDeviceClient
    
    RECEIVED_MESSAGES = 0
    
  4. Tambahkan kode berikut ke file SimulatedDevice.py. {deviceConnectionString} Ganti nilai tempat penampung dengan string koneksi untuk perangkat terdaftar di Prasyarat:

    CONNECTION_STRING = "{deviceConnectionString}"
    
  5. Tentukan fungsi berikut yang digunakan untuk mencetak pesan yang diterima ke konsol:

    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. Tambahkan kode berikut untuk menginisialisasi klien dan menunggu untuk menerima pesan cloud-to-device:

    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. Tambahkan fungsi utama berikut:

    if __name__ == '__main__':
        main()
    
  8. Simpan dan tutup file SimulatedDevice.py.

Untuk mengetahui informasi selengkapnya tentang siklus hidup pesan cloud-ke-perangkat cara IoT hub memproses pesan cloud-ke-perangkat, lihat Mengirimkan pesan cloud-ke-perangkat dari IoT hub.

Mendapatkan string koneksi IoT hub

Dalam artikel ini, Anda membuat layanan backend untuk mengirim pesan cloud-ke-perangkat melalui IoT Hub. Untuk mengirim pesan cloud ke perangkat, layanan Anda memerlukan izin sambungan layanan. Secara default, setiap IoT Hub dibuat dengan kebijakan akses bersama bernama layanan yang memberikan izin ini.

Untuk mendapatkan string koneksi Azure IoT Hub untuk kebijakan layanan, ikuti langkah-langkah berikut:

  1. Di portal Microsoft Azure, pilih Grup sumber daya. Pilih grup sumber daya tempat hub Anda berada, lalu pilih hub Anda dari daftar sumber daya.

  2. Di panel sisi kiri hub IoT Anda, pilih Kebijakan akses bersama.

  3. Dari daftar kebijakan, pilih kebijakan layanan.

  4. Salin String koneksi utama dan simpan nilainya.

Cuplikan layar menampilkan cara mengambil string koneksi dari IoT Hub Anda di portal Azure.

Untuk mengetahui informasi selengkapnya tentang kebijakan dan izin akses bersama IoT Hub, lihat Kontrol akses dan izin.

Mengirim pesan cloud-to-device

Di bagian ini, Anda membuat aplikasi konsol Python yang mengirim pesan cloud-to-device ke aplikasi perangkat yang disimulasikan. Anda memerlukan ID perangkat dari perangkat dan string koneksi IoT hub.

  1. Di direktori kerja Anda, buka perintah dan instal Azure IoT Hub Service SDK untuk Python.

    pip install azure-iot-hub
    
  2. Dengan menggunakan editor teks, buat file bernama SendCloudToDeviceMessage.py.

  3. Tambahkan variabel dan pernyataan import berikut di awal file SendCloudToDeviceMessage.py:

    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. Tambahkan kode berikut ke file SendCloudToDeviceMessage.py. Ganti nilai tempat penampung {iot hub connection string} dan {device id} dengan string koneksi hub IoT dan ID perangkat yang Anda catat sebelumnya:

    CONNECTION_STRING = "{IoTHubConnectionString}"
    DEVICE_ID = "{deviceId}"
    
  5. Tambahkan kode berikut untuk mengirim pesan ke perangkat Anda:

    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. Tambahkan fungsi utama berikut:

    if __name__ == '__main__':
        print ( "Starting the Python IoT Hub C2D Messaging service sample..." )
    
        iothub_messaging_sample_run()
    
  7. Simpan dan tutup file SendCloudToDeviceMessage.py.

Menjalankan aplikasi

Anda sekarang siap untuk menjalankan aplikasi.

  1. Pada prompt perintah di direktori kerja Anda, jalankan perintah berikut untuk mendengarkan pesan cloud-to-device:

    python SimulatedDevice.py
    

    Menjalankan aplikasi perangkat yang disimulasikan

  2. Buka perintah baru di direktori kerja Anda dan jalankan perintah berikut untuk mengirim pesan cloud-to-device:

    python SendCloudToDeviceMessage.py
    

    Menjalankan aplikasi untuk mengirim perintah cloud-to-device

  3. Perhatikan pesan yang diterima oleh perangkat.

    Pesan diterima

Langkah berikutnya

Dalam artikel ini, Anda mempelajari cara mengirim dan menerima pesan cloud ke perangkat.