Site icon Elektrologi

Koneksi REST API ke ThingsBoard IoT Gateway

ThingsBoard gateway dapat menerima data dari client dengan protokol REST connector.

Arsitektur Thingsboard IoT Gateway

 

 

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:

Literatur

 

 

 

 

Exit mobile version