ThingsBoard MQTT链接、掉线报警、数据转换规则引擎

MQTT 客户端接入

之前都是采用HTTP RESTFUL API方式去接入ThingsBoard。ThingsBoard能够兼容多种协议,今天就来尝试下使用MQTT 客户端接入ThingsBoard。客户端采用MQTTX工具。

hello world

  • 新增设备 复制ACCESS_TOKEN,输入到MQTTX客户端的username

在这里插入图片描述

  • 如上图,输入 v1/devices/me/telemetry 点击发送

在这里插入图片描述

ThingsBoard 服务器已经接收到MQTT客户端发送的数据。

设备配置设置

根规则链

默认情况下,根规则处理所有入站消息跟入站事件信息。当系统接入设备越来越多时,根规则链也就越来越复杂。因此平台用户可以根据设备类型创建特殊的规则链,处理各种信息,用来降低根规则链的复杂性。

为了避免上述业务痛点,从ThingsBoard3.2,针对特殊设备,你可以自定义根规则链。新的根规则链接收、处理所有的传感数据,如设备活跃状态、设备生命周期管理(创建、更新、删除)事件。

在这里插入图片描述

队列名称

默认情况下,Main队列用于存储所有入站消息、入站事件。传输层提交信息至该队列,规则引擎拉取消息进行事件处理。然后复杂场景下,为了隔离数据处理,你可能需要单独的消息队列进行数据存储。或者针对不同类型的设备使用不同的消息队列。

img

传输配置

ThingsBoard3.2开始,系统支持两种传输类型: 默认 、MQTT

默认传输类型

默认传输类型旨在兼容早起版本,使用默认传输类型,可以继续使用平台默认的MQTT、HTTP、Coap和LwM2M API来链接设备。默认传输类型没有特定的配置设置

MQTT传输类型

MQTT传输类型启用高级MQTTT传送设置。不同于默认的传输类型,它可以自定义MQTT协议topic 过滤、属性更新等特性。创建一个MQTT传输类型的设备配置文件,如下图:

  • 设置MQTT传输类型

    在这里插入图片描述

    指定topic名称 需要注意的是 这里有两个TOPIC; 应用分别如下

    • 遥测数据TOPIC筛选器 - 对应设备检测实时数据的topic
    • Attributes topic filter - 设备属性(如版本号)上报的topic

    两种topic都支持模糊匹配,+号表示匹配一级,#匹配多级

MQTT配置案例

发送检测数据

截图参考下面 规则转换引擎 -> 数据展示部分

发送属性数据

在这里插入图片描述

特别注意 要想设备规则生效,需要注意以下两点(本人采坑折腾了个把小时)

  • 设置MQTT设备配置为默认配置

    在这里插入图片描述

  • 新增的设备关联MQTT设备配置

在这里插入图片描述

规则转换引擎

业务场景

假设设备正在采集并上报温度数据(华氏度),但是ThingsBoard平台需要展示摄氏度,因此底层需要将他们进行转换,此时规则引擎派上用场,数据转换的公式如下:

[°C] = ([°F] - 32) × 5/9.

增加转换规则节点

点击 ”规则链库“ -> 选中根节点 -> 打开规则链,如下图

在这里插入图片描述

转换脚本如下

function precisionRound(number, precision) {
  var factor = Math.pow(10, precision);
  return Math.round(number * factor) / factor;
}

if (typeof msg.temperature !== 'undefined'){
    msg.temperature = precisionRound((msg.temperature -32) * 5 / 9, 2);
}

return {msg: msg, metadata: metadata, msgType: msgType};

验证规则

点击上图 “Test transformer function” 验证脚本是否正常

在这里插入图片描述

转换规则节点在规则链中的位置如下

在这里插入图片描述

数据展示

在这里插入图片描述

如上图,可以在设备最新的数据检查中观察到温度数据已经进行转换。

设备状态监控

物联网开发中,常用的业务是监控设备的状态,出现异常(如掉线)情况则触发报警通知,进行人工干预进行处理。ThingsBoard设备状态检测服务监控设备连接状态,并把连接事件推送给规则引擎。ThingsBoard支持一下四种事件类型:

Event TypeDescription
Connect设备连接到ThingsBoard时触发
Disconnect设备断开链接时触发
Activity设备发送数据、属性更新、接口调用时触发
Inactivity当设备在一定时间段内不活动时触发

下面详细地讲解一下Inactivity事件是如何操作

  • 如何通过规则引擎创建Inactivity报警
  • 配置Inactivity事件超时参数

新增设备

新增设备 ,并设置Inactivity事件超时参数

  • 新增设备 设备名称: Inactivity-timeout-device

  • 选中设备 选择属性 -> 服务端属性

    在这里插入图片描述

  • 设置inactivityTimeout属性 6000毫秒,即一分钟

    在这里插入图片描述

配置根规则链

创建新的根规则链

在这里插入图片描述

打开规则链,如下图 光秃秃的啥都没有,后面一个个规则节点添加

在这里插入图片描述

添加 Message Type Switch node

这个规则节点将会根据消息类型路由入站信息,比如

  • POST_TELEMETRY_REQUEST;
  • POST_ATTRIBUTES_REQUEST;
  • ACTIVITY_EVENT;
  • INACTIVITY_EVENT.

在这里插入图片描述

新增 Save Timeseries 节点

将节点关联到Message Type Switch节点,关联类型为 Post telemetry。该节点会保存设备发送的消息至数据中

在这里插入图片描述

新增 Server Attributes 节点

节点关联 Message Type Switch 节点,关联类型为Post attributes,该节点会存储设备上报的相关属性信息。

在这里插入图片描述

新增 Create Inactivity alarm 节点

节点关联 Message Type Switch 节点,关联类型为Inactivity Event.该节点将根据报警配置产生报警信息。如果存在未清除的报警,则更新报警,否则将创建新的报警。

在这里插入图片描述

新增 Clear Inactivity alarm 节点

节点关联 Message Type Switch 节点,关联类型为Activity Event.该节点会存储设备上报的相关属性信息。该节点将根据报警配置清除报警信息(如果存在)。根规则链最终效果图如下

在这里插入图片描述

在这里插入图片描述

设置为默认节点

在这里插入图片描述

设备配置关联规则链

在这里插入图片描述

测试验证

curl -v -X POST -d '{"temperature":8}' http://192.168.0.5:8080/api/v1/kkBoG2tWqExmbp9LwXuo/telemetry --header "Content-Type:application/json"

在这里插入图片描述

说明,如上图设备最后一次活动时间是 22:15:12 秒,理论上一分钟之后设备变成 Inactivity 状态,什么为什么把报警时间 是 22:16:40,比预期的时间晚了28秒。

回答这个问题,我们需要了解 ThingsBoard 内部检测原理,即ThingsBoard是通过什么样的机制检测设备状态,摘录自官网的一段话:

Device State service uses a global configuration parameter to detect inactivity events. This parameter is defined in thingsboard.yml (state.defaultStateCheckIntervalInSec) and by default it is set to 60 seconds (1 minute).

使用全局的配置检测inactivity 事件,可以修改thingsboard.yml文件中的state.defaultStateCheckIntervalInSec参数,默认60秒。

我试过好几次,添加多个设备观察到本机的inactivity报警时间基本维持在40-41秒这两个值的区间。个人感觉跟ThingsBoard服务的启动时间有关系。为了达到1分钟之后报警,可以尝试去修改下默认参数,测试下。我就不折腾了

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值