Gunakan library Paho MQTT untuk Java guna menghubungkan perangkat ke IoT Platform dan berkomunikasi melalui model thing.
Prasyarat
Anda telah membuat produk dan perangkat di IoT Platform. Untuk produk tersebut, Anda telah menetapkan properti LightSwitch pada tab Feature Definitions.
Untuk informasi selengkapnya, lihat Create a product, Create a single device, dan Add a TSL model for a single device.
Persiapkan lingkungan pengembangan
Lingkungan pengembangan:
-
Sistem operasi: Windows 10
-
JDK: JDK 8
Unduh library Paho MQTT untuk Java
Tambahkan dependensi berikut ke proyek Maven Anda sesuai versi MQTT yang digunakan:
Kunjungi situs resmi untuk memeriksa versi library terbaru dan perbarui nilai version secara sesuai.
-
MQTT 3.1 dan 3.1.1
<dependencies> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.1</version> </dependency> </dependencies> -
MQTT 5.0
<dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.mqttv5.client</artifactId> <version>1.2.5</version> </dependency>
Hubungkan ke IoT Platform
-
Klik MqttSign.java untuk mendapatkan kode sumber guna menghitung parameter koneksi MQTT.
File MqttSign.java mendefinisikan kelas MqttSign:
-
Prototipe:
class MqttSign Fungsi
Menghitung parameter koneksi MQTT username, password, dan clientid untuk koneksi ke IoT Platform.
-
Anggota:
Type
Deskripsi metode
public void
calculate(String productKey, String deviceName, String deviceSecret)Menghitung parameter koneksi MQTT username, password, dan clientid berdasarkan productKey, deviceName, dan deviceSecret perangkat.
public String
getUsername()Mendapatkan parameter koneksi MQTT username.
public String
getPassword()Mendapatkan parameter koneksi MQTT password.
public String
getClientid()Mendapatkan parameter koneksi MQTT clientid.
-
-
Buka IntelliJ IDEA dan buat proyek.
-
Impor file MqttSign.java ke dalam proyek Anda.
-
Di proyek Anda, tambahkan file program untuk menghubungkan perangkat ke IoT Platform.
Buat program yang memanggil kelas MqttSign dalam file MqttSign.java guna menghitung parameter koneksi MQTT dan terhubung ke IoT Platform.
Petunjuk pengembangan dan contoh kode:
-
Panggil MqttSign untuk menghitung parameter koneksi MQTT.
String productKey = "a1X2bEn****"; String deviceName = "example1"; String deviceSecret = "ga7XA6KdlEeiPXQPpRbAjOZXwG8y****"; // Hitung parameter koneksi MQTT. MqttSign sign = new MqttSign(); sign.calculate(productKey, deviceName, deviceSecret); System.out.println("username: " + sign.getUsername()); System.out.println("password: " + sign.getPassword()); System.out.println("clientid: " + sign.getClientid()); -
Gunakan client Paho MQTT untuk terhubung ke IoT Platform.
// Titik akhir untuk koneksi ke IoT Platform. String port = "443"; String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port; // Client Paho MQTT. MqttClient sampleClient = new MqttClient(broker, sign.getClientid(), persistence); // Parameter koneksi Paho MQTT. MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); connOpts.setKeepAliveInterval(180); connOpts.setUserName(sign.getUsername()); connOpts.setPassword(sign.getPassword().toCharArray()); sampleClient.connect(connOpts); System.out.println("Broker: " + broker + " Connected");PentingUbah titik akhir pada baris kode
String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;. Nilai broker harus dalam format"ssl://" + "${MQTT endpoint for your instance}" + ":" + port.Untuk informasi lebih lanjut mengenai format titik akhir untuk instans publik dan Enterprise, lihat View instance endpoints.
-
Publikasikan pesan.
Laporkan properti LightSwitch yang didefinisikan dalam model thing:
// Publikasikan pesan menggunakan Paho MQTT. String topic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post"; String content = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":1}}"; MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(0); sampleClient.publish(topic, message);Untuk MQTT 5.0, tambahkan properti kustom saat mempublikasikan pesan:
// Fitur MQTT 5.0: Properti yang ditentukan pengguna MqttProperties properties = new MqttProperties(); List<UserProperty> userPropertys = new ArrayList<>(); userPropertys.add(new UserProperty("key1","value1")); properties.setUserProperties(userPropertys); // Fitur MQTT 5.0: mode request-response properties.setCorrelationData("requestId12345".getBytes()); properties.setResponseTopic("/" + productKey + "/" + deviceName + "/user/get"); message.setProperties(properties); // SDK Paho untuk MQTT 5.0 menggunakan alias topik secara default. sampleClient.publish(topic, message);Format data model thing didefinisikan dalam Device properties, events, and services.
Komunikasi topik kustom dijelaskan dalam What is a topic?.
-
Berlangganan topik untuk menerima pesan dari IoT Platform.
Berlangganan topik untuk menerima tanggapan pengiriman properti dari IoT Platform:
class MqttPostPropertyMessageListener implements IMqttMessageListener { @Override public void messageArrived(String var1, MqttMessage var2) throws Exception { System.out.println("reply topic : " + var1); System.out.println("reply payload: " + var2.toString()); } } ... // Berlangganan topik menggunakan Paho MQTT. String topicReply = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post_reply"; sampleClient.subscribe(topicReply, new MqttPostPropertyMessageListener());
Pelajari pola komunikasi perangkat-cloud dalam Overview of communications among devices, IoT platform, and servers.
-
-
Klik tombol Build Project
untuk mengompilasi proyek.
Jalankan proyek contoh
Hubungkan perangkat ke IoT Platform menggunakan proyek contoh yang telah disediakan.
-
Unduh paket kode (v3.1.1Demo atau v5.0Demo) dan ekstrak.
-
Buka IntelliJ IDEA dan impor proyek contoh aiot-java-demo dari paket hasil ekstraksi.
-
Pada file pom.xml, perbarui versi dependensi Maven seperti yang ditentukan pada bagian Download the Paho MQTT library for Java.
PentingJika versi dependensi tidak tersedia, periksa repositori resminya, seperti Maven Central, untuk versi yang valid.
-
Di direktori src/main/java/com.aliyun.iot, buka file App atau Mqtt5App dan ganti kredensial perangkat contoh dengan milik Anda sendiri.
CatatanGunakan file App untuk komunikasi melalui MQTT 3.1 atau 3.1.1. Gunakan file Mqtt5App untuk komunikasi melalui MQTT 5.0.
-
Pada kode berikut, ganti nilai productKey, deviceName, dan deviceSecret dengan kredensial perangkat Anda.
String productKey = "${ProductKey}"; String deviceName = "${DeviceName}"; String deviceSecret = "${DeviceSecret}"; -
Ubah titik akhir pada baris kode
String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;, seperti yang dijelaskan pada Langkah 4 bagian Connect to IoT Platform.
-
-
Jalankan program App atau Mqtt5App.
Jika berhasil, log berikut akan muncul:
username: example1&a1xxx password: 5c9d47198d9d09050043e1f3xxx clientid: a1Xxxx.example1|timestamp=1576140939022,_v=paho-java-1.0.0,securemode=2,signmethod=hmacsha256| broker: ssl://a1X2bxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com:443 Connected subscribe: /sys/a1X2bxxx/example1/thing/event/property/post_reply publish: {"id":"1","version":"1.0","params":{"LightSwitch":1}} reply topic : /sys/a1Xxxx/example1/thing/event/property/post_reply reply payload: {"code":200,"data":{},"id":"1","message":"success","method":"thing.event.property.post","version":"1.0"} Disconnected Process finished with exit code 0Login ke IoT Platform console untuk melihat status dan log perangkat di instans Anda.
-
Di panel navigasi sebelah kiri, pilih . Anda dapat melihat bahwa status perangkat adalah Online.
-
Di panel navigasi sebelah kiri, pilih . Anda dapat melihat Cloud-side Log dan Device-side Log. Cloud-side Log. Device-side Log.
Jika Anda menggunakan file Mqtt5App, Anda dapat melihat properti kustom yang dilaporkan dalam detail log.
Pada bidang Property di detail log, Anda dapat menemukan nilai properti kustom yang dilaporkan, seperti
[{"Value":"value1","Key":"key1"}].
-
Kode kesalahan
Jika perangkat gagal terhubung ke IoT Platform melalui MQTT, gunakan kode kesalahan untuk pemecahan masalah. Untuk informasi selengkapnya mengenai kode kesalahan sisi server, lihat Troubleshooting.