我想编写一条当心率高于 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 分钟时触发。我该如何调整这个规则?
最佳答案
英超: every(HeartRate(心率>160) -> (计时器:间隔(5 分钟) 而不是 HeartRate(心率<=160))
或者简单地在 Java 代码中使用 and :
EPStatement cepStatementRule3 = cepRule3.createEPL("every(HeartRate(heartrate>160) -> (timer:interval(5 min) and not HeartRate(heartrate<=160))");
cepStatementRule3.addListener(new rule3Listener());
在 Esper 文档中查找 EPL 模式语法。
关于java - 超能力规则语言: fire rule only after condition is fulfilled for a certain time period,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698488/