Topik ini menjelaskan cara mengonfigurasi IoT as Bridge SDK untuk menggunakan fitur lanjutan. Anda dapat menentukan jalur file konfigurasi dan mendaftarkan jembatan secara dinamis. Selain itu, Anda dapat memanggil operasi yang dienkapsulasi dalam IoT as Bridge SDK untuk mengirimkan data Thing Specification Language (TSL), mengirimkan properti atau peristiwa, menetapkan properti, serta memanggil layanan.
Tentukan jalur file konfigurasi
Secara default, file konfigurasi untuk jembatan adalah application.conf, sedangkan file konfigurasi pemetaan sertifikat perangkat adalah devices.conf.
IoT as Bridge SDK memungkinkan Anda menentukan jalur file kustom. Sebelum memanggil metode bootstrap(), Anda dapat memanggil metode ConfigFactory.init() untuk menentukan jalur file konfigurasi. Anda juga dapat membuat instance dan mengimplementasikan metode sesuai kebutuhan bisnis Anda.
Contoh kode:
private static DeviceConfigManager selfDefineDeviceConfigManager = new DeviceConfigManager() {
@Override
public DeviceIdentity getDeviceIdentity(String originalIdentity) {
return devicesMap.get(originalIdentity);
}
@Override
public String getOriginalIdentity(String productKey, String deviceName) {
return null;
}
};
BridgeBootstrap bridgeBootstrap = new BridgeBootstrap();
ConfigFactory.init(ConfigFactory.getBridgeConfigManager("application-self-define.conf"),selfDefineDeviceConfigManager);
bridgeBootstrap.bootstrap();Daftarkan jembatan secara dinamis
Saat menyebarkan jembatan pada sejumlah besar server, proses penyebarannya menjadi kompleks jika Anda harus menentukan jembatan berbeda untuk setiap server. Untuk menyederhanakan proses ini, Anda dapat mengonfigurasi file konfigurasi jembatan application.conf untuk mendaftarkan jembatan secara dinamis.
Anda perlu menentukan parameter productKey dan popClientProfile dari sebuah jembatan dalam file konfigurasi. Kemudian, IoT as Bridge SDK akan memanggil Operasi API dari IoT Platform untuk mendaftarkan jembatan dan menggunakan alamat MAC server jembatan sebagai DeviceName dari jembatan tersebut.
Untuk mendaftarkan jembatan secara dinamis, cukup konfigurasikan file konfigurasi jembatan. Untuk informasi lebih lanjut tentang contoh kode, lihat Gunakan Fitur Dasar.
Semua bidang dalam parameter popClientProfile harus ditentukan. Jika alamat MAC telah digunakan sebagai DeviceName dari perangkat yang ada, perangkat tersebut akan digunakan sebagai jembatan.
Parameter deviceName dan deviceSecret harus dibiarkan kosong. Jika Anda telah menentukan informasi terkait jembatan, jembatan tersebut tidak dapat didaftarkan secara dinamis.
Kami merekomendasikan penggunaan perangkat uji khusus untuk debugging. Hindari melakukan debugging program di mesin lokal untuk mencegah dampak yang mungkin terjadi pada lingkungan produksi.
Jika Anda mendebag program di beberapa mesin lokal, alamat MAC mesin-mesin tersebut akan didaftarkan sebagai nama jembatan. Jembatan-jembatan tersebut akan dikaitkan dengan semua perangkat yang ditentukan dalam file devices.conf.
Parameter | Diperlukan | Deskripsi |
productKey | Ya | ProductKey dari produk tempat jembatan tersebut termasuk. |
subDeviceConnectMode | Tidak | Tipe jembatan.
Jembatan ukuran besar dan kecil menggunakan kebijakan berbeda untuk memutuskan perangkat. Untuk informasi lebih lanjut, lihat bagian Putuskan koneksi perangkat dari IoT Platform dari topik "Gunakan fitur dasar". |
http2Endpoint | Ya | Titik akhir gateway HTTP/2. Titik akhir ini digunakan untuk membentuk koneksi persisten antara jembatan dan IoT Platform melalui protokol HTTP/2. Format titik akhir:
|
authEndpoint | Ya | Titik akhir layanan verifikasi perangkat. Format titik akhir:
|
popClientProfile | Ya | Jika Anda menentukan parameter ini, IoT as Bridge SDK secara otomatis memanggil operasi IoT Platform untuk membuat jembatan. Tabel berikut menjelaskan bidang-bidang dari popClientProfile. |
Bidang | Diperlukan | Deskripsi |
accessKey | Ya | ID AccessKey dari akun Alibaba Cloud Anda. Masuk ke Konsol IoT Platform, arahkan pointer ke foto profil Anda, lalu klik AccessKey Management. Di halaman Pasangan AccessKey, Anda dapat membuat atau melihat pasangan AccessKey. |
accessSecret | Ya | Rahasia AccessKey dari akun Alibaba Cloud Anda. |
name | Ya | ID wilayah tempat jembatan tersebut termasuk. Untuk informasi lebih lanjut tentang ID wilayah, lihat Wilayah dan zona. |
region | Ya | |
product | Ya | Nama produk. Tetapkan nilainya menjadi Iot. |
endpoint | Ya | Titik akhir API di wilayah tertentu. Nilainya harus ditentukan dalam format Ganti ${RegionId} dengan ID wilayah tempat layanan IoT Platform Anda berada. Untuk informasi lebih lanjut tentang ID wilayah, lihat Wilayah dan Zona. Sebagai contoh, jika layanan IoT Platform Anda berada di wilayah China (Shanghai), titik akhirnya adalah |
Contoh kode berikut menunjukkan cara mengonfigurasi jembatan ukuran kecil. Dalam contoh ini, instans Enterprise Edition digunakan.
// Titik akhir layanan.
http2Endpoint = "https://${IotInstanceId}.http2.iothub.aliyuncs.com:443"
authEndpoint = "https://${IotInstanceId}.auth.iothub.aliyuncs.com/auth/bridge"
// Parameter jembatan.
productKey = ${YourProductKey}
popClientProfile = {
accessKey = ${YourAliyunAccessKey}
accessSecret = ${YourAliyunAccessSecret}
name = cn-shanghai
region = cn-shanghai
product = Iot
endpoint = iot.cn-shanghai.aliyuncs.com
}Panggil operasi untuk mengirimkan data TSL
IoT as Bridge SDK mengenkapsulasi operasi untuk mengirimkan data. Anda dapat memanggil operasi reportProperty untuk mengirimkan properti, operasi fireEvent untuk mengirimkan peristiwa, dan operasi updateDeviceTag untuk memperbarui tag. Perangkat dapat menggunakan operasi-operasi ini untuk melaporkan properti, melaporkan peristiwa, serta memperbarui tag perangkat.
Sebelum memanggil operasi reportProperty dan fireEvent, Anda harus mendefinisikan properti dan peristiwa di Konsol IoT Platform. Masuk ke Konsol IoT Platform dan buka halaman detail produk. Kemudian, definisikan properti dan peristiwa di tab Define Feature. Untuk informasi lebih lanjut, lihat Tambahkan Fitur TSL.
Jika tag sudah ada saat Anda memanggil operasi updateDeviceTag, nilai tag akan diperbarui. Untuk melihat tag yang ada, buka halaman detail perangkat di Konsol IoT Platform. Jika tag tidak ada, IoT Platform akan secara otomatis membuat tag tersebut.
Contoh kode:
TslUplinkHandler tslUplinkHandler = new TslUplinkHandler();
// Kirim properti.
// Properti testProp telah didefinisikan.
String requestId = String.valueOf(random.nextInt(1000));
// Timestamp tidak disertakan dalam data properti yang dikirimkan.
tslUplinkHandler.reportProperty(requestId, originalIdentity, "testProp", random.nextInt(100));
// Timestamp disertakan dalam data properti yang dikirimkan.
//tslUplinkHandler.reportProperty(requestId, originalIdentity, "testProp", random.nextInt(100), System.currentTimeMillis());
// Kirim peristiwa.
// Peristiwa testEvent telah didefinisikan.
requestId = String.valueOf(random.nextInt(1000));
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("testEventParam", 123);
// Timestamp tidak disertakan dalam data peristiwa yang dikirimkan.
tslUplinkHandler.fireEvent(originalIdentity, "testEvent", ThingEventTypes.INFO, params);
// Timestamp disertakan dalam data peristiwa yang dikirimkan.
//tslUplinkHandler.fireEvent(originalIdentity, "testEvent", ThingEventTypes.INFO, params, System.currentTimeMillis());
// Perbarui tag perangkat.
// Kunci tag diatur menjadi testDeviceTag.
requestId = String.valueOf(random.nextInt(1000));
tslUplinkHandler.updateDeviceTag(requestId, originalIdentity, "testDeviceTag", String.valueOf(random.nextInt(1000)));Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter | Deskripsi |
requestId | ID permintaan. |
originalIdentity | Pengenal asli perangkat. |
testProp | Pengenal properti. Dalam contoh ini, pengenal properti yang didefinisikan adalah testProp. Properti testProp dikirimkan ke IoT Platform. |
random.nextInt(100) | Nilai properti. Saat Anda mendefinisikan properti, Anda dapat menetapkan rentang nilai. Dalam contoh ini, |
testEvent | Pengenal peristiwa. Dalam contoh ini, pengenal peristiwa yang didefinisikan adalah testEvent. Peristiwa testEvent dikirimkan ke IoT Platform. |
ThingEventTypes.INFO | Tipe peristiwa. ThingEventTypes menentukan tipe peristiwa. Nilai INFO menunjukkan bahwa tipe peristiwa adalah INFO. Dalam contoh ini, tipe peristiwa diatur ke INFO saat peristiwa testEvent didefinisikan di Konsol IoT Platform. Jika tipe peristiwa adalah ERROR, atur parameter ini ke |
params | Parameter keluaran peristiwa. Pengenal, tipe data, dan rentang nilai parameter keluaran didefinisikan di Konsol IoT Platform. Dalam contoh ini, identifier parameter keluaran adalah testEventParam, dan nilainya adalah 123. |
testDeviceTag | Kunci tag. Tipe datanya adalah string. Dalam contoh ini, kuncinya adalah testDeviceTag. Tetapkan kunci tag berdasarkan aturan konfigurasi untuk kunci tag dan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Tag. |
String.valueOf(random.nextInt(1000)) | Nilai tag. Tipe datanya adalah string. Dalam contoh ini, |
System.currentTimeMillis() | Timestamp sistem. Tentukan timestamp UNIX yang mewakili jumlah milidetik yang telah berlalu sejak 1 Januari 1970, 00:00:00 Waktu Universal Terkoordinasi (UTC). |
Panggil operasi untuk mengirimkan beberapa properti dan peristiwa sekaligus
IoT as Bridge SDK mengenkapsulasi operasi untuk mengirimkan beberapa properti dan peristiwa sekaligus. Anda perlu membuat objek BatchPostEventPropertyMessage dan memanggil metode addProperty() serta addEvent() untuk menambahkan data properti dan peristiwa. Kemudian, buat objek TslUplinkHandler dan panggil metode BatchPostEventPropertyMessage() untuk mengirimkan data.
Sebelum memanggil operasi reportProperty dan fireEvent, Anda harus mendefinisikan properti dan peristiwa di Konsol IoT Platform. Masuk ke Konsol IoT Platform dan buka halaman detail produk. Kemudian, definisikan properti dan peristiwa di tab Define Feature. Untuk informasi lebih lanjut, lihat Tambahkan Fitur TSL.
Contoh kode:
TslUplinkHandler tslUplinkHandler = new TslUplinkHandler();
// Kirim beberapa properti dan peristiwa sekaligus.
String requestId = String.valueOf(random.nextInt(1000));
long startTime = System.currentTimeMillis() - 3000;
// Buat pesan untuk mengirimkan data.
BatchPostEventPropertyMessage batchPostEventPropertyMessage = new BatchPostEventPropertyMessage();
Map<String, Object> aiEventParams = new HashMap<>();
aiEventParams.put("EventContent", "hello world");
batchPostEventPropertyMessage
.addProperty("PowerConsumption", 1000, startTime)
.addProperty("PowerConsumption", 123, startTime + 1000)
.addProperty("LightAdjustLevel", 23, startTime)
.addProperty("LightAdjustLevel", 44, startTime + 1000)
.addProperty("LightAdjustLevel", 47, startTime + 2000)
.addEvent("AIEvent", aiEventParams, startTime);
batchPostEventPropertyMessage.setId(requestId);
// Kirimkan data.
tslUplinkHandler.batchPostEventPropertyMessage(originalIdentity, batchPostEventPropertyMessage);Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter | Deskripsi |
requestId | ID permintaan. |
startTime | Timestamp properti dan peristiwa yang akan dikirimkan. Tentukan timestamp UNIX yang mewakili jumlah milidetik yang telah berlalu sejak 1 Januari 1970, 00:00:00 UTC. Anda dapat menentukan nilai kustom untuk parameter ini berdasarkan kebutuhan bisnis Anda. |
aiEventParams | Informasi tentang peristiwa. |
PowerConsumption | Pengenal properti. Dalam contoh ini, pengenal properti yang didefinisikan mencakup PowerConsumption dan LightAdjustLevel. Nilai kedua properti pada titik waktu yang berbeda dikirimkan. |
LightAdjustLevel | |
AIEvent | Pengenal peristiwa. Dalam contoh ini, pengenal peristiwa yang didefinisikan adalah AIEvent. Peristiwa AIEvent dikirimkan ke IoT Platform. |
originalIdentity | Pengenal asli perangkat. |
Panggil operasi untuk menetapkan properti dan memanggil layanan
IoT as Bridge SDK mengenkapsulasi operasi PropertySetHandler untuk menetapkan properti dan operasi ServiceInvokeHandler untuk memanggil layanan. Perangkat dapat menggunakan operasi-operasi ini untuk menerima perintah dari IoT Platform guna memperbarui data.
Contoh kode:
BridgeBootstrap bridgeBootstrap = new BridgeBootstrap();
// Tetapkan properti.
bridgeBootstrap.setPropertySetHandler(new PropertySetHandler() {
@Override
public void onPropertySet(PropertySetMessage msg) {
log.info("on property set, {}", msg.getParams());
// Jika Anda memanggil metode replySuccess(), SDK akan mengirimkan pesan /property/set_reply ke IoT Platform. Kode responsnya adalah 200.
msg.replySuccess();
// Jika Anda memanggil metode replyFail(), SDK akan mengirimkan pesan /property/set_reply ke IoT Platform. Anda dapat menentukan kode respons berdasarkan kebutuhan bisnis Anda.
//msg.replyFail(400);
}
});
// Panggil layanan.
bridgeBootstrap.setServiceInvokeHandler(new ServiceInvokeHandler() {
@Override
public void onServiceInvoke(ServiceInvokeMessage message) {
log.info("on service invoke, {}", message.getParams());
// Jika Anda memanggil metode replySuccess(), SDK akan mengirimkan pesan /service/{service.identifier}_reply ke IoT Platform. Kode responsnya adalah 200.
message.replySuccess();
// Jika Anda memanggil metode replyFail(), SDK akan mengirimkan pesan /service/{service.identifier}_reply ke IoT Platform. Anda dapat menentukan kode respons berdasarkan kebutuhan bisnis Anda.
//msg.replyFail(400);
}
});