ThingsBoard-Rpc控制设备

参考文档RPC功能 | ThingsBoard社区版通过ThingsBoardr提供的RPC功能对IoT设备进行IoT远程控制icon-default.png?t=O83Ahttp://www.ithingsboard.com/docs/user-guide/rpc/

ThingsBoard-设备上报实时遥测-优快云博客文章浏览阅读93次。ThingsBoard-设备上报实时遥测https://blog.youkuaiyun.com/liu971134228/article/details/145065699

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
ThingsBoard7RPC的持久化状态:

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天数”配置字段中设置天数并应用更改

<think>嗯,用户正在询问ThingsBoard中如何使用RPC进行设备通信和控制,希望得到配置指南和具体示例。从用户提供的站内引用来看,ta应该是个物联网开发者或系统集成人员,正在研究ThingsBoard设备控制方案。用户明确要求了"使用指南+示例+配置",说明需要实操性强的指导。注意到用户引用的材料已经区分了两种RPC模式(客户端RPC和服务器端RPC),还提到具体的小部件和函数格式。不过第四篇引用讨论的是源码架构,可能不是用户当前需要的重点。用户上次的问题也与RPC相关,看来是在系统学习这个功能。需要把零散的引用内容组织成逻辑清晰的操作流程。首先应该明确RPC类型差异(这会影响实施方式),然后具体到:1)操作入口(界面路径)2)参数设置关键字段3)设备端配套实现4)调试要点。引用3中的PLC寄存器格式和函数码特别重要,这是工业场景的实际配置范例。用户没提设备具体协议,但引用3暴露了ModbusTCP需求(通过functionCode字段),所以PLC控制示例要保留。开关和旋钮小部件是最常用控件,必须包含。另外引用4提到WebSocket和集群部署,虽然用户没直接问,但在高并发场景下可能影响RPC实施,需要补充在注意事项里。代码示例方面,引用1的JavaScript片段和设备回调模板很实用,用户能直接复制使用。但要注意标注清楚服务端RPC设备RPC的参数差异——引用2特别强调过这点。最后考虑给个建议:当用户完成基础操作后,可以尝试自定义小部件或kafka集群配置(引用1和4的内容),为后续问题埋个伏笔。</think> 以下是ThingsBoardRPC功能的完整使用指南,包含配置步骤、代码示例和实践场景: --- ### **一、RPC通信类型** 根据引用[2]的分类: 1. **客户端RPC**(设备主动请求) - 设备向平台发起指令请求(如获取配置) - 实现方式:设备订阅 `v1/devices/me/rpc/request/+` 主题 2. **服务器端RPC**(平台主动控制设备- 平台向设备发送控制命令(如开关指令) - 实现方式:通过仪表板控件或API调用 --- ### **二、服务器端RPC操作指南** #### **场景:通过仪表板控制设备开关** 1. **创建RPC控件**(引用[1]) - 进入仪表板 → 添加部件 → 选择「开关控制- 关键配置: ```yaml 目标设备: {设备名称} RPC方法: setSwitchState # 自定义方法名 参数格式: {"enabled": <true/false>} # 设备端定义的参数 ``` - 效果:用户点击开关时发送`{ "method": "setSwitchState", "params": { "enabled": true } }` 2. **设备端实现**(引用[3]以Modbus设备为例) ```python # 订阅RPC请求主题 client.subscribe("v1/devices/me/rpc/request/+") def on_message(msg): if msg.topic == "setSwitchState": # 解析PLC寄存器操作指令 register = msg.json["params"]["address"] value = 1 if msg.json["params"]["enabled"] else 0 # 调用Modbus写入函数(引用[3]格式) modbus_write(register, value, function_code=6) ``` --- ### **三、客户端RPC操作指南** #### **场景:设备主动获取配置** 1. **设备端发起请求** ```python # 发布请求到平台 request_id = 1 client.publish("v1/devices/me/rpc/request/"+str(request_id), '{"method":"getConfig"}') ``` 2. **平台处理逻辑** - 在规则链中配置「RPC Call Reply」节点 - 脚本生成响应数据: ```javascript return { data: {"interval": 60, "threshold": 25.5} //返回设备配置 }; ``` 3. **设备接收响应** 监听`v1/devices/me/rpc/response/+`主题解析数据 --- ### **四、API直接调用RPC(引用[4])** ```bash curl -X POST http://{tb-core}:9090/api/rpc/{deviceId} \ -H 'Content-Type: application/json' \ -d '{ "method": "adjustTemperature", "params": {"target": 22} }' #通过核心服务调用(需设备权限) ``` --- ### **五、调试与注意事项** 1. **权限验证** - 确保设备已添加「RPC」权限策略(参考访问令牌配置) 2. **参数格式** - PLC设备需遵循引用[3]的寄存器格式: `{"method":"write", "params": {"functionCode":16, "address":40001, "value":255}}` 3. **高可用部署** - 集群环境下引用[4]说明:通过Kafka分发RPC请求,确保目标设备所在节点处理消息 --- ### **示例仪表板效果** ```mermaid graph LR 用户点击开关 --> 平台发送RPC请求 --> 设备修改寄存器值 --> 更新状态回显到仪表板 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值