什么是规则引擎
规则引擎是一个处理引擎,对物联网设备数据进行加工处理,如数据清洗、补全、计算、统计等, 实现数据的流计算和批处理。
三三平台提供的规则引擎,可以让你通过可视化的方式,注入 JS 脚本到系统的数据处理流中,实现自定义的数据处理逻辑,除了可以利用 JS 的强大能力,让您用 JS 实现数据处理逻辑,三三还提供丰富的数据处理函数,供您在 JS 中调用。
处理器
处理器是规则引擎的最基本单元,在处理器中,您可以编写 JS 代码, 实现自定义的数据处理逻辑。
处理器触发方式分为设备数据触发、定时任务触发。
规则链
规则链是一组规则处理器的集合,规则链中的处理器按顺序执行。
规则链可以和设备关联,也可以和产品关联,而设备绑定的优先级更高。
规则引擎的作用
使用规则引擎,您可以快速的实现自定义的数据处理逻辑,而不用修改平台源代码,不需要编译、打包、部署。 方便您快速推出业务。
添加规则
进入 物联网
-> 规则引擎
-> 规则链
菜单,可以查看和配置的相关规则。点击添加
按钮,输入相关参数完成添加:
规则名称:用户自定义的规则名称
数据范围:产品或设备
关联对象:关联设备时,选择需要关联的设备,规则链将对该批设备的数据进行变形处理;关联产品时,则选择相关产品,规则链对产品下所有设备进行数据处理。设备
规则描述:输入规则描述后保存
处理器配置
- 添加处理器
进入 规则详情
,在 规则编排
区域,鼠标双击,可以添加一个规则处理器
点击一个规则处理器,右侧可修改处理器节点的处理逻辑,在右侧规则处理器区域修改节点名称、处理器具体函数逻辑,点击保存后完成规则处理节点的数据逻辑处理
继续双击,可以添加下一个规则处理器,添加多个规则处理器形成整体的规则链
- 删除处理器
在 规则编排
区域,点击或者框选,可以选中规则节点
按 DEL
键,可以删除对应的规则节点,删除节点后,该节点的处理逻辑自动失效
启动规则
在 规则链
页, 可启动 / 停止规则链。让规则链生效或失效。
函数说明
// 函数中的 sensor 是设备上报的数据,从 sensor 中可以获取设备上报的数据,比如 sensor.pressure, sensor 经过规则链的处理后,最终会入库或转发
// context 是元数据, context.sn 可以获取设备的 sn 号
function f(sensor, context) {
/*
按分钟统计 data = transform.statMinute(context, "M30");
按小时统计 data = transform.statHour(context, "M30");
按天统计 data = transform.statHour(context, "M30");
获取统计时间段内的开始值 sensor.M30_MINUTE_START = data.M30.start;
其它计算值的 key:max, min, average, diff, sum, start, end
查出多个量:transform.statMinute(context, "M30, M30_WORK_MINUTE");
*/
// 实例化计算对象
transform = new Transform();
// 统计上一分钟 M30 变量的计算值
data = transform.statMinute(context, "M30");
// 赋值到入库和展示的传感量中
sensor.testdata = data;
// 实例化设备对象
device = Device()
// 判断设备是否需要超时下线
device.logoutTimeExceed()
// 获取设备的实时数据
device.realTimeData()
return sensor
}
门禁人流统计例子
- 总人数处理器
该处理器的触发类型是 “设备数据触发”, 负责接收到门禁设备上报的人员进出消息,查询当前人流总数,并在总数上 +1, 然后入库
函数中的 sensor 是设备上报的数据, context 是元数据
/**
* example: sensor.z = sensor.x + sensor.y
*/
//人流总数
var device = new Device();
var realData = device.realTimeData(context);
//从实时数据中获取key
var statusObject = realData["data.accessControl.status"];
var oriCountObj = realData["count"];
//初始化count
sensor.count = 1;
if(oriCountObj && oriCountObj["value"]){
sensor.count = oriCountObj["value"];
}
//判断状态是否为success
if(statusObject && statusObject.value && statusObject.value == "success"){
sensor.count = 3;
if(oriCountObj && oriCountObj["value"]){
var num = parseInt(oriCountObj["value"]+"");
sensor.count = num + 1;
}
}
- 每天人流量统计处理器
该处理器的触发类型 “定时触发”,每天24点查询设备历史数据,统计当天的人流量,如下图:
var transform = new Transform();
var data = transform.statDay(context, "count");
if(data.count && data.count.diff){
sensor.dayCount = data.count.diff;
}
- 最终效果
经过该规则链处理后,门禁设备的 “传感量” 中多了 count 和 dayCount 两个量,分别是人员进出总数,和前一天的人员进出总数,如下图:
由于门禁设备配置了可视化模板,因此点击门禁设备可查看到人流量曲线,如下图: