Anda dapat membangun komunikasi berbasis Thing Specification Language (TSL) antara perangkat dan IoT Platform melalui protokol Alink. Perangkat mengirimkan properti atau kejadian ke IoT Platform, dan IoT Platform mengirimkan perintah untuk mengonfigurasi properti atau memanggil layanan pada perangkat. Topik ini menyediakan contoh kode Java untuk menjelaskan cara membangun komunikasi berbasis TSL.
Prasyarat
- IoT Platform telah diaktifkan.
- Lingkungan pengembangan Java telah terpasang.
Buat produk dan perangkat
Anda harus membuat produk dan perangkat serta mendefinisikan fitur TSL untuk produk tersebut.
- Masuk ke Konsol IoT Platform.
Di halaman Overview, klik All environment. Pada tab Semua Lingkungan, temukan instans yang ingin Anda kelola dan klik ID atau nama instans.
- Di panel navigasi sisi kiri, pilih .
- Pada halaman Produk, klik Create Product. Di halaman Buat Produk, tentukan nama kustom untuk produk dan pilih Custom Category. Gunakan nilai default untuk parameter lainnya dan klik OK.Untuk informasi lebih lanjut, lihat Buat Produk.
- Pada halaman Product Details dari produk, klik Define Feature. Pada tab Definisikan Fitur, definisikan model TSL.
Dalam contoh ini, sebuah kejadian, layanan, dan dua properti ditambahkan ke bagian Default Module, seperti yang ditunjukkan pada gambar berikut.
Topik ini menyediakan contoh model TSL yang dapat Anda impor. Untuk informasi lebih lanjut tentang cara mengimpor model TSL, lihat Tambahkan Fitur TSL Secara Massal.

- Di panel navigasi sisi kiri, klik Devices. Pada halaman Perangkat, klik Tambah Perangkat untuk membuat perangkat.Anda dapat menggunakan kode contoh untuk mengonfigurasi properti perangkat secara massal dan memanggil layanan perangkat secara massal. Anda harus membuat setidaknya dua perangkat. Untuk informasi lebih lanjut, lihat Buat Beberapa Perangkat Sekaligus.
Unduh dan instal demo SDK
Demo SDK mencakup kode contoh sisi server dan kode contoh sisi perangkat.
- Klik iotx-api-demo untuk mengunduh paket iotx-api-demo lalu dekompresi paket tersebut.
- Mulai alat pengembangan Java dan impor folder iotx-api-demo yang telah didekompresi.
- Tambahkan dependensi Maven berikut ke file pom.xml untuk mengimpor SDK IoT Platform dan Link SDK:
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-iot --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-iot</artifactId> <version>7.33.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.aliyun.alink.linksdk</groupId> <artifactId>iot-linkkit-java</artifactId> <version>1.2.0</version> <scope>compile</scope> </dependency> - Di direktori java/src/main/resources/, buka file config dan tentukan informasi yang diperlukan untuk inisialisasi.
user.accessKeyID = <your accessKey ID> user.accessKeySecret = <your accessKey Secret> iot.regionId = <regionId> iot.productCode = Iot iot.domain = iot.<regionId>.aliyuncs.com iot.version = 2018-01-20Parameter Deskripsi accessKeyID ID AccessKey akun Alibaba Cloud Anda. Untuk membuat atau melihat pasangan AccessKey Anda, lakukan langkah-langkah berikut: Masuk ke konsol manajemen Alibaba Cloud. Gerakkan penunjuk mouse ke foto profil Anda, dan klik AccessKey Management untuk pergi ke halaman AccessKey Pair.
accessKeySecret Rahasia AccessKey akun Alibaba Cloud Anda. Anda bisa mendapatkan rahasia AccessKey dengan cara yang sama seperti Anda mendapatkan ID AccessKey. regionId ID wilayah tempat perangkat IoT Anda berada. Untuk informasi lebih lanjut tentang ID wilayah, lihat Wilayah dan zona.
Kirim properti dan kejadian menggunakan Link SDK
Konfigurasikan Link SDK untuk terhubung ke IoT Platform dan kirimkan properti serta kejadian.
File ThingTemplate di direktori java/src/main/com.aliyun.iot.api.common.deviceApi berisi kode contoh.
- Tentukan informasi koneksi.
Ganti nilai parameter productKey, deviceName, dan deviceSecret dalam kode contoh dengan informasi tentang sertifikat perangkat Anda. Ganti nilai parameter url dengan titik akhir MQTT Anda. Untuk informasi lebih lanjut tentang cara mendapatkan titik akhir, lihat Kelola Titik Akhir Suatu Instans. Titik akhir harus mencakup port 1883.
public static void main(String[] args) { /** * Informasi tentang sertifikat perangkat. */ String productKey = "your productKey"; String deviceName = "your deviceName"; String deviceSecret = "your deviceSecret"; /*TODO: Ganti titik akhir berikut dengan titik akhir instans Anda. */ String url = "iot-6d***ql.mqtt.iothub.aliyuncs.com:1883"; /** * Informasi tentang koneksi MQTT. */ ThingTemplate manager = new ThingTemplate(); DeviceInfo deviceInfo = new DeviceInfo(); deviceInfo.productKey = productKey; deviceInfo.deviceName = deviceName; deviceInfo.deviceSecret = deviceSecret; /** * Klien HTTP Java mendukung TSLv1.2. */ System.setProperty("https.protocols", "TLSv2"); manager.init(deviceInfo, url); } - Inisialisasi parameter koneksi.
public void init(final DeviceInfo deviceInfo, String url) { LinkKitInitParams params = new LinkKitInitParams(); /** * Konfigurasikan parameter untuk inisialisasi MQTT. */ IoTMqttClientConfig config = new IoTMqttClientConfig(); config.productKey = deviceInfo.productKey; config.deviceName = deviceInfo.deviceName; config.deviceSecret = deviceInfo.deviceSecret; config.channelHost = url; /** * Tentukan apakah akan menerima pesan offline. * Bidang cleanSession yang sesuai dengan koneksi MQTT. */ config.receiveOfflineMsg = false; params.mqttClientConfig = config; ALog.setLevel(LEVEL_DEBUG); ALog.i(TAG, "info koneksi mqtt=" + params); /** * Konfigurasikan parameter inisialisasi dan tentukan informasi sertifikat perangkat. */ params.deviceInfo = deviceInfo; /** Bentuk koneksi. **/ LinkKit.getInstance().init(params, new ILinkKitConnectListener() { public void onError(AError aError) { ALog.e(TAG, "Error Inisialisasi error=" + aError); } public void onInitDone(InitResult initResult) { ALog.i(TAG, "onInitDone result=" + initResult); List<Property> properties = LinkKit.getInstance().getDeviceThing().getProperties(); ALog.i(TAG, "Properti perangkat" + JSON.toJSONString(properties)); List<Event> getEvents = LinkKit.getInstance().getDeviceThing().getEvents(); ALog.i(TAG, "Daftar kejadian perangkat" + JSON.toJSONString(getEvents)); /* Kirim properti. TODO: Pastikan properti yang ingin Anda kirim didefinisikan dalam model TSL produk. Contoh: MicSwitch. Jika tidak, pesan kesalahan akan dikembalikan. */ handlePropertySet("MicSwitch", new ValueWrapper.IntValueWrapper(1)); /* Kirim kejadian. TODO: Pastikan kejadian yang ingin Anda kirim didefinisikan dalam model TSL produk. Contoh: Offline_alarm. Jika tidak, pesan kesalahan akan dikembalikan. */ Map<String,ValueWrapper> values = new HashMap<>(); values.put("eventValue",new ValueWrapper.IntValueWrapper(0)); OutputParams outputParams = new OutputParams(values); handleEventSet("Offline_alarm",outputParams); } }); }Catatan Pengenal properti dan kejadian dalam kode harus sama dengan pengenal yang didefinisikan dalam model TSL. - Konfigurasikan Link SDK untuk mengirimkan properti.
/** * Perangkat mengirimkan properti dalam format JSON Alink. * @param identifier: pengenal properti. * @param value: nilai properti. * @return */ private void handlePropertySet(String identifier, ValueWrapper value ) { ALog.i(TAG, "Pengenal properti=" + identifier); Map<String, ValueWrapper> reportData = new HashMap<>(); reportData.put(identifier, value); LinkKit.getInstance().getDeviceThing().thingPropertyPost(reportData, new IPublishResourceListener() { public void onSuccess(String s, Object o) { // Properti dikirimkan. ALog.i(TAG, "Dikirimkan. onSuccess() dipanggil dengan: s = [" + s + "], o = [" + o + "]"); } public void onError(String s, AError aError) { // Pengiriman nilai properti gagal. ALog.i(TAG, "Gagal mengirimkan. onError() dipanggil dengan: s = [" + s + "], aError = [" + JSON.toJSONString(aError) + "]"); } }); } - Konfigurasikan Link SDK untuk mengirimkan kejadian.
/** * Perangkat mengirimkan kejadian dalam format JSON Alink. * @param identifier: pengenal kejadian. * @param params: parameter kejadian. * @return */ private void handleEventSet(String identifyID, OutputParams params ) { ALog.i(TAG, "Pengenal kejadian=" + identifyID + " params=" + JSON.toJSONString(params)); LinkKit.getInstance().getDeviceThing().thingEventPost( identifyID, params, new IPublishResourceListener() { public void onSuccess(String s, Object o) { // Kejadian dikirimkan. ALog.i(TAG, "Dikirimkan. onSuccess() dipanggil dengan: s = [" + s + "], o = [" + o + "]"); } public void onError(String s, AError aError) { // Pengiriman kejadian gagal. ALog.i(TAG, "Gagal mengirimkan. onError() dipanggil dengan: s = [" + s + "], aError = [" + JSON.toJSONString(aError) + "]"); } }); }
Kirim perintah untuk mengonfigurasi properti dan memanggil layanan menggunakan SDK IoT Platform
- Inisialisasi klien.
File IotClient di direktori java/src/main/com.aliyun.iot.client berisi kode contoh.
public class IotClient { private static String accessKeyID; private static String accessKeySecret; private static String regionId; private static String domain; private static String version; public static DefaultAcsClient getClient() { DefaultAcsClient client = null; Properties prop = new Properties(); try { prop.load(Object.class.getResourceAsStream("/config.properties")); accessKeyID = prop.getProperty("user.accessKeyID"); accessKeySecret = prop.getProperty("user.accessKeySecret"); regionId = prop.getProperty("iot.regionId"); domain = prop.getProperty("iot.domain"); version = prop.getProperty("iot.version"); IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyID, accessKeySecret); DefaultProfile.addEndpoint(regionId, regionId, prop.getProperty("iot.productCode"), prop.getProperty("iot.domain")); // Inisialisasi klien. client = new DefaultAcsClient(profile); } catch (Exception e) { LogUtil.print("Gagal menginisialisasi klien. exception:" + e.getMessage()); } return client; } public static String getRegionId() { return regionId; } public static void setRegionId(String regionId) { IotClient.regionId = regionId; } public static String getDomain() { return domain; } public static void setDomain(String domain) { IotClient.domain = domain; } public static String getVersion() { return version; } public static void setVersion(String version) { IotClient.version = version; } } - Inisialisasi kelas publik CommonRequest.
File AbstractManager di direktori java/src/main/com.aliyun.iot.api.common.openApi mengenkapsulasi kelas publik CommonRequest.
public class AbstractManager { private static DefaultAcsClient client; static { client = IotClient.getClient(); } /** * Inisialisasi kelas CommonRequest. action: nama operasi API. * domain: titik akhir. * version: versi API. */ public static CommonRequest executeTests(String action) { CommonRequest request = new CommonRequest(); request.setDomain(IotClient.getDomain()); request.setMethod(MethodType.POST); request.setVersion(IotClient.getVersion()); request.setAction(action); return request; } - Panggil operasi API IoT Platform untuk mengonfigurasi properti dan memanggil layanan.
File ThingManagerForPopSDk di direktori java/src/main/com.aliyun.iot.api.common.openApi berisi kode contoh.
- Panggil operasi SetDeviceProperty untuk mengonfigurasi properti perangkat.
public static void SetDeviceProperty(String InstanceId, String IotId, String ProductKey, String DeviceName , String Items) { SetDevicePropertyResponse response =null; SetDevicePropertyRequest request=new SetDevicePropertyRequest(); request.setDeviceName(DeviceName); request.setIotId(IotId); request.setItems(Items); request.setProductKey(ProductKey); request.setIotInstanceId(InstanceId); try { response = client.getAcsResponse(request); if (response.getSuccess() != null && response.getSuccess()) { LogUtil.print("Properti perangkat dikonfigurasi."); LogUtil.print(JSON.toJSONString(response)); } else { LogUtil.print("Gagal mengonfigurasi properti perangkat."); LogUtil.error(JSON.toJSONString(response)); } } catch (ClientException e) { e.printStackTrace(); LogUtil.error("Gagal mengonfigurasi properti perangkat." + JSON.toJSONString(response)); } } - Panggil operasi SetDevicesProperty untuk mengonfigurasi properti perangkat secara massal.
/** * Konfigurasi properti perangkat secara massal. * * @param ProductKey: ProductKey produk tempat perangkat yang propertinya ingin Anda konfigurasi berada. * @param DeviceNames: DeviceNames perangkat yang propertinya ingin Anda konfigurasi. * @param Items: informasi properti yang terdiri dari beberapa string JSON pasangan key-value. Parameter ini wajib. * * @Des: deskripsi. */ public static void SetDevicesProperty(String InstanceId, String ProductKey, List<String> DeviceNames, String Items) { SetDevicesPropertyResponse response = new SetDevicesPropertyResponse(); SetDevicesPropertyRequest request = new SetDevicesPropertyRequest(); request.setDeviceNames(DeviceNames); request.setItems(Items); request.setProductKey(ProductKey); request.setIotInstanceId(InstanceId); try { response = client.getAcsResponse(request); if (response.getSuccess() != null && response.getSuccess()) { LogUtil.print("Properti dikonfigurasi secara massal."); LogUtil.print(JSON.toJSONString(response)); } else { LogUtil.print("Gagal mengonfigurasi properti perangkat secara massal."); LogUtil.error(JSON.toJSONString(response)); } } catch (ClientException e) { e.printStackTrace(); LogUtil.error("Gagal mengonfigurasi properti perangkat secara massal." + JSON.toJSONString(response)); } } - Panggil operasi InvokeThingService untuk memanggil layanan perangkat.
/** * @param Identifier: pengenal layanan. Parameter ini wajib. * @param Args: parameter input yang diperlukan untuk memulai layanan. Parameter ini wajib. */ public static InvokeThingServiceResponse.Data InvokeThingService(String InstanceId, String IotId, String ProductKey, String DeviceName, String Identifier, String Args) { InvokeThingServiceResponse response =null; InvokeThingServiceRequest request = new InvokeThingServiceRequest(); request.setArgs(Args); request.setDeviceName(DeviceName); request.setIotId(IotId); request.setIdentifier(Identifier); request.setProductKey(ProductKey); request.setIotInstanceId(InstanceId); try { response = client.getAcsResponse(request); if (response.getSuccess() != null && response.getSuccess()) { LogUtil.print("Layanan dieksekusi."); LogUtil.print(JSON.toJSONString(response)); } else { LogUtil.print("Gagal mengeksekusi layanan."); LogUtil.error(JSON.toJSONString(response)); } return response.getData(); } catch (ClientException e) { e.printStackTrace(); LogUtil.error("Gagal mengeksekusi layanan." + JSON.toJSONString(response)); } return null; }Catatan Jika Anda ingin memanggil layanan secara sinkron, atur parameter Invoking Method ke Synchronization saat Anda mendefinisikan model TSL. Saat mengembangkan perangkat, Anda harus menulis kode untuk memproses pemanggilan layanan sinkron. - Panggil operasi InvokeThingsService untuk memanggil layanan perangkat secara massal.
/** * @param Identifier: pengenal layanan. Parameter ini wajib. * @param Args: parameter input yang diperlukan untuk memulai layanan. Parameter ini wajib. */ public static void InvokeThingsService(String InstanceId, String IotId, String ProductKey, List<String> DeviceNames, String Identifier, String Args) { InvokeThingsServiceResponse response =null; InvokeThingsServiceRequest request = new InvokeThingsServiceRequest(); request.setArgs(Args); request.setIdentifier(Identifier); request.setDeviceNames(DeviceNames); request.setProductKey(ProductKey); request.setIotInstanceId(InstanceId); try { response = client.getAcsResponse(request); if (response.getSuccess() != null && response.getSuccess()) { LogUtil.print("Layanan dipanggil."); LogUtil.print(JSON.toJSONString(response)); } else { LogUtil.print("Gagal memanggil layanan secara massal."); LogUtil.error(JSON.toJSONString(response)); } } catch (ClientException e) { e.printStackTrace(); LogUtil.error("Gagal memanggil layanan secara massal." + JSON.toJSONString(response)); } }
- Panggil operasi SetDeviceProperty untuk mengonfigurasi properti perangkat.
Contoh permintaan:
public static void main(String[] args) {
/** DeviceName perangkat online dan Productkey produk tempat perangkat online tersebut berada. */
String deviceName = "2pxuAQB2I7wGPmqq***";
String deviceProductkey = "a1QbjI2***";
/** Jika Anda menggunakan instans Enterprise Edition atau instans publik versi baru, tentukan ID instans untuk parameter InstanceId. Untuk mendapatkan ID instans, masuk ke konsol IoT Platform dan lihat ID instans di halaman Ringkasan.
* Jika Anda menggunakan instans publik versi lama, biarkan parameter InstanceId kosong "".
*/
String InstanceId = "iot-***tl02";
//1. Konfigurasikan properti perangkat.
SetDeviceProperty(InstanceId, null, deviceProductkey, deviceName,"{\"hue\":0}");
//2. Konfigurasikan properti perangkat secara massal.
List<String> deviceNames = new ArrayList<>();
deviceNames.add(deviceName);
SetDevicesProperty(InstanceId, deviceProductkey, deviceNames, "{\"hue\":0}");
//3. Panggil layanan perangkat.
InvokeThingService(InstanceId, null, deviceProductkey, deviceName, "ModifyVehicleInfo", "{}");
//4. Panggil layanan perangkat secara massal.
List<String> deviceNamesService = new ArrayList<>();
deviceNamesService.add(deviceName);
InvokeThingsService(null, deviceProductkey, deviceNamesService, "ModifyVehicleInfo", "{}");
}Debug SDK
Setelah Anda mengonfigurasi Link SDK dan IoT Platform SDK, jalankan SDK tersebut.
Periksa hasil:
- Lihat log lokal.

- Pada halaman Device Details perangkat, klik Default Module.
- Tab Status menampilkan nilai properti terbaru yang dikirimkan oleh perangkat.
- Tab Events menampilkan kejadian yang paling baru dikirimkan oleh perangkat.
- Tab Invoke Service menampilkan catatan pemanggilan layanan.
