Ich möchte eine Regel in Esper schreiben, die ausgelöst wird, wenn die Anzahl der Schritte in den letzten 15 Minuten 0 ist und die Herzfrequenz über 120 liegt. Ich habe folgende Regel aufgestellt:Esper Regelsprache: Timer für Regel verwenden
EPStatement cepStatementRule8 = cepRule.createEPL("context PartitionByMacSteps select * from "
+ "Steps.win:time(15 min) S, HeartRate.win:time(1 min) H "
+ "having (max(S.steps)-min(S.steps) = 0) and (H.heartrate > 120)");
cepStatementRule8.addListener(new rule8Listener());
Meine Herzfrequenz-Klasse hat die folgenden Felder:
int heartrate;
String heartratesTimestamp;
String macAddress;
Und meine Schritte Klasse hat diese Felder:
int steps;
String stepsTimestamp;
String macAddress;
Das Problem, dem ich gegenüberstehe, ist, dass ich die Regel nur dann aktivieren möchte, wenn in den letzten 15 Minuten keine Schritte unternommen werden. Jetzt wird es ausgelöst, wenn zwei Schritt-Ereignisse die gleiche Anzahl von Schritten haben. Ich weiß, dass ich wahrscheinlich timer.interval verwenden muss, aber ich konnte nicht herausfinden, wie man diese Regel schreibt. Kann mir jemand helfen?
Was ich will ist, wenn in den letzten 15 Minuten keine Schritte unternommen werden und nach diesen 15 Minuten die Herzfrequenz höher als 120 ist, wird die Regel ausgelöst. – Tim
Also, wenn ich richtig verstanden habe, muss die Schrittbedingung zuerst kommen und nur einmal, die dann gefunden wird, fängt an, nach der Herzfrequenzbedingung zu suchen? I.e. Wenn es keine Schrittbedingung gibt, müssen wir nicht nach der Herzfrequenz suchen? Eine Lösung könnte immer nur nach beiden Bedingungen suchen und den Join wie zuvor verwenden, könnte beispielsweise mit "nach" in "wo" nachschauen. Wenn Sie der Engine anzeigen möchten, dass der Herzschritt erst beginnt, wenn die Schrittbedingung auftritt, verwenden Sie einen Kontext "initiiert von s = StepCondition terminate nach 15 Minuten" und lassen Sie den Kontext die Herzfrequenz-Statements steuern. – goodie
Ja die Schrittbedingung muss zuerst kommen. Aber könntest du mir einfach ein Beispiel geben, wie man die StepCondition schreibt, weil ich jetzt nicht wie man Regeln mit einem Timer schreibt. – Tim