2016-04-18 5 views
0

Ich möchte eine Regel schreiben, die ausgelöst wird, wenn die Herzfrequenz 5 Minuten lang über 160 liegt. Die Regel kam ich mit ist die folgende:Esper-Regelsprache: Feuerregel nur, wenn die Bedingung für einen bestimmten Zeitraum erfüllt ist

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()); 

Meine Herzfrequenz-Klasse hat die folgenden Felder:

int heartrate; 
String heartratesTimestamp; 
String macAddress; 

Das Problem ist, ich bin vor, dass diese Regel gibt es jedes Mal, feuert eine Herzfrequenz über 160. Stattdessen möchte ich es nur feuern, wenn die Herzfrequenz 5 Minuten lang über 160 bleibt. Wie kann ich diese Regel anpassen?

Antwort

2

EPL: jede (Herzfrequenz (Herzfrequenz> 160) -> (timer: Intervall (5 min) und nicht die Herzfrequenz (Herzfrequenz < = 160))

oder einfach mit und in der Java-Code: EPStatement cepStatementRule3 = cepRule3.createEPL("every(HeartRate(heartrate>160) -> (timer:interval(5 min) and not HeartRate(heartrate<=160))"); cepStatementRule3.addListener(new rule3Listener());

die EPL Muster Syntax in der Esper Dokumentation nachschlagen

+0

Könnten Sie dies vollständig schreiben, weil ich die Syntax dieser Regel nicht verstehen Dank – Tim

+0

Danke, ich habe jetzt die folgende Regel:.. '" wählen * aus Muster [alle (Herzfrequenz (Herzfrequenz> 160) -> (Timer: Intervall (5 min) a nd nicht HeartRate (Herzfrequenz <= 160)))] "aber wie kann ich die Gruppe per Macaddress wie in meiner vorherigen Regel aufnehmen? – Tim

+1

Sie können einen Kontext verwenden, der durch die MAC-Adresse partitioniert ist, wie folgt: create context PartitionByMac partitioniert von macaddress von HeartRate; context PartitionByMac select * aus dem Muster [every (HeartRate (Herzfrequenz> 160) -> (Timer: Intervall (5 min) und nicht HeartRate (Herzfrequenz <= 160))); – user3613754

Verwandte Themen