场景联动
大约 3 分钟
场景联动
场景联动可以通过可视化的方式定义设备之间联动的规则,配置界面如下:
配置说明:
- 触发条件:所有条件,任意条件,不满足。所有条件需要所有触发器都满足才会去执行动作,任意条件满足其中一个即可,不满足只能包含一个触发器。
- 触发方式:设备触发,产品触发,定时触发。设备触发可以指定一个或多个设备触发,产品触发时产品下面所有设备都会去匹配规则,定时触发使用cron表达式定时执行一次。
- 动作方式:设备执行,产品执行,告警执行。设备执行可以指定一个或多个设备执行,产品执行时产品下面所有设备都会去执行动作,告警执行时查询该场景匹配的告警配置,执行消息通知。
- 静默时间:指定的时间范围内只会执行一次动作,单位分钟。
- 执行方式:串行,并行。串行时动作按照顺序依次执行,并行时动作一起执行。
- 延时执行:延时执行动作,时间限制为90秒,指定时间范围内,如果服务端意外停止,重启后不会再去执行。
自定义触发条件
常用判断条件无法满足触发条件的判断时,可使用自定义触发条件,通过代码获取触发id的方式执行触发动作。
配置说明:
- 触发ID:会做为触发脚本的id值,用户查询该触发条件
- 触发参数:会作为触发脚本的value值,作为传参和判断条件,为json格式的字符串,如:
代码使用:
以定时检查设备上报日志为例,定时任务传入触发id和周期参数。
// DeviceJob.java中 checkDeviceReportData函数
//查询制定cycle周期(分钟)的设备上报日志
public void checkDeviceReportData(String TriggerId, Integer cycle) {
Calendar calendar = Calendar.getInstance();
Date now = new Date();
calendar.setTime(now);
calendar.add(Calendar.MINUTE, -cycle);
//查询制定cycle周期(分钟)的设备上报日志
deviceLogService.selectDeviceReportData(calendar.getTime(), now).forEach(item -> {
// 获取无上报参数属性列表
if (!item.getUnReportList().isEmpty()) {
item.getUnReportList().forEach(s -> {
//传入入触发id 设备序列号 和 无上报的属性id,执行告警
alertPush(TriggerId, item.getSerialNumber(), s);
});
}
});
// 省略部分代码.....
// 获取告警场景id
SceneScript triggerScript = new SceneScript();
SceneScript alertlog = new SceneScript();
// 设置筛选的触发id
triggerScript.setId(TriggerId);
// 获取脚本列表
List<SceneScript> list = sceneScriptService.selectSceneScriptList(triggerScript);
if (!list.isEmpty()) {
triggerScript = list.get(0);
alertlog.setId(identity);
alertlog.setValue("无数据上报");
// 获取脚本对应场景id
alertlog.setSceneId(triggerScript.getSceneId());
} else {
return;
}
// 自定义触发动作逻辑,或者获取对应场景动作脚本 执行对应的动作
// 执行告警动作
}
提示
- 新建的场景中包含告警执行,告警配置中可以关联该场景,满足触发条件后会发送告警短信/语音/邮件,微信/钉钉通知等,具体根据告警的配置
- 告警触发时会生成告警日志,只有当告警日志未处理条数小于等于一条时才会执行消息通知,请及时处理告警日志;或者可通过配置告警恢复处理