Topik ini menjelaskan cara menggunakan pustaka MQTT Paho untuk Python guna menghubungkan perangkat ke IoT Platform dan mengaktifkan pengiriman pesan.
Prasyarat
Produk dan perangkat telah dibuat dalam suatu instans di Konsol IoT Platform. Sertifikat perangkat dan Titik akhir MQTT telah diperoleh. Informasi sertifikat mencakup ProductKey, DeviceName, dan DeviceSecret. Untuk informasi lebih lanjut, lihat topik-topik berikut:
Siapkan lingkungan pengembangan
Disarankan menggunakan Python 3.6.
Linux
Jalankan perintah berikut untuk menginstal Python:
PentingDalam topik ini, izin pengguna biasa digunakan untuk semua operasi. Jika Anda memerlukan izin administrator untuk operasi tertentu, jalankan perintah sudo.
sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get update sudo apt-get install python3.6 wget https://bootstrap.pypa.io/get-pip.py sudo python3.6 get-pip.py python3.6 -m pip install --upgrade pip setuptools wheel sudo apt-get install python3.6-venvWindows
Instal salah satu paket berikut sesuai dengan sistem operasi Anda:
32-bit: python-3.6.7.exe
64-bit: python-3.6.7-amd64.exe
macOS
Unduh paket python-3.6.7-macosx10.9.pkg.
Unduh pustaka MQTT Paho untuk Python
Untuk informasi lebih lanjut tentang proyek Paho dan bahasa pemrograman yang didukung, lihat Eclipse Paho Downloads.
Jalankan perintah berikut untuk menginstal pustaka MQTT Paho untuk Python. Untuk informasi lebih lanjut, lihat Paho-MQTT.
pip install paho-mqtt==1.6.1Demo ini tidak mendukung pustaka MQTT Paho versi 2.0.0.
Menghubungkan perangkat ke IoT Platform
File MqttSign.py mendefinisikan fungsi yang dipanggil untuk mendapatkan parameter koneksi MQTT. Anda harus memanggil fungsi ini untuk menghubungkan perangkat ke IoT Platform.
Fungsi:
Fungsi ini digunakan untuk mendapatkan parameter koneksi MQTT berikut: username, password, dan mqttClientId.
Parameter input:
Parameter
Tipe
Deskripsi
productKey
String
ProductKey dari produk tempat perangkat tersebut termasuk. Parameter ini digunakan untuk mengidentifikasi perangkat di IoT Platform.
deviceName
String
DeviceName dari perangkat. Parameter ini digunakan untuk mengidentifikasi perangkat di IoT Platform.
deviceSecret
String
DeviceSecret dari perangkat. Parameter ini digunakan untuk mengidentifikasi perangkat di IoT Platform.
clientId
String
ClientID dari perangkat. Untuk mengidentifikasi perangkat secara efisien, kami sarankan Anda menggunakan alamat MAC atau nomor seri (SN) perangkat sebagai ClientID.
timeStamp
String
Timestamp yang menunjukkan waktu saat ini dalam milidetik. Parameter ini opsional.
Parameter output:
Parameter
Tipe
Deskripsi
mqttUsername
String
Nama pengguna yang digunakan untuk membuat koneksi MQTT.
mqttPassword
String
Kata sandi yang digunakan untuk membuat koneksi MQTT.
mqttClientId
String
ID dari klien MQTT.
Tambahkan file program yang dapat menghubungkan perangkat ke IoT Platform.
Untuk mendapatkan parameter koneksi MQTT, Anda harus menulis program untuk memanggil fungsi dalam file MqttSign.py.
Bagian ini memberikan instruksi pengembangan dan kode contoh.
Tentukan informasi perangkat.
# atur info perangkat, termasuk product key, device name, dan device secret productKey = "a1LhUsK***" deviceName = "python***" deviceSecret = "bdd043d193782d11***" # atur timestamp, clientid, topik langganan, dan topik publikasi timeStamp = str((int(round(time.time() * 1000)))) clientId = "192.168.****" subTopic = "/" + productKey + "/" + deviceName + "/user/get" pubTopic = "/" + productKey + "/" + deviceName + "/user/update"Tentukan informasi koneksi MQTT.
Panggil fungsi
calculate_sign_timedalam file MqttSign.py. Fungsi ini mengembalikan parametermqttUsername, mqttPassword, dan mqttClientId berdasarkan nilai-nilai parameter input berikut: deviceSecret, timeStamp, clientId, productKey, dan deviceName.Dalam contoh ini, koneksi TCP berbasis Transport Layer Security (TLS) dibuat. Anda harus unduh sertifikat root untuk mengonfigurasi parameter koneksi.
# atur host, port host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" # instanceId = "***" # host = instanceId + ".mqtt.iothub.aliyuncs.com" port = 1883 # atur tls crt, keepalive tls_crt = "root.crt" keepAlive = 300 # hitung info login auth, dan atur ke dalam opsi koneksi m = AuthIfo() m.calculate_sign_time(productKey, deviceName, deviceSecret, clientId, timeStamp) client = mqtt.Client(m.mqttClientId) client.username_pw_set(username=m.mqttUsername, password=m.mqttPassword) client.tls_set(tls_crt)CatatanJika Anda menggunakan instans publik versi lama, ganti cn-shanghai dalam
host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"dengan ID wilayah tempat perangkat berada. Untuk informasi lebih lanjut tentang format ID wilayah, lihat Wilayah yang Didukung.Jika Anda menggunakan instans publik versi baru atau instans Edisi Perusahaan, ganti instanceId dalam
host = instanceId + ".mqtt.iothub.aliyuncs.com"dengan ID instans.Untuk mendapatkan Titik akhir MQTT, lakukan langkah-langkah berikut: Masuk ke IoT Platform console. Di halaman Overview, klik kartu instans yang ingin Anda kelola. Titik akhir MQTT ditampilkan di halaman Detail Instans. Untuk informasi lebih lanjut, lihat Lihat Titik Akhir dari Sebuah Instans.
Untuk informasi lebih lanjut tentang instans IoT Platform, lihat Ikhtisar.
Panggil fungsi
Connect()untuk menghubungkan perangkat ke IoT Platform.def on_connect(client, userdata, flags, rc): if rc == 0: print("koneksi berhasil!") else: print("koneksi gagal... kode kesalahan adalah:" + str(rc)) def connect_mqtt(): client.on_connect = on_connect client.connect(host, port, keepAlive) return clientPanggil fungsi Publish() untuk menerbitkan pesan. Anda harus menentukan topik tempat pesan diterbitkan dan muatan pesan.
def publish_message(): # terbitkan 5 pesan ke pubTopic("/a1LhUsK****/python***/user/update") for i in range(5): message = "ABC" + str(i) client.publish(pubTopic, message) print("terbitkan pesan:" + str(i)) time.sleep(2)Untuk informasi lebih lanjut tentang topik, lihat Apa Itu Topik?
Panggil fungsi Subscribe() untuk berlangganan topik dan menerima pesan dari IoT Platform.
def subscribe_topic(): # berlangganan ke subTopic("/a1LhUsK****/python***/user/get") dan minta pesan dikirim client.subscribe(subTopic)Untuk informasi lebih lanjut tentang metode komunikasi antara perangkat, server, dan IoT Platform, lihat Ikhtisar.
Jalankan proyek.
Kode contoh
Jalankan program kode contoh yang sudah dikompilasi untuk menghubungkan perangkat ke IoT Platform.
Unduh paket yang mencakup kode contoh dari tautan dan ekstrak paket ke direktori aiot-python-demo. Tabel berikut menjelaskan file-file yang disertakan dalam direktori.
File sertifikat
Deskripsi
MqttSign.py
File ini berisi kode yang digunakan untuk mendapatkan parameter koneksi yang diperlukan untuk menghubungkan perangkat ke IoT Platform melalui MQTT. Saat Anda menjalankan file ini, fungsi
calculate_sign_timedipanggil untuk mendapatkan nilai parameter mqttUsername, mqttPassword, dan mqttClientId.iot.py
File ini berisi kode logika yang digunakan untuk menghubungkan perangkat ke IoT Platform dan mengaktifkan komunikasi.
root.crt
Sertifikat root IoT Platform. Sertifikat ini diperlukan untuk menghubungkan perangkat ke IoT Platform.
Dalam file iot.py, ganti informasi perangkat dengan informasi perangkat Anda.
Ganti nilai parameter productKey, deviceName, dan deviceSecret dengan informasi sertifikat perangkat Anda.
# atur info perangkat, termasuk product key, device name, dan device secret productKey = "a1LhUsK***" deviceName = "python***" deviceSecret = "bdd043d193782d11***"Opsional. Ganti nilai parameter timeStamp dan clientId. Anda bisa mengganti nilai parameter clientId dengan alamat MAC atau SN perangkat Anda.
CatatanJika Anda tidak mengganti nilai-nilai tersebut, Anda masih bisa menghubungkan perangkat ke IoT Platform. Dalam skenario nyata, kami sarankan Anda mengganti nilai-nilai parameter dengan nilai sebenarnya.
Ganti .iot-as-mqtt.cn-shanghai.aliyuncs.com dalam
host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"dengan Titik akhir MQTT sebenarnya.Untuk informasi lebih lanjut, lihat Langkah 2 dalam bagian "Menghubungkan Perangkat ke IoT Platform" dari topik ini.
Jalankan file iot.py.
Setelah Anda menjalankan file tersebut, log lokal berikut akan dihasilkan:
Hubungkan Sukses ke Awan IoT Alibaba berlangganan topik: /a1LhUsK***/python***/user/get terbitkan pesan: 0 terbitkan pesan: ABC0 terbitkan pesan: 1 terbitkan pesan: ABC1 terbitkan pesan: 2 terbitkan pesan: ABC2 terbitkan pesan: 3 terbitkan pesan: ABC3 terbitkan pesan: 4 terbitkan pesan: ABC4Masuk ke Konsol IoT Platform. Anda dapat melihat status dan log perangkat pada instans.
Pilih . Halaman Perangkat menunjukkan bahwa perangkat dalam keadaan Online.
Pilih . Lalu, klik tab Cloud run log atau Device local log untuk melihat log. Untuk informasi lebih lanjut, lihat Log IoT Platform dan Log Lokal Perangkat.
Kode kesalahan
Jika perangkat gagal terhubung ke IoT Platform melalui MQTT, Anda dapat mendiagnosis masalah berdasarkan kode kesalahan. Untuk informasi lebih lanjut, lihat Pemecahan Masalah.