教程:设置根据设备状态触发的告警


在某些情况下,EnOS 需要在设备处于某种状态时发出告警。


例如,在使用 EnOS 告警服务监控某个智能楼宇的空调设备时,设置告警的触发规则为:当该空调设备离线时,触发“空调离线”告警。当设备再次上线时,该告警解除。


EnOS 目前支持以下基于以下状态的设备告警:

  • 离线

根据设备状态触发的告警与告警屏蔽、告警延时

  • 你可以对根据设备状态触发的告警设置告警屏蔽:

    • 当该状态告警触发时,告警相关设备在资产树上的子节点的设备的告警都会被屏蔽;

    • 当你对状态告警相关设备的上级节点的设备设置了告警屏蔽且上级节点告警触发时,该设备的状态告警触发后会被屏蔽。

  • 你可以对根据设备状态触发的告警设置告警延时。例如,你可以设置告警规则:基于某个模型的设备,离线5分钟仍未上线,方触发“设备离线”告警。

任务描述

本文以一个智能楼宇场景,介绍如何设置根据设备状态触发的告警。本教程使用了教程:为同一模型的设备设置不同阈值的告警中模拟的测量电冰箱实时电流的电流表来设置根据设备状态触发的告警。

开始前准备

步骤

  1. 选择 告警规则,创建如下的新告警规则。创建告警规则的操作,参见 创建告警规则


    ../_images/state_based_alert_adv_rule.png


    此时告警被设定为当电流表设备离线时,告警立即触发。

  2. 复制教程:为同一模型的设备设置不同阈值的告警的示例代码 fridgeMQTT 到你的IDE中

  3. 运行 fridgeMQTT 。此时在 设备管理 > 设备资产 中,可以观察到 冰箱电表 设备已上线。

  4. 此时,停止运行 fridgeMQTT 代码块。

结果

进入 告警服务 > 告警记录,你就能看到已触发的状态告警,如下图所示:


../_images/state_based_alert_result_realtime.png


如果此时你再次运行 fridgeMQTT 代码块,该告警就会解除,状态 将改成 历史


../_images/state_based_alert_result_history.png

对API的影响

以下 API 的请求参数 (Body) 中,增加了一个可选参数 deviceStatus,可用值为 offline

  • Create Alert Rule

  • Update Alert Rule

  • Search Active Alerts

  • Search History Alerts

  • Search Alert Rule

用以实现以下目的:

  • 创建或更新告警规则,使告警根据状态触发

  • 返回基于设备状态触发的当前告警记录或历史告警记录

Java SDK调用示例

使用 Search Active Alerts API 来搜索一个基于设备状态的当前告警:

import com.envision.apim.poseidon.config.PConfig;
import com.envision.apim.poseidon.core.Poseidon;

public class searchActiveAlert {
    public static void main(String[] args) {

        String accessKey = "f056e1ba-5d3b-49af-8cbf-08f2fad75218";
        String secretKey = "5f0ff5d9-d38d-4381-ae2c-5d68c8066ffd";
        String data = "{\n" +
                "\t\"deviceStatus\":\"offline\",\n" +
                "}";

        String response = Poseidon.config(PConfig.init().appKey(accessKey).appSecret(secretKey))
                .url("https://beta-apim-cn4.eniot.io/event-service/v2.1/active-alerts?action=search&orgId=o15434988531231")
                .method("POST")
                .requestBody(data)
                .sync();
        System.out.println(response);
    }
}

返回的示例:

{
   "code":0,
   "msg":"OK",
   "requestId":"9d99634e-b2b5-4f45-9071-d691dd71073d",
   "data":[
      {
         "eventId":"201912020a1487e26e2d84601d24f1c5783634d8",
         "orgId":"o15434988531231",
         "assetId":"I7Vp9nRm",
         "modelId":"current_meter",
         "modelIdPath":"/current_meter",
         "measurepointId":null,
         "deviceStatus":"offline",
         "hitRuleId":"CurrentMeterAlertState",
         "value":"1",
         "occurTime":1575277201254,
         "localOccurTime":"2019-12-02 17:00:01",
         "createTime":1575277201388,
         "updateTime":1575277201388,
         "severityId":"MeterAlert001",
         "severityDesc":{
            "defaultValue":"Warning: Current Over Threshold",
            "i18nValue":{
               "en_US":"",
               "zh_CN":""
            }
         },
         "typeId":"alertType003",
         "typeDesc":{
            "defaultValue":"This is a serious warning",
            "i18nValue":{

            }
         },
         "subTypeId":null,
         "subTypeDesc":null,
         "contentId":"MeterAlert003",
         "contentDesc":{
            "defaultValue":"设备已离线",
            "i18nValue":{
               "en_US":"Device offline",
               "zh_CN":"设备已离线"
            }
         },
         "eventType":1,
         "tag":{

         },
         "ruleDesc":null,
         "assetPath":null,
         "maskedBy":null
      }
   ]
}