場(chǎng)景聯(lián)動(dòng)
場(chǎng)景聯(lián)動(dòng)可以通過(guò)可視化的方式定義設(shè)備之間聯(lián)動(dòng)的規(guī)則,配置界面如下:

配置說(shuō)明:
- 觸發(fā)條件:所有條件,任意條件,不滿足。所有條件需要所有觸發(fā)器都滿足才會(huì)去執(zhí)行動(dòng)作,任意條件滿足其中一個(gè)即可,不滿足只能包含一個(gè)觸發(fā)器。
- 觸發(fā)方式:設(shè)備觸發(fā),產(chǎn)品觸發(fā),定時(shí)觸發(fā)。設(shè)備觸發(fā)可以指定一個(gè)或多個(gè)設(shè)備觸發(fā),產(chǎn)品觸發(fā)時(shí)產(chǎn)品下面所有設(shè)備都會(huì)去匹配規(guī)則,定時(shí)觸發(fā)使用cron表達(dá)式定時(shí)執(zhí)行一次。
- 動(dòng)作方式:設(shè)備執(zhí)行,產(chǎn)品執(zhí)行,告警執(zhí)行。設(shè)備執(zhí)行可以指定一個(gè)或多個(gè)設(shè)備執(zhí)行,產(chǎn)品執(zhí)行時(shí)產(chǎn)品下面所有設(shè)備都會(huì)去執(zhí)行動(dòng)作,告警執(zhí)行時(shí)查詢?cè)搱?chǎng)景匹配的告警配置,執(zhí)行消息通知。
- 靜默時(shí)間:指定的時(shí)間范圍內(nèi)只會(huì)執(zhí)行一次動(dòng)作,單位分鐘。
- 執(zhí)行方式:串行,并行。串行時(shí)動(dòng)作按照順序依次執(zhí)行,并行時(shí)動(dòng)作一起執(zhí)行。
- 延時(shí)執(zhí)行:延時(shí)執(zhí)行動(dòng)作,時(shí)間限制為90秒,指定時(shí)間范圍內(nèi),如果服務(wù)端意外停止,重啟后不會(huì)再去執(zhí)行。
自定義觸發(fā)條件
常用判斷條件無(wú)法滿足觸發(fā)條件的判斷時(shí),可使用自定義觸發(fā)條件,通過(guò)代碼獲取觸發(fā)id的方式執(zhí)行觸發(fā)動(dòng)作。

配置說(shuō)明:
- 觸發(fā)ID:會(huì)做為觸發(fā)腳本的id值,用戶查詢?cè)撚|發(fā)條件
- 觸發(fā)參數(shù):會(huì)作為觸發(fā)腳本的value值,作為傳參和判斷條件,為json格式的字符串,如:
代碼使用:
以定時(shí)檢查設(shè)備上報(bào)日志為例,定時(shí)任務(wù)傳入觸發(fā)id和周期參數(shù)。

// DeviceJob.java中 checkDeviceReportData函數(shù)
//查詢制定cycle周期(分鐘)的設(shè)備上報(bào)日志
public void checkDeviceReportData(String TriggerId, Integer cycle) {
Calendar calendar = Calendar.getInstance();
Date now = new Date();
calendar.setTime(now);
calendar.add(Calendar.MINUTE, -cycle);
//查詢制定cycle周期(分鐘)的設(shè)備上報(bào)日志
deviceLogService.selectDeviceReportData(calendar.getTime(), now).forEach(item -> {
// 獲取無(wú)上報(bào)參數(shù)屬性列表
if (!item.getUnReportList().isEmpty()) {
item.getUnReportList().forEach(s -> {
//傳入入觸發(fā)id 設(shè)備序列號(hào) 和 無(wú)上報(bào)的屬性id,執(zhí)行告警
alertPush(TriggerId, item.getSerialNumber(), s);
});
}
});
// 省略部分代碼.....
// 獲取告警場(chǎng)景id
SceneScript triggerScript = new SceneScript();
SceneScript alertlog = new SceneScript();
// 設(shè)置篩選的觸發(fā)id
triggerScript.setId(TriggerId);
// 獲取腳本列表
List<SceneScript> list = sceneScriptService.selectSceneScriptList(triggerScript);
if (!list.isEmpty()) {
triggerScript = list.get(0);
alertlog.setId(identity);
alertlog.setValue("無(wú)數(shù)據(jù)上報(bào)");
// 獲取腳本對(duì)應(yīng)場(chǎng)景id
alertlog.setSceneId(triggerScript.getSceneId());
} else {
return;
}
// 自定義觸發(fā)動(dòng)作邏輯,或者獲取對(duì)應(yīng)場(chǎng)景動(dòng)作腳本 執(zhí)行對(duì)應(yīng)的動(dòng)作
// 執(zhí)行告警動(dòng)作
}
提示
- 新建的場(chǎng)景中包含告警執(zhí)行,告警配置中可以關(guān)聯(lián)該場(chǎng)景,滿足觸發(fā)條件后會(huì)發(fā)送告警短信/語(yǔ)音/郵件,微信/釘釘通知等,具體根據(jù)告警的配置
- 告警觸發(fā)時(shí)會(huì)生成告警日志,只有當(dāng)告警日志未處理條數(shù)小于等于一條時(shí)才會(huì)執(zhí)行消息通知,請(qǐng)及時(shí)處理告警日志;或者可通過(guò)配置告警恢復(fù)處理