Esper规则语言:仅在条件满足一段时间后才开火规则

时间:2016-04-18 15:36:33

标签: java rule-engine complex-event-processing esper

我想编写一个规则,当心率超过160时持续5分钟。我提出的规则如下:

 EPAdministrator cepRule3 = cep.getEPAdministrator();
        EPStatement cepStatementRule3 = cepRule3.createEPL("select * from "
                + "HeartRate.win:time(5 min) "
                + "group by macAddress "
                + "having min(heartrate) > 160");
        cepStatementRule3.addListener(new rule3Listener());

我的HeartRate类包含以下字段:

int heartrate;
String heartratesTimestamp;
String macAddress;

我面临的问题是,每当心率超过160时,此规则就会触发。相反,我希望它仅在心率保持在160以上持续5分钟时才会开火。我该如何调整此规则?

1 个答案:

答案 0 :(得分:2)

EPL: 每一个(HeartRate(心率> 160) - &gt;(计时器:间隔(5分钟)而非HeartRate(心率<= 160))

或简单地使用Java代码:  EPStatement cepStatementRule3 = cepRule3.createEPL("every(HeartRate(heartrate>160) -> (timer:interval(5 min) and not HeartRate(heartrate<=160))"); cepStatementRule3.addListener(new rule3Listener());

在Esper文档中查找EPL模式语法。