跳至主要內容

场景联动

fastbee2024年9月27日大约 3 分钟

场景联动

场景联动可以通过可视化的方式定义设备之间联动的规则,配置界面如下:

配置说明:

  1. 触发条件:所有条件,任意条件,不满足。所有条件需要所有触发器都满足才会去执行动作,任意条件满足其中一个即可,不满足只能包含一个触发器。
  2. 触发方式:设备触发,产品触发,定时触发。设备触发可以指定一个或多个设备触发,产品触发时产品下面所有设备都会去匹配规则,定时触发使用cron表达式定时执行一次。
  3. 动作方式:设备执行,产品执行,告警执行。设备执行可以指定一个或多个设备执行,产品执行时产品下面所有设备都会去执行动作,告警执行时查询该场景匹配的告警配置,执行消息通知。
  4. 静默时间:指定的时间范围内只会执行一次动作,单位分钟。
  5. 执行方式:串行,并行。串行时动作按照顺序依次执行,并行时动作一起执行。
  6. 延时执行:延时执行动作,时间限制为90秒,指定时间范围内,如果服务端意外停止,重启后不会再去执行。

自定义触发条件

常用判断条件无法满足触发条件的判断时,可使用自定义触发条件,通过代码获取触发id的方式执行触发动作。

img.png
img.png

配置说明:

  1. 触发ID:会做为触发脚本的id值,用户查询该触发条件
  2. 触发参数:会作为触发脚本的value值,作为传参和判断条件,为json格式的字符串,如:

代码使用:

以定时检查设备上报日志为例,定时任务传入触发id和周期参数。

img.png
img.png
// 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;
    }
    // 自定义触发动作逻辑,或者获取对应场景动作脚本 执行对应的动作
    // 执行告警动作
}

提示

  • 新建的场景中包含告警执行,告警配置中可以关联该场景,满足触发条件后会发送告警短信/语音/邮件,微信/钉钉通知等,具体根据告警的配置
  • 告警触发时会生成告警日志,只有当告警日志未处理条数小于等于一条时才会执行消息通知,请及时处理告警日志;或者可通过配置告警恢复处理