ThingsBoard gateway dapat menerima data dari client dengan protokol REST connector.
Daftar Isi
Setting Server
Untuk mengaktifkan REST API, pastikan ada baris berikut ini pada file /etc/thingsboard-gateway/config/tb_gateway.yaml
Penjelasan detail di artikel “IoT Gateway Configuration“
-
name: REST Connector
type: rest
configuration: rest.json
Berikut ini contoh konfigurasi connector untuk REST API.
Lokasi file adalah di /etc/thingsboard-gateway/config/rest.json
Penjelasan detail format file ini ada di artikel “REST Connector Configuration“
{
"host": "0.0.0.0",
"port": "5000",
"SSL": false,
"security": {
"cert": "~/ssl/cert.pem",
"key": "~/ssl/key.pem"
},
"mapping": [
{
"endpoint": "/device1",
"HTTPMethods": [
"POST"
],
"security": {
"type": "anonymous"
},
"converter": {
"type": "json",
"deviceNameExpression": "Device ${name}",
"deviceTypeExpression": "default",
"attributes": [
{
"type": "string",
"key": "model",
"value": "${sensorModel}"
}
],
"timeseries": [
{
"type": "double",
"key": "temperature",
"value": "${temp}"
},
{
"type": "double",
"key": "humidity",
"value": "${hum}"
}
]
}
}
],
"attributeUpdates": [
{
"HTTPMethod": "POST",
"SSLVerify": false,
"httpHeaders": {
"CONTENT-TYPE": "application/json"
},
"security": {
"type": "basic",
"username": "user",
"password": "passwd"
},
"timeout": 0.5,
"tries": 3,
"allowRedirects": true,
"deviceNameFilter": ".*REST$",
"attributeFilter": "data",
"requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
}
],
"serverSideRpc": [
{
"deviceNameFilter": ".*",
"methodFilter": "echo",
"requestUrlExpression": "http://127.0.0.1:5001/${deviceName}",
"responseTimeout": 1,
"HTTPMethod": "GET",
"valueExpression": "${params}",
"timeout": 10.0,
"tries": 3,
"httpHeaders": {
"Content-Type": "application/json"
},
"security": {
"type": "anonymous"
}
},
{
"deviceNameFilter": ".*",
"methodFilter": "no-reply",
"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"HTTPMethod": "POST",
"valueExpression": "${params}",
"httpHeaders": {
"Content-Type": "application/json"
},
"security": {
"type": "anonymous"
}
}
]
}
Penjelasan
“host”
"host": "0.0.0.0",
Setting host di contoh aslinya menggunakan 127.0.0.1, namun kalau pakai IP ini tidak dapat dikontak dari komputer lain. Supaya dapat dikontak dari IP lain, maka menggunakan 0.0.0.0 , atau bisa juga menggunakan IP address dari IoT Gateway tersebut
“port”
Port yang dipakai bebas. Pada contoh ini menggunakan port 5000 seperti sesuai contoh file aslinya.
“SSL”
konfigurasi ini tidak menggunakan security
“mapping”
Bagian ini berisi konfigurasi penerimaan data dari client dan juga pemetaan data untuk dikirim ke ThingsBoard Core.
“endpoint”: untuk mendefinisikan URL dari REST API
IoT Gateway ini misalnya menggunakan IP address 192.168.0.92. Jadi alamat dari REST API adalah http://192.168.0.92:5000/device1
“HTTPMethods”: konfigurasi ini menggunakan HTTP POST. Sesuai contoh dari Thingsboard
“security”: anonymous, tidak menggunakan password samsekali
“converter”: berisi pemetaan data yang diterima, ke parameter yang akan dikirim ke ThingsBoard Core
“deviceNameExpression”: “Device ${name}”, : baris ini artinya mengharapkan adanya parameter “name” dari data yang masuk. Data ini kemudian akan dikirim sebagai string “Device $name” ke ThingsBoard Core.
“attributes”: berisi atribut dari device di client
“timeseries”: berisi entry data yang akan dimasukkan sebagai data telemetri di Device di ThingsBoard Core.
Pada contoh ini ada 2 entry data, yaitu temperatur dan humidity. Parameter yang diharapkan diterima adalah “temp” dan “hum”. Parameter “temp” akan dipetakan ke parameter “temperature”, dan parameter “hum” akan dipetakan ke parameter “humidity”.
Client Dengan PHP CURL
Berikut ini contoh client menggunakan PHP Curl
<?php
// API URL
$url = 'http://192.168.0.92:5000/device1';
// Create a new cURL resource
$ch = curl_init($url);
// Setup request to send json via POST
$body_array = array();
$body_array["name"] = "123123";
$body_array["sensorModel"] = "CX811";
$body_array["hum"] = 78;
$body_array["temp"] = 65;
$body = json_encode($body_array);
// Attach encoded JSON string to the POST fields
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
// Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Execute the POST request
$result = curl_exec($ch);
// Close cURL resource
curl_close($ch);
print_r($payload);
print_r($result);
Berikut ini data yang masuk ke ThingsBoard sebagai latest telemetry
Jika koneksi berhasil, pada console thingsboard dan file log “connector.log” akan muncul pesan seperti berikut ini:
”2022-05-12 01:40:58′ – INFO – rest_connector – 319 – CONVERTER CONFIG: {‘type’: ‘json’, ‘deviceNameExpression’: ‘Device ${name}’, ‘deviceTypeExpression’: ‘default’, ‘attributes’: [{‘type’: ‘string’, ‘key’: ‘model’, ‘value’: ‘${sensorModel}’}], ‘timeseries’: [{‘type’: ‘double’, ‘key’: ‘temperature’, ‘value’: ‘${temp}’}, {‘type’: ‘double’, ‘key’: ‘humidity’, ‘value’: ‘${hum}’}]}’
”2022-05-12 01:40:58′ – INFO – rest_connector – 324 – CONVERTED_DATA: {‘deviceName’: ‘Device 58749’, ‘deviceType’: ‘default’, ‘attributes’: [{‘model’: ‘BMP280’}], ‘telemetry’: [{‘temperature’: ’80’}, {‘humidity’: ’67’}]}’
Dari pesan itu dapat diperiksa apakah konfigurasi “mapping” di rest.json sudah sesuai.
Client Dengan POSTMAN
Jika menggunakan software POSTMAN atau semacamnya, yg perlu diset adalah sebagai berikut:
- URL: http://192.168.0.92:5000/device1
- Payload dalam format JSON: {“name”:”58749″,”sensorModel”:”BMP280″,”hum”:67,”temp”:80}
Literatur