ThingsBoard 实现定时任务或调度器
正文与配图来自原稿。适用于 ThingsBoard CE(社区版无 PE 调度器时的巧用方案)。
1、概述
ThingsBoard CE 版是不支持调度器(Scheduler)的,只有 PE 版才支持。但系统中很多时候需要用调度器实现功能,例如:定时给设备下发 RPC 查询数据。那我们如何来实现呢?下面用一种巧妙的方法来实现。
2、使用什么实现
我们可以使用规则链提供的一个节点来实现,这个节点可以配置定时时间。
节点是:generator。官方解释是这个节点用来做测试发送数据的。

3、节点配置参数讲解
下面讲解这个 generator 节点里面的配置含义,告诉大家该如何配置。
如图所示:

| 配置项 | 含义 |
|---|---|
| 名称 | 给当前定时器 generator 起一个你喜欢的名字 |
| Message count(0-unlimited) | 需要生成并发送几次消息。0:无限制(一直按周期发);1:只发送一次 |
| Period in seconds | 发送数据的间隔时间,单位是秒,即间隔多久发送一次 |
| Originator | 发起者,指定谁来触发这个操作。可选:设备、资产、实体视图、租户、客户、用户、仪表板、边缘等。例如选择资产,就需要再指定具体哪一个资产 |
注意: 我一般都是选择 Java Script 来写 JS 代码,目前还没有看 TBEL 表达式。
下面就是定义你需要发送的消息内容,案例中使用默认即可。
4、案例实操
4.1、需求分析
现在有一个 A 小区,A 小区有一个楼栋 A-1,楼栋 A-1 下面有一个设备叫做 earTagA。总结:两个资产(A 小区、楼栋 A-1),一个设备 earTagA。现在需要定时给 earTagA 设备下发查询 RPC。
注意:只能针对单个设备。

A 小区与楼栋 A-1 绑定关系:

楼栋 A-1 与 earTagA 绑定关系:

4.2、规则链实现
4.2.1、整体流程

流程概要:
generator
→ originator fields
→ change originator
→ originator fields(校验)
→ script(组 RPC)
→ rpc call request4.2.2、每个节点实现
generator

originator fields
查询当前发起者的 name 和 type,查询出来的结果会放在 metadata 元数据里面。


change originator
这个节点很重要,意思是切换发起者。作用是:使用配置的关系方向和关系类型找到相关实体。如果找到多个相关实体,则只有第一个实体用作新的发起者,其他实体将被丢弃。报警发起人仅在原始发起人是报警实体的情况下找到。
注意(红色部分很重要): 如果通过关系查找找到多个实体,只会使用第一个,其它会丢弃,也就是只能针对那一个实体来切换发起者身份。
如果你想通过关系查询很多设备,并给查到的设备全部发起 RPC,这就不行——因为没办法批量切换。需要自定义类似 PE 版的 Duplicate To Related 节点(原稿说明可加联系扣群 594880091)。

originator fields(再次)
再次查询当前发起者的 name 和 type,结果仍放进 metadata。当前这一步是验证是否已通过上面的 change originator 把发起者切换为 earTagA 设备——因为要发 RPC,发起者需要是设备。
script
指定的 RPC 参数案例:
{
"method": "指令",
"params": {
"pin": 4,
"value": 1
},
"timeout": 30000
}rpc call request
进行下发 RPC。
补充(辅)
- CE:用 Generator「伪调度」;PE:可用官方 Scheduler,能力更完整。
Message count = 0才会按Period in seconds持续触发;调试时可先设1只跑一次。- Originator 建议落在关系链上游资产(如小区/楼栋),再经 change originator 切到目标设备。
- 一对多定时 RPC 需要「复制到关联实体」类能力,CE 内置 change originator 不够用。
- 设备需在线且 RPC 主题/方法与固件约定一致,可用 MQTTX 等对照验收。
