ThingsBoard允许您从服务器端应用程序向设备发送远程过程调用(RPC),反之亦然。基本上,此功能使您可以将命令发送到设备并接收命令执行的结果。同样,您可以执行来自设备的请求,在后端应用一些计算或其他服务器端逻辑,然后将响应发送回设备。本指南涵盖ThingsBoard RPC功能。阅读本指南后,您将熟悉以下主题:
- RPC类型;
- 基本的RPC用例;
- RPC客户端和服务器端API;
-
RPC调用类型
Thinsboard RPC功能可以基于发起者分为两种类型:设备发起的RPC和服务器发起的RPC。为了使用更熟悉的名称,我们将源于设备的RPC调用命名为client-side RPC,并将源于服务器的RPC命名为server-side RPC。
服务器端RPC可以分为单向和双向: 单向RPC请求没有发送确认就发送到设备,并且显然不提供设备的任何响应。仅当在可配置的超时时间内没有与目标设备的活动连接时,RPC才可能失败。
- 双向RPC请求被发送到设备,并期望在一定的超时时间内接收到来自设备的响应。服务器端请求将被阻止,直到目标设备回复该请求为止。
设备RPC API
ThingsBoard提供了一种便捷的API,可以从设备上运行的应用程序发送和接收RPC命令。该API特定于每种受支持的网络协议。您可以在相应的参考页面上查看API和示例:
- MQTT RPC API参考
- CoAP RPC API参考
-
服务器端RPC API
ThingsBoard系统提供了RPC服务可以将RPC调用从服务端应用程序发送到设备。
如果需要发送RPC请求需要使用下面URL执行HTTP POST请求http(s)://host:port/api/plugins/rpc/{callType}/{deviceId}
url说明:
callType 表示 oneway或者twoway
- deviceId 表示设备ID
必填参数:
- method - 表示json字符串格式的方法名
- params - 表示json字符串格式的对象参数列表
例如:
set-gpio-request.sh 请求脚本
curl -v -X POST -d @set-gpio-request.json http://localhost:8080/api/plugins/rpc/twoway/$DEVICE_ID \
--header "Content-Type:application/json" \
--header "X-Authorization: $JWT_TOKEN"
set-gpio-request.json响应
{
"method": "setGpio",
"params": {
"pin": "23",
"value": 1
}
}
注意 执行此请求需要使用有效的JWT令牌替换$JWT_TOKEN 该令牌应属于
拥有TENANT_ADMIN角色的用户
- 拥有CUSTOMER_USER角色的用户,该用户拥有$DEVICE_ID标识的设备
你可以按照以下指南获取令牌.
RPC规则节点
可以将RPC动作集成到处理工作流程中。有2个用于处理RPC请求的规则节点。