本文將幫助你熟悉有關iot網關中MQTT連接器的配置,在通用配置中啟用該種連接器,這個連接器能夠連接到外部的MQTT Broker并訂閱,從而獲取從設備中上報的資料,同時,連接器也可以推送來自ThingsBoard資料到MQTT Broker,
連接器配置:mqtt.json
連接器配置是一個json檔案,它包含了MQTT Broker的連接資訊、訂閱哪些主題、如何處理資料等,
mqtt.json樣例
{
"broker": {
"name":"Default Local Broker",
"host":"192.168.1.100",
"port":1883,
"security": {
"type": "basic",
"username": "user",
"password": "password"
}
},
"mapping": [
{
"topicFilter": "/sensor/data",
"converter": {
"type": "json",
"deviceNameJsonExpression": "${serialNumber}",
"deviceTypeJsonExpression": "${sensorType}",
"timeout": 60000,
"attributes": [
{
"type": "string",
"key": "model",
"value": "${sensorModel}"
}
],
"timeseries": [
{
"type": "double",
"key": "temperature",
"value": "${temp}"
},
{
"type": "double",
"key": "humidity",
"value": "${hum}"
}
]
}
},
{
"topicFilter": "/sensor/+/data",
"converter": {
"type": "json",
"deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/data)",
"deviceTypeTopicExpression": "Thermometer",
"timeout": 60000,
"attributes": [
{
"type": "string",
"key": "model",
"value": "${sensorModel}"
}
],
"timeseries": [
{
"type": "double",
"key": "temperature",
"value": "${temp}"
},
{
"type": "double",
"key": "humidity",
"value": "${hum}"
}
]
}
},
{
"topicFilter": "/custom/sensors/+",
"converter": {
"type": "custom",
"extension": "CustomMqttUplinkConverter",
"extension-config": {
"temperatureBytes" : 2,
"humidityBytes" : 2,
"batteryLevelBytes" : 1
}
}
}
],
"connectRequests": [
{
"topicFilter": "sensor/connect",
"deviceNameJsonExpression": "${SerialNumber}"
},
{
"topicFilter": "sensor/+/connect",
"deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/connect)"
}
],
"disconnectRequests": [
{
"topicFilter": "sensor/disconnect",
"deviceNameJsonExpression": "${SerialNumber}"
},
{
"topicFilter": "sensor/+/disconnect",
"deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/disconnect)"
}
],
"attributeUpdates": [
{
"deviceNameFilter": "SmartMeter.*",
"attributeFilter": "uploadFrequency",
"topicExpression": "sensor/${deviceName}/${attributeKey}",
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
}
],
"serverSideRpc": [
{
"deviceNameFilter": ".*",
"methodFilter": "echo",
"requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"responseTopicExpression": "sensor/${deviceName}/response/${methodName}/${requestId}",
"responseTimeout": 10000,
"valueExpression": "${params}"
},
{
"deviceNameFilter": ".*",
"methodFilter": "no-reply",
"requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"valueExpression": "${params}"
}
]
}
配置中broker模塊
| 引數 | 默認值 | 描述 |
|---|---|---|
| name | Default Broker | 日志和保存到設備的代理名稱 |
| host | localhost | mqtt broker的主機名或者ip地址 |
| port | 1883 | mqtt broker埠 |
配置中的security模塊
該模塊配置提供了mqtt broker客戶端授權的訪問資訊
三種配置:Basic,Anonymous,Certificates
Basic
| 引數 | 默認值 | 描述 |
|---|---|---|
| type | basic | 認證型別 |
| username | username | 認證中的用戶名 |
| password | password | 認證中的密碼 |
配置如下所示:
"security": {
"type": "basic",
"username": "username",
"password": "password"
}
Anonymous
| 引數 | 默認值 | 描述 |
|---|---|---|
| type | anonymous | 認證型別 |
配置如下所示:
"security": {
"type": "anonymous"
}
Certificates
| 引數 | 默認值 | 描述 |
|---|---|---|
| caCert | /etc/thingsboard-gateway/ca.pem | ca檔案路徑 |
| privateKey | /etc/thingsboard-gateway/privateKey.pem | 私鑰檔案路徑 |
| cert | /etc/thingsboard-gateway/certificate.pem | 證書檔案路徑 |
配置代碼如下:
"security":{
"caCert": "/etc/thingsboard-gateway/ca.pem",
"privateKey": "/etc/thingsboard-gateway/privateKey.pem",
"cert": "/etc/thingsboard-gateway/certificate.pem"
}
組態檔中的mapping模塊
該配置包含一組主題陣列,網關將會訂閱這些主題并處理設備上報的資料
| 引數 | 默認值 | 描述 |
|---|---|---|
| topicFilter | /sensor/data | 訂閱的主題地址 |
topicFilter支持特殊字符,其中包括:‘#’ 和 ‘+’,這樣就可以實作訂閱多個主題
| 樣例名稱 | 主題 | 主題過濾 | 報文內容 | 備注 |
|---|---|---|---|---|
| Example 1 | /sensor/data | /sensor/data | {“serialNumber”: “SN-001”, “sensorType”: “Thermometer”, “sensorModel”: “T1000”, “temp”: 42, “hum”: 58} | 設備名稱是報文的一部分 |
| Example 2 | /sensor/SN-001/data | /sensor/+/data | { “sensorType”: “Thermometer”, “sensorModel”: “T1000”, “temp”: 42, “hum”: 58} | 設備名稱是主題的一部分 |
配置中的轉換器模塊
mqtt轉換器型別: json和custom
json
| 引數 | 默認值 | 描述 |
|---|---|---|
| type | json | 向連接器提供默認轉換器用于處理設備上報的資料 |
| deviceNameJsonExpression | ${serialNumber} | 簡單的json運算式,用于獲取訊息體中的設備名稱 |
| deviceTypeJsonExpression | ${sensorType} | 簡單的json運算式,用于獲取訊息中的設備型別 |
| timeout | 60000 | 觸發“設備斷開”的超時時間 |
| attributes | 包含上報訊息的引數,這些引數將被解釋為設備的屬性 | |
| ...type | string | 當前屬性傳入的資料型別 |
| ...key | model | 屬性名,這個將發送到ThingsBoard平臺 |
| ...value | ${sensorModel} | 簡單的json運算式,用于獲取訊息中的值 |
| timeseries | 包含上報資料的引數,這些引數將被解釋為設備的遙測引數 | |
| ...type | double | 當前遙測引數型別 |
| ...key | temperature | 遙測引數名稱 |
| ...value | ${temp} | 簡單的json運算式,用于獲取訊息中的值 |
備注:實際attributes和telemetry中的引數可能與上述引數不同,但具有相同的結構
Example 1 對應的代碼如下:
{
"topicFilter": "/sensor/data",
"converter": {
"type": "json",
"deviceNameJsonExpression": "${serialNumber}",
"deviceTypeJsonExpression": "${sensorType}",
"timeout": 60000,
"attributes": [
{
"type": "string",
"key": "model",
"value": "${sensorModel}"
}
],
"timeseries": [
{
"type": "double",
"key": "temperature",
"value": "${temp}"
},
{
"type": "double",
"key": "humidity",
"value": "${hum}"
}
]
}
}
Example 2 對應的代碼:
{
"topicFilter": "/sensor/+/data",
"converter": {
"type": "json",
"deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/data)",
"deviceTypeTopicExpression": "Thermometer",
"timeout": 60000,
"attributes": [
{
"type": "string",
"key": "model",
"value": "${sensorModel}"
}
],
"timeseries": [
{
"type": "double",
"key": "temperature",
"value": "${temp}"
},
{
"type": "double",
"key": "humidity",
"value": "${hum}"
}
]
}
}
custom
自定義轉換器是為某些設備撰寫的轉換器,如下所示:
| 引數 | 默認值 | 描述 |
|---|---|---|
| type | custom | 向連接器提供資訊,自定義轉換器用于處理上報的資料 |
| extension | CustomMqttUplinkConverter | 自定義轉換器類的名稱 |
| extension-config | ||
| temperatureBytes | 2 | 遙測資料:溫度 |
| humidityBytes | 2 | 遙測資料:濕度 |
| batteryLevelBytes | 1 | 遙測資料:電池 |
配置代碼如下:
"converter": {
"type": "custom",
"extension": "CustomMqttUplinkConverter",
"extension-config": {
"temperatureBytes" : 2,
"humidityBytes" : 2,
"batteryLevelBytes" : 1
}
}
配置中的“connectRequests”模塊
ThingsBoard允許向設備發送RPC命令和有關設備屬性更新的通知,但是為了發生這些指令,平臺需要知道目標設備是否已連接和它使用的什么網關或者會話連接設備,如果您的設備不斷地發送遙測資料,ThingsBoard已經知道怎么推送通知了,如果您的設備剛剛連接到MQTT broker冰鞋等待指令或者更新,您需要向網關發送訊息并通知設備已連接到mqtt broker,
1. 設備名稱在訊息體中
| 引數 | 默認值 | 描述 |
|---|---|---|
| topicFilter | sensors/connect | broker發送關于新連接設備的資訊 |
| deviceNameJsonExpression | ${SerialNumber} | json運算式,獲取設備名稱 |
2. 設備名稱在主題地址中
| 引數 | 默認值 | 描述 |
|---|---|---|
| topicFilter | sensors/+/connect | brocker中topic 地址 |
| deviceNameJsonExpression | (?<=sensor\/)(.*?)(?=\/connect) | 正則運算式,獲取設備名稱 |
配置代碼如下所示:
"connectRequests": [
{
"topicFilter": "sensors/connect",
"deviceNameJsonExpression": "${$.SerialNumber}"
},
{
"topicFilter": "sensor/+/connect",
"deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/connect)"
}
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/303119.html
標籤:其他
