1、设备Rpc 控制
服务器给设备端发送消息,客户端首先订阅 topic服务端往客户端订阅的 topic 发送消息,客户端通过 topic 获取到服务端的消息然后执行控制
2、配置远程调用终端
3、订阅 topic
客户端订阅 topic,等待接收服务器消息
可以看到,我们已经收到服务器的指令了
我们回复一下服务器的指令,完成控制
Rpc 发送存在2种
1、twoway=同步 等待设备响应
2、oneway=异步 不需要设备响应
服务器发送控制指令,会带个序列号,客户端发送响应的时候也需要匹配当前请求的序列号才行。可以看到相应成功了
4、调试 rpc 是否发送成功
记得保存一下规则链
5、通过 api 控制设备
swagger-ui地址:http://ip:端口/swagger-ui/
oneway执行发送后,可以看到立马成功了,并没有等待设备相应
twoway 等待客户端响应成功
6、持久化 Rpc
ThingsBoard有7种RPC的持久化状态:
QUEUED - RPC创建并保存到数据库尚未将RPC发送到设备,默认情况下平台将尝试一次发送所有待处理的RPC调用在某些情况下设备队列中有多个消息可能会导致网络阻塞建议使用”ACTORS_RPC_SEQUENTIAL”配置参数设置RPC调用顺序。
SENT - ThingsBoard尝试将RPC发送到设备。
DELIVERED - 设备已确认RPC这是one-way RPC的最后一步;
SUCCESSFUL - ThingsBoard收到two-way RPC的回复;
TIMEOUT - ThingsBoard传输层(MQTT/CoAP/LwM2M 等)检测到RPC传输超时;使用相应配置参数控制超时: MQTT_TIMEOUT(默认10秒)、COAP_TIMEOUT(默认10秒)、LWM2M_TIMEOUT(默认12 秒) 默认平台不会重试RPC的传递并且状态将更改为失败可以在RPC主体中配置重试次数最大重试次数由”ACTORS_RPC_MAX_RETRIES”配置参数控制(默认为 5)。
EXPIRED - RPC未交付或平台未在配置的到期时间内收到来自设备的回复;
FAILED - 配置的重试次数期间未能传递RPC或者设备固件不支持此类命令。
备注:在配置顺序RPC交付以及增加的到期时间、交付超时和重试次数时如果启用顺序RPC传递设备将无法处理特定的双向RPC命令则其他命令将不会发送到此设备。
7、规则链事件
RPC状态的更改作为单独的消息推送到规则引擎每个RPC状态都有相应的消息类型
消息包含有关RPC请求的详细信息包括来自RPC请求正文的实体ID和”additionalInfo”。
“RPC Successful”消息还包含来自设备的回复如果想在外部系统中处理来自设备的回复这些消息很有用。
{
"id": {
"entityType": "RPC",
"id": "bea26301-1aec-11ec-9441-73a37bbb7cd2"
},
"createdTime": 1632236465459,
"tenantId": {
"entityType": "TENANT",
"id": "ab937a40-3f98-11eb-a8d6-f5a87f07d4be"
},
"deviceId": {
"entityType": "DEVICE",
"id": "3e46db70-e480-11eb-9d0e-1f8899a6f9b3"
},
"expirationTime": 1632236525354,
"request": {
"id": "bea26301-1aec-11ec-9441-73a37bbb7cd2",
"tenantId": {
"entityType": "TENANT",
"id": "ab937a40-3f98-11eb-a8d6-f5a87f07d4be"
},
"deviceId": {
"entityType": "DEVICE",
"id": "3e46db70-e480-11eb-9d0e-1f8899a6f9b3"
},
"oneway": false,
"expirationTime": 1632236525354,
"body": {
"method": "rpcCommand",
"params": "{}"
},
"persisted": true,
"retries": null
},
"response": {
"test": "passed"
},
"status": "SUCCESSFUL",
"additionalInfo": "{\"param1\":\"value1\",\"param2\":\"value2\"}"
}
8、TT配置
在“Rpc TTL天数”配置字段中设置天数并应用更改