Skip to content

ThingsBoard 实现定时任务或调度器 ​

正文与配图来自原稿。适用于 ThingsBoard CE(社区版无 PE 调度器时的巧用方案)。

1、概述 ​

ThingsBoard CE 版是不支持调度器(Scheduler)的,只有 PE 版才支持。但系统中很多时候需要用调度器实现功能,例如:定时给设备下发 RPC 查询数据。那我们如何来实现呢?下面用一种巧妙的方法来实现。

2、使用什么实现 ​

我们可以使用规则链提供的一个节点来实现,这个节点可以配置定时时间。

节点是:generator。官方解释是这个节点用来做测试发送数据的。

规则链中的 generator 节点

3、节点配置参数讲解 ​

下面讲解这个 generator 节点里面的配置含义,告诉大家该如何配置。

如图所示:

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 小区 ↔ 楼栋 A-1

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

楼栋 A-1 ↔ earTagA

4.2、规则链实现 ​

4.2.1、整体流程 ​

规则链整体流程

流程概要:

text
generator
  → originator fields
  → change originator
  → originator fields(校验)
  → script(组 RPC)
  → rpc call request

4.2.2、每个节点实现 ​

generator

配置 generator 定时

originator fields

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

originator fields 配置

metadata 中的 name / type

change originator

这个节点很重要,意思是切换发起者。作用是:使用配置的关系方向和关系类型找到相关实体。如果找到多个相关实体,则只有第一个实体用作新的发起者,其他实体将被丢弃。报警发起人仅在原始发起人是报警实体的情况下找到。

注意(红色部分很重要): 如果通过关系查找找到多个实体,只会使用第一个,其它会丢弃,也就是只能针对那一个实体来切换发起者身份。

如果你想通过关系查询很多设备,并给查到的设备全部发起 RPC,这就不行——因为没办法批量切换。需要自定义类似 PE 版的 Duplicate To Related 节点(原稿说明可加联系扣群 594880091)。

change originator 按关系切换到设备

originator fields(再次)

再次查询当前发起者的 name 和 type,结果仍放进 metadata。当前这一步是验证是否已通过上面的 change originator 把发起者切换为 earTagA 设备——因为要发 RPC,发起者需要是设备。

script

指定的 RPC 参数案例:

json
{
  "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 等对照验收。

相关文章 ​