This guide will help you to get familiar with Request Connector configuration for ThingsBoard IoT Gateway.
Use general configuration guide to enable this Connector.
The purpose of this Connector is to connect to external HTTP(S) API endpoints and get data from them.
Connector is also able to push data to external HTTP(S) API based on the updates/commands from ThingsBoard.
This connector is useful when you have some HTTP(S) API endpoints in your device or some data in external resource and you would like to push this data to the ThingsBoard.
We will describe connector configuration file below.
Connector configuration is a JSON file that contains information about how to connect to external API endpoints, what urls to use when reading data and how to process the data.
Let’s review the format of the configuration file using example below.
{
"host": "http://127.0.0.1:5000",
"SSLVerify": true,
"security": {
"type": "basic",
"username": "user",
"password": "password"
},
"mapping": [
{
"url": "getdata",
"httpMethod": "GET",
"httpHeaders": {
"ACCEPT": "application/json"
},
"allowRedirects": true,
"timeout": 0.5,
"scanPeriod": 5,
"converter": {
"type": "json",
"deviceNameJsonExpression": "SD8500",
"deviceTypeJsonExpression": "SD",
"attributes": [
{
"key": "serialNumber",
"type": "string",
"value": "${serial}"
}
],
"telemetry": [
{
"key": "Maintainer",
"type": "string",
"value": "${Developer}"
}
]
}
},
{
"url": "get_info",
"httpMethod": "GET",
"httpHeaders": {
"ACCEPT": "application/json"
},
"allowRedirects": true,
"timeout": 0.5,
"scanPeriod": 100,
"converter": {
"type": "custom",
"deviceNameJsonExpression": "SD8500",
"deviceTypeJsonExpression": "SD",
"extension": "CustomRequestUplinkConverter",
"extension-config": [
{
"key": "Totaliser",
"type": "float",
"fromByte": 0,
"toByte": 4,
"byteorder": "big",
"signed": true,
"multiplier": 1
},
{
"key": "Flow",
"type": "int",
"fromByte": 4,
"toByte": 6,
"byteorder": "big",
"signed": true,
"multiplier": 0.01
}
]
}
}
],
"attributeUpdates": [
{
"httpMethod": "POST",
"httpHeaders": {
"CONTENT-TYPE": "application/json"
},
"timeout": 0.5,
"tries": 3,
"allowRedirects": true,
"deviceNameFilter": "SD.*",
"attributeFilter": "send_data",
"requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
}
],
"serverSideRpc": [
{
"deviceNameFilter": ".*",
"methodFilter": "echo",
"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"responseTimeout": 1,
"httpMethod": "GET",
"valueExpression": "${params}",
"timeout": 0.5,
"tries": 3,
"httpHeaders": {
"Content-Type": "application/json"
}
},
{
"deviceNameFilter": ".*",
"methodFilter": "no-reply",
"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"httpMethod": "POST",
"valueExpression": "${params}",
"httpHeaders": {
"Content-Type": "application/json"
}
}
]
}
Parameter | Default value | Description |
---|---|---|
host | http://127.0.0.1:5000 | Domain address or ip of the server. |
SSLVerify | true | Verify or no SSL certificate on the server if available. |
This section provides configuration for client authorization at the external server.
One type of security configuration is Basic authentication. The Request Connector sends HTTP requests with the Authorization header that contains the word Basic word followed by a space and a base64-encoded string username:password.
Security section in configuration file will look like this:
|
Anonymous auth is the most simple option. It is useful for testing.
Security subsection in configuration file will look like this:
|
This configuration section contains array of objects with endpoints that the gateway will try to read after connecting to the server.
Also this section contains settings about processing incoming messages (converter).
After request, each response from that url is analyzed to extract device name, type and data (attributes and/or timeseries values).
By default, the gateway uses Json converter, but it is possible to provide custom converter. See example in the source code.
Note: You can specify multiple mapping objects inside the array.
Parameter | Default value | Description |
---|---|---|
url | getdata | Url address for sending request. |
httpMethod | GET | HTTP method for request (GET, POST etc.). |
httpHeaders | { “ACCEPT”: “application/json” } | Object contains additional HTTP headers for request. |
allowRedirects | true | Allow request redirection. |
timeout | 0.5 | Timeout for request. |
scanPeriod | 5 | Rescan rate. |
This subsection contains configuration for processing incoming messages.
Types of request converters:
Json converter is default converter, it looks for deviceName, deviceType, attributes and telemetry in the incoming message from the broker, with rules, described in this subsection:
Mapping subsection will look like:
|
A custom converter is converter written for some device:
Mapping subsection in the configuration will look like:
|
Configuration in this section are optional.
ThingsBoard allows to provision device attributes and fetch some of them from the device application.
You can treat this as a remote configuration for devices. Your devices are able to request shared attributes from ThingsBoard.
See user guide for more details.
The “attributeRequests” configuration allows configuring the format of the corresponding attribute request and response messages.
Parameter | Default value | Description |
---|---|---|
httpMethod | GET | HTTP method for request (GET, POST etc.). |
httpHeaders | { “CONTENT-TYPE”: “application/json” } | Object contains additional HTTP headers for request. |
timeout | 0.5 | Timeout for request. |
tries | 3 | Count of tries to send data |
allowRedirects | true | Allow request redirection. |
deviceNameFilter | SD.* | Regular expression device name filter, uses to determine, which function to execute. |
attributeFilter | send_data | Regular expression attribute name filter, uses to determine, which function to execute. |
requestUrlExpression | sensor/${deviceName}/${attributeKey} | JSON-path expression uses for creating url address to send a message. |
valueExpression | {\”${attributeKey}\”:\”${attributeValue}\”} | JSON-path expression uses for creating the message data that will send to url. |
The attributeUpdates section will look like:
"attributeUpdates": [
{
"httpMethod": "POST",
"httpHeaders": {
"CONTENT-TYPE": "application/json"
},
"timeout": 0.5,
"tries": 3,
"allowRedirects": true,
"deviceNameFilter": "SD.*",
"attributeFilter": "send_data",
"requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
}
]
ThingsBoard allows sending RPC commands to the device that is connected to ThingsBoard directly or via Gateway.
Configuration, provided in this section uses for sending RPC requests from ThingsBoard to device.
Parameter | Default value | Description |
---|---|---|
deviceNameFilter | SmartMeter.* | Regular expression device name filter, uses to determine, which function to execute. |
methodFilter | echo | Regular expression method name filter, uses to determine, which function to execute. |
requestUrlExpression | sensor/${deviceName}/request/${methodName}/${requestId} | JSON-path expression, uses to create url address to send RPC request. |
responseTimeout | 0.5 | Timeout for request. |
httpMethod | GET | HTTP method for request (GET, POST etc.). |
valueExpression | ${params} | JSON-path expression, uses for creating data for sending to the external endpoint. |
timeout | 0.5 | Timeout for request. |
tries | 3 | Count of tries to send data |
httpHeaders | { “CONTENT-TYPE”: “application/json” } | Object contains additional HTTP headers for request. |
"serverSideRpc": [
{
"deviceNameFilter": ".*",
"methodFilter": "echo",
"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"responseTimeout": 1,
"httpMethod": "GET",
"valueExpression": "${params}",
"timeout": 0.5,
"tries": 3,
"httpHeaders": {
"Content-Type": "application/json"
}
},
{
"deviceNameFilter": ".*",
"methodFilter": "no-reply",
"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"httpMethod": "POST",
"valueExpression": "${params}",
"httpHeaders": {
"Content-Type": "application/json"
}
}
]
Explore guides related to main ThingsBoard features: