Topik ini menjelaskan cara menggunakan perpustakaan Paho Message Queuing Telemetry Transport (MQTT) untuk Go guna menghubungkan perangkat ke IoT Platform dan mengaktifkan pengiriman pesan.
Catatan Penggunaan
Dalam topik ini, izin pengguna umum digunakan untuk semua operasi. Jika Anda memerlukan izin administrator untuk operasi tertentu, jalankan perintah sudo.
Prasyarat
Sebuah produk dan perangkat telah dibuat di Konsol IoT Platform. Sertifikat perangkat telah diperoleh, mencakup ProductKey, DeviceName, dan DeviceSecret. Untuk informasi lebih lanjut, lihat topik-topik berikut:
Siapkan Lingkungan Pengembangan
Instal paket bahasa Go.
Pada macOS, jalankan perintah berikut:
brew install goPada Ubuntu, jalankan perintah berikut:
sudo apt-get install golang-goPada Windows, unduh paket instalasi dari situs resmi Go dan instal paket bahasa Go.
CatatanJika Anda tinggal di Tiongkok daratan, gunakan jaringan pribadi virtual (VPN) untuk mengakses situs resmi Go.
Unduh Perpustakaan Paho MQTT untuk Go
Untuk informasi tentang proyek Paho dan bahasa pemrograman yang didukung, lihat Eclipse Paho Downloads.
Jalankan perintah berikut untuk mengunduh Perpustakaan Paho MQTT untuk Go dan dependensinya:
go get github.com/eclipse/paho.mqtt.golang
go get github.com/gorilla/websocket
go get golang.org/x/net/proxyMenghubungkan Perangkat ke IoT Platform
Unduh file MqttSign.go yang disediakan oleh Alibaba Cloud. File tersebut berisi kode sumber untuk mendapatkan parameter koneksi MQTT.
File MqttSign.go mendefinisikan fungsi untuk mendapatkan parameter koneksi MQTT. Anda harus memanggil fungsi ini untuk menghubungkan perangkat ke IoT Platform.
Definisi:
type AuthInfo struct { password, username, mqttClientId string; } func calculate_sign(clientId, productKey, deviceName, deviceSecret, timeStamp string) AuthInfo;Deskripsi:
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 dalam IoT Platform.
deviceName
String
DeviceName dari perangkat. Parameter ini digunakan untuk mengidentifikasi perangkat dalam IoT Platform.
deviceSecret
String
DeviceSecret dari perangkat. Parameter ini digunakan untuk mengidentifikasi perangkat dalam IoT Platform.
clientId
String
ID dari perangkat. ID dapat memiliki panjang hingga 64 karakter. Kami menyarankan Anda menggunakan alamat Media Access Control (MAC) atau nomor seri (SN) perangkat sebagai ID.
timeStamp
String
Timestamp waktu saat ini. Satuan: milidetik.
Parameter Output:
Fungsi ini mengembalikan struktur
AuthInfo. Struktur ini berisi parameter-parameter yang dijelaskan dalam tabel berikut.Parameter
Tipe
Deskripsi
username
String
Nama pengguna yang digunakan untuk membangun koneksi MQTT.
password
String
Kata sandi yang digunakan untuk membangun koneksi MQTT.
mqttClientId
String
ID dari klien MQTT.
Tambahkan file program yang dapat menghubungkan perangkat ke IoT Platform.
Untuk mendapatkan parameter koneksi MQTT, tulis program untuk memanggil fungsi dalam file MqttSign.go.
Bagian ini menjelaskan cara mengembangkan perangkat dan menyediakan contoh kode.
Tentukan informasi perangkat.
// set the device info, include product key, device name, and device secret var productKey string = "a1Zd7n5***" var deviceName string = "testdevice" var deviceSecret string = "UrwclDV33NaFSmk0JaBxNTqgSrJW****" // set timestamp, clientid, subscribe topic and publish topic var timeStamp string = "1528018257135" var clientId string = "192.168.****" var subTopic string = "/" + productKey + "/" + deviceName + "/user/get"; var pubTopic string = "/" + productKey + "/" + deviceName + "/user/update";Tentukan informasi koneksi MQTT.
Panggil fungsi calculate_sign() dalam file MqttSign.go. Fungsi ini mengembalikan parameter username, password, dan mqttClientId berdasarkan nilai parameter input clientId, productKey, deviceName, deviceSecret, dan timeStamp. Kemudian tambahkan hasilnya ke dalam struktur opts.
// set the login broker url var raw_broker bytes.Buffer raw_broker.WriteString("tls://") raw_broker.WriteString(productKey) raw_broker.WriteString(".iot-as-mqtt.cn-shanghai.aliyuncs.com:1883") opts := MQTT.NewClientOptions().AddBroker(raw_broker.String()); // calculate the login auth info, and set it into the connection options auth := calculate_sign(clientId, productKey, deviceName, deviceSecret, timeStamp) opts.SetClientID(auth.mqttClientId) opts.SetUsername(auth.username) opts.SetPassword(auth.password) opts.SetKeepAlive(60 * 2 * time.Second) opts.SetDefaultPublishHandler(f)PentingJika Anda menggunakan instans publik versi lama, ganti cn-shanghai dalam
raw_broker.WriteString(".iot-as-mqtt.cn-shanghai.aliyuncs.com:1883")dengan ID wilayah tempat perangkat Anda berada. Untuk informasi tentang ID wilayah, lihat Wilayah.Jika Anda menggunakan instans Enterprise Edition atau instans publik versi baru, ganti
raw_broker.String()dalamopts := MQTT.NewClientOptions().AddBroker(raw_broker.String());dengan$<MQTT endpoint>:1833. Contoh:opts := MQTT.NewClientOptions().AddBroker("iot-***.mqtt.iothub.aliyuncs.com:1883");.Untuk informasi tentang cara mendapatkan titik akhir MQTT, lihat Lihat titik akhir instans publik versi baru atau instans Enterprise Edition.
Untuk informasi tentang instans IoT Platform, lihat Ikhtisar Instans.
Panggil fungsi Connect() dari Perpustakaan Paho MQTT untuk Go untuk menghubungkan perangkat ke IoT Platform.
// create and start a client using the above ClientOptions c := MQTT.NewClient(opts) if token := c.Connect(); token.Wait() && token.Error() != nil { panic(token.Error()) } fmt.Print("Connect aliyun IoT Cloud Success\n");Panggil fungsi Publish() untuk menerbitkan pesan. Tentukan topik tempat Anda ingin menerbitkan pesan dan muatan pesan tersebut.
// publish 5 messages to pubTopic("/a1Zd7n5****/deng/user/update") for i := 0; i < 5; i++ { fmt.Println("publish msg:", i) text := fmt.Sprintf("ABC #%d", i) token := c.Publish(pubTopic, 0, false, text) fmt.Println("publish msg: ", text) token.Wait() time.Sleep(2 * time.Second) }Untuk informasi tentang topik, lihat Apa itu topik?
Panggil fungsi Subscribe() untuk berlangganan topik dan menerima pesan dari IoT Platform.
// subscribe to subTopic("/a1Zd7n5***/deng/user/get") and request messages to be delivered if token := c.Subscribe(subTopic, 0, nil); token.Wait() && token.Error() != nil { fmt.Println(token.Error()) os.Exit(1) } fmt.Print("Subscribe topic " + subTopic + " success\n");
Untuk informasi tentang metode komunikasi antara perangkat, server, dan IoT Platform, lihat Ikhtisar komunikasi antara perangkat, platform IoT, dan server.
Kompilasi proyek.
Contoh Kode
Anda dapat menggunakan contoh kode untuk menghubungkan perangkat ke IoT Platform.
Unduh dan ekstrak paket demo.
Tabel berikut menjelaskan file dalam paket aiot-go-demo.
File
Deskripsi
MqttSign.go
File ini berisi kode yang digunakan untuk mendapatkan parameter koneksi MQTT. Saat Anda mengeksekusi file iot.go, fungsi calculate_sign() dipanggil untuk mendapatkan parameter username, password, dan mqttClientId.
iot.go
File ini berisi kode logika yang digunakan untuk menghubungkan perangkat ke IoT Platform dan mengaktifkan komunikasi.
x509
Sertifikat root IoT Platform. Sertifikat ini diperlukan untuk menghubungkan perangkat ke IoT Platform.
CatatanJika Anda menghubungkan perangkat ke IoT Platform menggunakan gateway cloud MQTT, Anda dapat menggunakan sertifikat kustom untuk memverifikasi identitas perangkat. Untuk informasi lebih lanjut, lihat Langkah 1: Buat sertifikat kustom.
Ganti informasi perangkat dalam file iot.go dengan informasi perangkat Anda.
Anda dapat menggunakan alat seperti Linux vi untuk memodifikasi file iot.go.
Ganti nilai parameter productKey, deviceName, dan deviceSecret dengan informasi sertifikat perangkat Anda.
Opsional. Konfigurasikan parameter timeStamp dan clientId. Anda dapat mengganti nilai parameter clientId dengan alamat MAC atau SN perangkat Anda.
Jika Anda tidak mengonfigurasi parameter sebelumnya, Anda masih dapat terhubung ke IoT Platform. Namun, kami menyarankan Anda mengganti nilai parameter dengan nilai aktual.
Ubah parameter koneksi MQTT yang digunakan untuk menghubungkan perangkat ke IoT Platform. Untuk informasi lebih lanjut, lihat Langkah 2 dalam bagian "Menghubungkan Perangkat ke IoT Platform" dari topik ini.
Jalankan perintah berikut di Command Prompt untuk mengeksekusi file iot.go:
go run iot.go MqttSign.goSetelah Anda mengeksekusi file, log lokal berikut akan dihasilkan:
clientId192.168.****deviceNametestdeviceproductKeya1Zd7n5****timestamp1528018257135 1b865320fc183cc747041c9faffc9055fc45**** Connect aliyun IoT Cloud Success Subscribe topic /a1Zd7n5****/testdevice/user/get success publish msg: 0 publish msg: ABC #0 publish msg: 1 publish msg: ABC #1 publish msg: 2 publish msg: ABC #2 publish msg: 3 publish msg: ABC #3 publish msg: 4 publish msg: ABC #4 publish msg: 5 publish msg: ABC #5Di Konsol IoT Platform, Anda dapat melihat status perangkat dan log.
Pilih . Halaman Perangkat menunjukkan bahwa perangkat berada 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 membangun koneksi MQTT ke IoT Platform, Anda dapat mendiagnosis masalah berdasarkan kode kesalahan. Untuk informasi lebih lanjut, lihat Pemecahan Masalah.