Topik ini menjelaskan cara menginisialisasi Link SDK untuk Python dan menyambungkan perangkat ke IoT Platform.
Informasi latar belakang
Link SDK untuk Python hanya mendukung verifikasi perangkat berdasarkan device certificate. Tabel berikut menjelaskan metode verifikasi.
Metode verifikasi | Metode pendaftaran | Deskripsi | Referensi |
Verifikasi satu-sertifikat-per-perangkat | Tidak tersedia | Sertifikat perangkat yang mencakup ProductKey, DeviceName, dan DeviceSecret dibakar ke setiap perangkat. | |
Verifikasi satu-sertifikat-per-produk | Pendaftaran sebelumnya |
| Verifikasi satu-sertifikat-per-produk Catatan Untuk informasi tentang perbedaan antara verifikasi satu-sertifikat-per-produk dengan pendaftaran sebelumnya dan verifikasi tanpa pendaftaran sebelumnya, lihat Perbedaan antara metode verifikasi. |
Tanpa pendaftaran sebelumnya |
|
Kode contoh
Verifikasi Satu-Sertifikat-per-Perangkat
from linkkit import linkkit lk = linkkit.LinkKit( host_name="NamaHostAnda", product_key="ProductKeyAnda", device_name="DeviceNameAnda", device_secret="DeviceSecretAnda") lk.config_mqtt(port=8883, protocol="MQTTv311", transport="TCP", secure="TLS", keep_alive=60, clean_session=True, max_inflight_message=20, max_queued_message=0, auto_reconnect_min_sec=1, auto_reconnect_max_sec=60, cadata=None)Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Contoh
Deskripsi
host_name
cn-shanghai
ID wilayah tempat perangkat yang ingin Anda sambungkan ke IoT Platform berada.
product_key
a18wP******
Sertifikat perangkat yang digunakan untuk verifikasi. Sertifikat disimpan di server lokal Anda setelah Anda menambahkan perangkat.
Anda juga dapat melihat sertifikat perangkat di halaman Device Details di konsol IoT Platform. Untuk informasi lebih lanjut, lihat Memperoleh informasi verifikasi perangkat.
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
endpoint
iot-cn-6ja******.mqtt.iothub.aliyuncs.com
Titik akhir instance IoT Platform.
Parameter ini hanya diperlukan untuk instance Enterprise Edition dan instance publik versi baru.
CatatanJika Anda menggunakan instance Enterprise Edition atau instance publik versi baru, hapus tanda pagar (#) sebelum kode.
port
8883
Nomor port.
protocol
MQTTv311
Protokol yang digunakan untuk membangun koneksi antara perangkat dan IoT Platform.
transport
TCP
Protokol Transmission Control Protocol (TCP).
secure
TLS
Protokol Transport Layer Security (TLS).
keep_alive
60
Periode keep-alive. Unit: detik. Nilai valid: 60 hingga 180. Jika IoT Platform tidak mendeteksi denyut jantung koneksi perangkat dalam periode keep-alive, IoT Platform menolak koneksi perangkat.
Jika koneksi jaringan tidak stabil, kami sarankan Anda meningkatkan nilai parameter ini. Untuk informasi lebih lanjut, lihat Mekanisme keep-alive MQTT.
clean_session
True
Menentukan apakah akan menerima pesan offline. Nilai valid:
True: Perangkat menerima pesan offline.
False: Perangkat tidak menerima pesan offline.
auto_reconnect_min_sec
1
Interval minimum antara kegagalan koneksi dan rekoneksi. Unit: detik. Nilai valid: 1 hingga 1200.
auto_reconnect_max_sec
60
Interval maksimum antara kegagalan koneksi dan rekoneksi. Unit: detik. Nilai valid: 1 hingga 1200.
Verifikasi Satu-Sertifikat-per-Produk dengan Pendaftaran Sebelumnya
CatatanUntuk informasi lebih lanjut, lihat file
dynamic_register.pydalam paket kode contoh.import time from linkkit import linkkit import logging # konfigurasi log __log_format = '%(asctime)s-%(process)d-%(thread)d - %(name)s:%(module)s:%(funcName)s - %(levelname)s - %(message)s' logging.basicConfig(format=__log_format) product_key = "${YourProductKey}" device_name = "${YourDeviceName}" product_secret = "${YourProductSecret}" instance_id = "${YourInstanceId}" device_secret = "" lk_auth = linkkit.LinkKit( host_name="cn-shanghai", product_key=product_key, device_name=device_name, device_secret="", auth_type="register", instance_id=instance_id, product_secret=product_secret) def on_device_dynamic_register(rc, value, userdata): if rc == 0: global device_secret print("registrasi dinamis perangkat berhasil, rc:%d, value:%s" % (rc, value)) device_secret = value else: print("registrasi dinamis perangkat gagal,rc:%d, value:%s" % (rc, value)) lk_auth.enable_logger(logging.DEBUG) lk_auth.on_device_dynamic_register = on_device_dynamic_register lk_auth.connect_async() # Tunggu pesan downstream. Dalam banyak kasus, pesan downstream dikembalikan dalam waktu 1 detik. time.sleep(5) lk_auth.destroy()Jika Anda menentukan
auth_type="register"untuk fungsi LinkKit, sistem menggunakan metode verifikasi satu-sertifikat-per-produk dengan pendaftaran sebelumnya untuk memverifikasi perangkat. Hasil verifikasi dikembalikan oleh fungsi callbackon_device_dynamic_register. Jika nilai parameterrcadalah0, perangkat lolos verifikasi satu-sertifikat-per-produk dengan pendaftaran sebelumnya. DeviceSecret yang diperoleh dari IoT Platform dikembalikan. Simpan DeviceSecret ke server lokal Anda. Anda dapat menggunakan DeviceSecret untuk menyambungkan perangkat Anda ke IoT Platform. Untuk informasi lebih lanjut, lihat Verifikasi Satu-Sertifikat-per-Perangkat.Jika Anda menentukan
auth_type="", sistem menggunakan metode verifikasideprecatedyang hanya tersedia di wilayah China (Shanghai). Untuk informasi lebih lanjut, lihat filedynamic_register_deprecated.py.Verifikasi Satu-Sertifikat-per-Produk tanpa Pendaftaran Sebelumnya
CatatanAnda dapat menggunakan Link SDK untuk Python untuk melakukan verifikasi satu-sertifikat-per-produk tanpa pendaftaran sebelumnya pada perangkat hanya di wilayah China (Beijing) dan China (Shanghai).
Untuk informasi lebih lanjut, lihat file
dynamic_register_nwl.pydalam paket kode contoh.
import time from linkkit import linkkit import logging # konfigurasi log __log_format = '%(asctime)s-%(process)d-%(thread)d - %(name)s:%(module)s:%(funcName)s - %(levelname)s - %(message)s' logging.basicConfig(format=__log_format) product_key = "${YourProductKey}" device_name = "${YourDeviceName}" product_secret = "${YourProductSecret}" instance_id = "${YourInstanceId}" lk_auth = linkkit.LinkKit( host_name="cn-shanghai", product_key=product_key, product_secret=product_secret, device_name=device_name, device_secret="", instance_id=instance_id, auth_type="regnwl") def on_device_dynamic_register_nwl_reply(code, client_id_l, user_name_l, password_l): print("code:", code) if 0 == code: print("cid:", client_id_l) print("user_name:", user_name_l) print("password:", password_l) lk_auth.enable_logger(logging.DEBUG) lk_auth.on_device_dynamic_register_nwl_reply = on_device_dynamic_register_nwl_reply lk_auth.connect_async() # Tunggu pesan downstream. Dalam banyak kasus, pesan downstream dikembalikan dalam waktu 1 detik. time.sleep(5) lk_auth.destroy()Jika Anda menentukan
auth_type="regnwl", sistem menggunakan metode verifikasi satu-sertifikat-per-produk tanpa pendaftaran sebelumnya untuk memverifikasi perangkat. Jika nilai parameterrcadalah0, perangkat lolos verifikasi satu-sertifikat-per-produk tanpa pendaftaran sebelumnya.username,ClientID, danpasswordyang diperoleh dari IoT Platform dikembalikan.
Fungsi callback
Setelah Anda menyambungkan perangkat ke IoT Platform, Anda dapat menggunakan fungsi callback on_connect untuk melihat status koneksi. Jika perangkat terputus, Anda dapat menulis logika pemrosesan dalam fungsi callback on_disconnect berdasarkan skenario bisnis Anda.
Secara default, Link SDK untuk Python mendukung rekoneksi. Jika perangkat terputus karena ketidakstabilan jaringan atau pengecualian lainnya, perangkat secara otomatis memulai permintaan rekoneksi berdasarkan parameter yang dikonfigurasi, seperti parameter keep-alive.
Kode contoh:
def on_connect(session_flag, rc, userdata):
print("on_connect:%d,rc:%d,userdata:" % (session_flag, rc))
pass
def on_disconnect(rc, userdata):
print("on_disconnect:rc:%d,userdata:" % rc)
lk.on_connect = on_connect
lk.on_disconnect = on_disconnect (Opsional) Konfigurasikan antarmuka koneksi jaringan
Jika sertifikat perangkat yang sama yang berisi ProductKey, DeviceName, dan DeviceSecret dibakar ke beberapa perangkat, IoT Platform menganggap perangkat-perangkat tersebut sebagai perangkat yang sama. Dalam hal ini, satu perangkat terputus ketika perangkat lainnya online. Anda dapat mengunggah informasi tentang antarmuka koneksi Anda ke IoT Platform untuk pemecahan masalah.
lk.config_device_info("Eth|03ACDEFF0032|Eth|03ACDEFF0031")Tabel berikut menjelaskan antarmuka koneksi jaringan.
Tipe jaringan | Contoh | Deskripsi |
WiFi |
| Jika perangkat Anda terhubung ke WiFi atau Ethernet melalui antarmuka jaringan upstream, atur tipe jaringan ke WiFi atau Eth dan tentukan alamat Media Access Control (MAC). Alamat MAC harus dalam huruf besar. |
Ethernet (Eth) | ||
Jaringan seluler (Cellular) | Cellular|imei_001122|iccid_22334455|imsi_234241|msisdn_53212 | Jika perangkat Anda terhubung ke jaringan seluler, seperti 2G, 3G, atau 4G, melalui antarmuka jaringan upstream, atur tipe jaringan ke Cellular dan konfigurasikan parameter berikut:
|
Membangun koneksi
Setelah Anda mengonfigurasi parameter untuk koneksi Message Queuing Telemetry Transport (MQTT), fungsi callback, dan antarmuka koneksi jaringan, panggil metode connect_async untuk memulai koneksi.
lk.connect_async()Jika perangkat terputus karena ketidakstabilan jaringan atau pengecualian lainnya, perangkat secara otomatis memulai permintaan rekoneksi berdasarkan parameter yang dikonfigurasi, seperti parameter keep-alive. Anda hanya perlu memanggil metode ini sekali.