IoT Platform mendukung komunikasi broadcast, yang memungkinkan Anda mengirim pesan ke semua perangkat dari suatu produk tertentu atau ke semua perangkat yang berlangganan topik tertentu. Pesan broadcast dari server bisnis Anda hanya diterima oleh perangkat yang sedang online. Topik ini memberikan contoh cara melakukan broadcast pesan ke semua perangkat online.
Informasi latar belakang
- Broadcast pesan ke semua perangkat online dari suatu produk
Server bisnis Anda memanggil operasi API PubBroadcast dan meneruskan ProductKey dari produk target serta MessageContent. Semua perangkat online dari produk tersebut menerima MessageContent pada topik broadcast
/sys/${productKey}/${deviceName}/broadcast/request/${MessageId}.MessageIddalam topik broadcast adalah ID yang dihasilkan oleh IoT Platform. Setelah pesan berhasil dikirim, IoT Platform mengembalikan ID ini ke server bisnis Anda sebagai bagian dari respons pemanggilan PubBroadcast.Sebagai contoh, produsen dengan beberapa smart lock yang terhubung ke IoT Platform dapat menggunakan server bisnis untuk mengirim satu perintah ke semua kunci online guna membatalkan password tertentu.
- Broadcast pesan ke semua perangkat yang berlangganan topik tertentu
Perangkat berlangganan topik broadcast yang sama. Server bisnis Anda memanggil operasi API PubBroadcast, meneruskan ProductKey, MessageContent, dan nama lengkap topik broadcast tersebut. Nama topik harus dalam format
/broadcast/${productKey}/custom-field. Semua perangkat online yang berlangganan topik ini menerima MessageContent.Penting- Topik broadcast didefinisikan dalam kode sisi perangkat selama pengembangan. Anda tidak perlu membuatnya di Konsol IoT Platform.
- Maksimal 1.000 perangkat dapat berlangganan satu topik broadcast. Jika Anda memiliki lebih dari 1.000 perangkat, bagi perangkat tersebut ke dalam beberapa kelompok. Misalnya, untuk melakukan broadcast ke 5.000 perangkat, Anda dapat membaginya menjadi lima kelompok masing-masing 1.000 perangkat. Anda kemudian harus memanggil operasi
PubBroadcastsebanyak lima kali, dengan menyetel custom field kegroup1,group2,group3,group4, dangroup5secara berturut-turut. Setiap kelompok perangkat harus berlangganan topik yang sesuai.
Untuk informasi lebih lanjut tentang operasi API broadcast, lihat PubBroadcast.
Batasan
- Pesan broadcast hanya dikirim ke perangkat online dalam suatu produk.
- Saat melakukan broadcast pesan ke perangkat online berdasarkan langganan topik, frekuensi pemanggilan maksimum untuk API broadcast adalah sekali per detik.
- Saat melakukan broadcast pesan ke semua perangkat online dari suatu produk, perangkat tidak perlu berlangganan topik broadcast. Frekuensi pemanggilan maksimum untuk API broadcast adalah sekali per menit.
- Ukuran maksimum isi pesan broadcast adalah 64 KB.
Siapkan lingkungan pengembangan
Contoh ini menggunakan SDK Java baik untuk perangkat maupun server. Anda harus menyiapkan lingkungan pengembangan Java. Unduh dan instal Java Development Kit (JDK) dari website resmi Java.
Tambahkan dependensi Maven
Buat proyek dan tambahkan dependensi Maven berikut ke file pom.xml.
<dependencies>
<dependency>
<groupId>com.aliyun.alink.linksdk</groupId>
<artifactId>iot-linkkit-java</artifactId>
<version>1.2.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.6</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-iot</artifactId>
<version>7.41.0</version>
</dependency>
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>iot-client-message</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
Buat produk dan perangkat
- Masuk ke Konsol IoT Platform.
Pada halaman Overview, temukan instans yang ingin Anda kelola dan klik ID instans atau nama instans tersebut.
- Di panel navigasi sebelah kiri, pilih .
- Klik Create Product untuk membuat produk Smart Lock. Untuk informasi lebih lanjut, lihat Create a product.
- Di panel navigasi sebelah kiri, pilih , lalu buat tiga perangkat untuk produk Smart Lock. Untuk informasi lebih lanjut, lihat Create multiple devices at a time.
Konfigurasikan SDK perangkat
- Hubungkan perangkat Anda ke IoT Platform.
- Konfigurasikan kredensial perangkat.
final String productKey = "<yourProductKey>"; final String deviceName = "<yourDeviceName>"; final String deviceSecret = "<yourDeviceSecret>"; final String region = "<yourRegionID>";productKey, deviceName, dan deviceSecret adalah kredensial perangkat Anda. Untuk mendapatkannya, buka Konsol IoT Platform, arahkan ke instans Anda, lalu pilih . Temukan perangkat tersebut dan klik View untuk membuka halaman Device Details.
Parameter region menentukan wilayah perangkat. Untuk informasi cara menentukan region, lihat Regions and zones.
- Setel parameter inisialisasi, termasuk pengaturan MQTT, informasi perangkat, dan status awal perangkat.
LinkKitInitParams params = new LinkKitInitParams(); // LinkKit menggunakan MQTT sebagai protokol dasarnya. Konfigurasikan pengaturan MQTT. IoTMqttClientConfig config = new IoTMqttClientConfig(); config.productKey = productKey; config.deviceName = deviceName; config.deviceSecret = deviceSecret; config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883"; // Tentukan informasi perangkat. DeviceInfo deviceInfo = new DeviceInfo(); deviceInfo.productKey = productKey; deviceInfo.deviceName = deviceName; deviceInfo.deviceSecret = deviceSecret; // Tentukan status awal perangkat. Map<String, ValueWrapper> propertyValues = new HashMap<String, ValueWrapper>(); params.mqttClientConfig = config; params.deviceInfo = deviceInfo; params.propertyValues = propertyValues;channelHost adalah titik akhir MQTT. Untuk mendapatkan titik akhir instans publik dan Edisi Perusahaan, lihat View and configure instance endpoints.
- Inisialisasi koneksi.
// Bangun koneksi dan setel pendengar untuk hasil koneksi. LinkKit.getInstance().init(params, new ILinkKitConnectListener() { @Override public void onError(AError aError) { System.out.println("Init error:" + aError); } // Callback yang dipanggil setelah inisialisasi selesai. @Override public void onInitDone(InitResult initResult) { System.out.println("Init done:" + initResult); } });
- Konfigurasikan kredensial perangkat.
- Dalam fungsi callback onInitDone, gunakan awalan topik untuk mengidentifikasi topik broadcast. Awalan topik broadcast adalah
/sys/${productKey}/${deviceName}/broadcast/request/.public void onInitDone(InitResult initResult) { // Setel pendengar untuk mendengarkan pesan downstream. IConnectNotifyListener notifyListener = new IConnectNotifyListener() { // Definisikan callback yang dipanggil untuk memproses pesan downstream. @Override public void onNotify(String connectId, String topic, AMessage aMessage) { // Filter pesan broadcast. if(topic.startsWith(broadcastTopic)){ System.out.println( "received broadcast message from topic=" + topic + ",\npayload=" + new String((byte[])aMessage.getData())); } } @Override public boolean shouldHandle(String s, String s1) { return false; } @Override public void onConnectStateChange(String s, ConnectState connectState) { } }; LinkKit.getInstance().registerOnNotifyListener(notifyListener); }
Konfigurasikan SDK sisi server
Konfigurasikan SDK Java sisi server untuk mengirim pesan broadcast.
- Konfigurasikan informasi autentikasi.
String regionId = "<yourRegionID>"; String accessKey = "<yourAccessKey>"; String accessSecret = "<yourAccessSecret>"; final String productKey = "<yourProductKey>"; - Konfigurasikan server untuk memanggil operasi API PubBroadcast guna melakukan broadcast pesan.
// Setel parameter client. DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKey, accessSecret); IAcsClient client = new DefaultAcsClient(profile); PubBroadcastRequest request = new PubBroadcastRequest(); // Setel ProductKey untuk pesan broadcast. request.setProductKey(productKey); // Setel konten pesan. Konten harus diencode Base64 untuk mencegah karakter acak. request.setMessageContent(Base64.encode("{\"pwd\":\"2892nd6Y\"}")); // Setel ID instans. request.setIotInstanceId("iot-cn-***"); - Kirim pesan broadcast dari server.
try { PubBroadcastResponse response = client.getAcsResponse(request); System.out.println("broadcast pub success: broadcastId =" + response.getMessageId()); } catch (Exception e) { System.out.println(e); }
Verifikasi hasil
Jalankan kode SDK perangkat pada setiap perangkat untuk menghubungkannya. Kemudian, jalankan kode SDK sisi server untuk memanggil operasi API PubBroadcast guna melakukan broadcast pesan ke perangkat-perangkat tersebut.
Konten pesan yang dibroadcast dari SDK sisi server adalah "{\"pwd\":\"2892nd6Y\"}".
Log lokal pada setiap perangkat menampilkan pesan broadcast yang diterima: {\"pwd\":\"2892nd6Y\"}.
Smart Lock 1:
2020-03-05 03:17:37.091 – null[MqttDefaulCallback.java] – messageArrived(74):MqttDefaulCallback:messageArrived,topi
[/sys/a1nTNJt9p39/MjxxxDR/broadcast/request/123546464900384256], msg = [{"pwd":"2892nd6Y"}],
2020-03-05 03:17:37.091 – null[PersistentEventDispatcher.java] – broadcastMessage(150):com.aliyun.alink.linksdk.cha
what=3
received broadcast message from topic=/sys/a1nTNJt9p39/MjxxxDR/broadcast/request/123546464900384256,
payload={"pwd":"2892nd6Y"}
Smart Lock 2:
2020-03-05 03:17:37.111 - null[MqttDefaulCallback.java] - messageArrived(74):MqttDefaulCallback:messageArrived,topic
[/sys/a1nTNJt9p39/W96JAyE7UBpxHkiFy2CG/broadcast/request/1235464464900384256] , msg = [{"pwd":"2892nd6Y"}],
2020-03-05 03:17:37.111 - null[PersistentEventDispatcher.java] - broadcastMessage(150):com.aliyun.alink.linksdk.chan
what=3
received broadcast message from topic=/sys/a1nTNJt9p39/W9xxx2CG/broadcast/request/1235464464900384256,
payload={"pwd":"2892nd6Y"}
Smart Lock 3:
2020-03-05 03:17:37.167 - null[MqttDefaulCallback.java] - messageArrived(74):MqttDefaultCallback:messageArrived,top
[/sys/a1nTNJt9p39/mBGagyPszmfRbKVzyqvZ/broadcast/request/1235464464900384256] , msg = [{"pwd":"2892nd6Y"}],
2020-03-05 03:17:37.167 - null[PersistentEventDispatcher.java] - broadcastMessage(150):com.aliyun.alink.linksdk.ch
what=3
received broadcast message from topic=/sys/a1nTNJt9p39/mlxxxxxxxxxxxvZ/broadcast/request/1235464464900384256,
payload={"pwd":"2892nd6Y"}
Lampiran: Demo
Unduh kode contoh lengkap, yang mencakup contoh untuk SDK sisi server dan sisi perangkat.
- Broadcast pesan ke semua perangkat online: Unduh PubBroadcastDemo.
- Broadcast pesan ke semua perangkat yang berlangganan topik tertentu: Unduh BroadcastDemo.