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.
Dari perintah di direktori kerja Anda, instal Azure IoT Hub Device SDK untuk Python:
pip install azure-iot-device
Menggunakan editor teks, buat file bernama SimulatedDevice.py.
Tambahkan variabel dan pernyataan
import
berikut di awal file TpmEnrollment.py:import time from azure.iot.device import IoTHubDeviceClient RECEIVED_MESSAGES = 0
Tambahkan kode berikut ke file SimulatedDevice.py.
{deviceConnectionString}
Ganti nilai tempat penampung dengan string koneksi untuk perangkat terdaftar di Prasyarat:CONNECTION_STRING = "{deviceConnectionString}"
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))
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()
Tambahkan fungsi utama berikut:
if __name__ == '__main__': main()
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:
Di portal Microsoft Azure, pilih Grup sumber daya. Pilih grup sumber daya tempat hub Anda berada, lalu pilih hub Anda dari daftar sumber daya.
Di panel sisi kiri hub IoT Anda, pilih Kebijakan akses bersama.
Dari daftar kebijakan, pilih kebijakan layanan.
Salin String koneksi utama dan simpan nilainya.
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.
Di direktori kerja Anda, buka perintah dan instal Azure IoT Hub Service SDK untuk Python.
pip install azure-iot-hub
Dengan menggunakan editor teks, buat file bernama SendCloudToDeviceMessage.py.
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}"
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}"
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" )
Tambahkan fungsi utama berikut:
if __name__ == '__main__': print ( "Starting the Python IoT Hub C2D Messaging service sample..." ) iothub_messaging_sample_run()
Simpan dan tutup file SendCloudToDeviceMessage.py.
Menjalankan aplikasi
Anda sekarang siap untuk menjalankan aplikasi.
Pada prompt perintah di direktori kerja Anda, jalankan perintah berikut untuk mendengarkan pesan cloud-to-device:
python SimulatedDevice.py
Buka perintah baru di direktori kerja Anda dan jalankan perintah berikut untuk mengirim pesan cloud-to-device:
python SendCloudToDeviceMessage.py
Perhatikan pesan yang diterima oleh perangkat.
Langkah berikutnya
Dalam artikel ini, Anda mempelajari cara mengirim dan menerima pesan cloud ke perangkat.
Untuk mempelajari selengkapnya tentang pesan cloud-ke-perangkat, lihat Mengirim pesan cloud-ke-perangkat dari hub IoT.
Untuk mempelajari selengkapnya tentang format pesan IoT Hub, lihat Membuat dan membaca pesan IoT Hub.