我想编写一条规则,在5分钟内心率超过160时触发。我想到的规则如下:
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分钟时才触发。如何调整此规则?
最佳答案
EPL:
每次(HeartBEat(心率> 160)->(计时器:间隔(5分钟)而不是HeartRate(心率或简单地使用and在Java代码中:EPStatement cepStatementRule3 = cepRule3.createEPL("every(HeartRate(heartrate>160) -> (timer:interval(5 min) and not HeartRate(heartrate<=160))"); cepStatementRule3.addListener(new rule3Listener());
在Esper文档中查找EPL模式语法。
关于java - 埃斯珀(Esper)规则语言:仅在条件满足一定时间后才触发规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36698488/