2016-04-18 11 views
0

Я хочу написать правило, которое срабатывает, когда частота сердечных сокращений выше 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 минут. Как я могу настроить это правило?

ответ

2

EPL: каждый (HeartRate (HeartRate> 160) -> (таймер: интервал (5 мин), а не HeartRate (HeartRate < = 160))

или просто с, а в Java коде: EPStatement cepStatementRule3 = cepRule3.createEPL("every(HeartRate(heartrate>160) -> (timer:interval(5 min) and not HeartRate(heartrate<=160))"); cepStatementRule3.addListener(new rule3Listener());

Посмотрите на EPL синтаксис шаблона в документации Esper

+0

не могли бы вы написать это в полной мере, потому что я не понимаю, синтаксис этого правила Благодаря – Tim

+0

Спасибо, я сейчас следующее правило:.. ' "выберите * из узор [каждый (HeartRate (сердечный ритм> 160) -> (таймер: интервал (5 мин) a nd not HeartRate (heartrate <= 160)))] "' но как я могу включить группу по macaddress, как в моем предыдущем правиле? – Tim

+1

Вы можете использовать контекст, секционированный по MAC-адресу, например: создать контекст PartitionByMac, выделенный из macaddress из HeartRate; контекст PartitionByMac выберите * из рисунка [каждый (HeartRate (сердечный ритм> 160) -> (таймер: интервал (5 мин), а не HeartRate (сердечный <= 160))); – user3613754