Setelah perangkat mengirimkan data ke IoT Platform, Anda dapat mengirim perintah dari IoT Platform ke perangkat untuk menguji pengiriman pesan downstream. Topik ini menjelaskan cara memanggil operasi Pub untuk mengirim perintah dari aplikasi cloud ke perangkat termostat.
Prasyarat
Perangkat termostat telah terhubung ke IoT Platform. Untuk informasi lebih lanjut, lihat Hubungkan Perangkat ke IoT Platform dan Kirimkan Data.
Siapkan lingkungan pengembangan
Dalam contoh ini, program sampel yang memanggil operasi API cloud untuk mengirim perintah ke perangkat dikembangkan dalam proyek amqp-demo yang berada di server bisnis yang sama dengan klien Advanced Message Queuing Protocol (AMQP). Untuk informasi lebih lanjut tentang konfigurasi lingkungan, lihat Siapkan Lingkungan Pengembangan.
Prosedur
Dalam contoh ini, topik kustom digunakan untuk mengirim perintah. Anda dapat menggunakan topik spesifik Thing Specification Language (TSL) untuk mengirim data TSL. Untuk informasi lebih lanjut, lihat Apa Itu Model TSL?
Dalam file
amqp-demo/pom.xml, tambahkan dependensi berikut untuk mengimpor SDK cloud:Dependensi Maven yang digunakan untuk mengimpor IoT Platform SDK for Java:
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-iot --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-iot</artifactId> <version>7.41.0</version> </dependency>Dependensi Maven yang digunakan untuk mengimpor Alibaba Cloud SDK for Java.
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.6.3</version> </dependency>
Dalam direktori
src/main/java/com.aliyun.iotx.demo, buat file kelas bernamaPubDemo.javadan salin kode sampel berikut ke dalam file tersebut.import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import com.aliyuncs.iot.model.v20180120.*; public class PubDemo { public static void main(String[] args) throws Exception { DefaultProfile profile = DefaultProfile.getProfile("${RegionId}", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); IAcsClient client = new DefaultAcsClient(profile); PubRequest request = new PubRequest(); request.setIotInstanceId("iot-cn-******"); request.setProductKey("a2******"); request.setTopicFullName("/a2******/Device1/user/get"); request.setMessageContent("eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0="); try { PubResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } }Dalam skenario nyata, Anda harus memodifikasi parameter tertentu dalam kode sampel di atas. Tabel berikut menjelaskan parameter-parameter tersebut:
Parameter
Contoh
Deskripsi
RegionId
ap-northeast-1
Ganti variabel
${RegionId}dalam fileDefaultProfile.getProfiledengan ID wilayah tempat Anda mengaktifkan IoT Platform. Untuk informasi lebih lanjut tentang ID wilayah Alibaba Cloud, lihat Wilayah yang didukung.TopicFullName
/a2******/Device1/user/get
Topik kustom tempat Anda ingin mempublikasikan pesan.
Dalam contoh ini, topik kustom
/${productKey}/${deviceName}/user/getdigunakan.Ganti
${productKey}dengan ProductKey dari perangkat termostat dan ${deviceName}dengan Device1.Untuk informasi lebih lanjut, lihat Gunakan topik kustom untuk komunikasi.
ProductKey
a2******
ProductKey dari produk tempat perangkat termostat termasuk.
IotInstanceId
iot-cn-******
ID dari instance IoT_Test_Environment.
Anda dapat melihat ID instance pada tab Overview di konsol IoT Platform.
MessageContent
eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0=
Isi pesan yang ingin Anda kirim. Isi pesan dibuat saat Anda mengonversi pesan asli menjadi data biner dan melakukan pengkodean Base64 pada data tersebut. Dalam contoh ini, nilai parameter MessageContent dikodekan dari isi pesan
“washingMode: 2, washingTime: 30”.Jika informasi berikut dikembalikan setelah Anda menjalankan file
PubMessage.java, pesan dikirim ke perangkat.{"requestId":"6EF6****-****-5***-***7-D2********48","success":true,"messageId":"170440***********"}Pergi ke halaman Instance Details dari instance yang sesuai di konsol IoT Platform. Di panel navigasi sisi kiri, pilih > Cloud run log. Pada tab Cloud run log, lihat log yang terkait dengan pemanggilan API perangkat.

Anda juga dapat melihat nilai parameter MessageContent pada perangkat.
[1695199345.900][LK-0309] pub: /a2******/Device1/user/get [LK-030A] < 77 61 73 68 69 6E 67 4D 6F 64 65 3A 20 32 2C 20 | washingMode: 2, [LK-030A] < 77 61 73 68 69 6E 67 54 69 6D 65 3A 20 33 30 | washingTime: 30