本文内容将帮助你通过thingsboard网关
快速接入modbus协议
的设备。并演示一个简单的数据读取与控制的例子。
本文具体实现官网modbus官网modbus例子,并补充控制modbus的部分
具体搭建步骤不在本文介绍
俩种方式
tb_gateway.yaml
中配置thingsboard的地址端口以及tb-gateway连接到tb使用的accessaToken(在tb页面创建设备并勾选是否网关
选项,复制此设备的accessToken,填入此配置),并打开modbus连接器配置。
thingsboard:
host: localhost
port: 1883
remoteShell: false
remoteConfiguration: false
security:
accessToken: z5zRQmSXe64U39my83jd
qos: 0
storage:
type: memory
read_records_count: 100
max_records_count: 100000
connectors:
-
name: Modbus Connector
type: modbus
configuration: modbus.json
Modbus相关配置modbus.json
具体含义在配置文件的注释
{
"server": {
"name": "Modbus Test Server", # modbus服务器名称
"type": "tcp",# modbus连接方式
"host": "10.211.55.3",# 地址
"port": 502, # 端口
"timeout": 35,
"method": "socket",
"devices": [
{
"unitId": 1,
"deviceName": "TH_sensor",# 设备名称,成功后会出现在tb的设备列表中
"attributesPollPeriod": 5000, # 每隔五秒拉取一次属性数据
"timeseriesPollPeriod": 5000, # 每隔五秒拉取一次遥测数据
"sendDataOnlyOnChange": false,
"attributes": [ # 数组中的定义作为属性上传到tb
{
"byteOrder": "BIG",
"tag": "batteryLevel", # 定义属性名称展示在tb设备的属性中
"type": "long",
"functionCode": 4, # modbus的功能码
"registerCount": 1,# 读取的寄存器数量(从寄存器开始地址)
"address": 2 # 读取的寄存器开始地址
}
],
"timeseries": [ # 作为遥测数据上传的定义
{
"byteOrder": "BIG",
"tag": "humidity",# 湿度
"type": "long",
"functionCode": 4, # modbus功能码 4(只读)
"registerCount": 1,
"address": 1 # modbus地址1
},
{
"byteOrder": "BIG",
"tag": "temperature",# 温度
"type": "long",
"functionCode": 3, # modbus功能码 3(可读写)
"registerCount": 1,
"address": 0 # modbus地址0
}
],
"rpc": [ # rpc写/控制功能定义
{
"tag": "resetTemperature", # 对应rpc中method的值要指定此值
"type": "16int", # 数据类型
"functionCode": 6, # modbus功能码 6
"objectsCount": 1,
"address": 0 # modbus地址 0
}
]
}
]
}
}
地址位0 功能码3(可读写)代表温度
地址位1 功能码4 代表湿度
地址位2 功能码4 代表电量
modbus.json
中的devices.unitId
modbus.json
中的functionCode
modbus.json
中的address
确保设备的配置文件所配置的规则链中有图中红框部分(发送rpc可做消息格式验证等操作,图中省略)
body
{
"method": "resetTemperature",
"params": 10
}
此时tb设备中应该有手动创建的网关设备和modbus.json中配置自动注册到tb的modbus连接的设备TH_sensor
return msg.temperature > 40;
转换节点 构建rpc消息
脚本内容 ,与老版本略有差异 (规则链rpc格式官网链接)
var request = {};
request.method = "resetTemperature";
request.params = 10;
return {msg: request, metadata: metadata, msgType: msgType};
最后调用动作节点 rpc call request
即可发送rpc控制命令。
然后观察设备的遥测数据中的温度,每当超过40,五秒后被重置为10。