gpt4 book ai didi

java - 超能力规则语言: using timer for rule

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:01 30 4
gpt4 key购买 nike

我想在 Esper 中编写一条规则,当过去 15 分钟内步数为 0 并且心率高于 120 时触发。我提出了以下规则:

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

我的 HeartRate 类具有以下字段:

int heartrate;
String heartratesTimestamp;
String macAddress;

我的 Steps 类有这些字段:

int steps;
String stepsTimestamp;
String macAddress;

我面临的问题是,我只希望在过去 15 分钟内未采取任何步骤时触发规则。现在,当两个步骤事件具有相同的步骤数时,它会触发。我知道我可能必须使用timer.interval,但我不知道如何编写这个规则。有人可以帮助我吗?

最佳答案

要求定义不明确。 “心率高于 120”到底是什么意思,是一次还是持续 15 分钟或 1 分钟,另外“心率高于 120”如何与步数条件重叠或重合。

我建议将问题分解为两个独立的条件检测,然后进行连接以检测这两种条件在某个时间发生。这也使得测试变得容易,因为您可以看到每个条件都单独指示。例如大致如下:

// detect the steps condition
insert into StepConditionDetected
select *, current_timestamp as detectedTime select * from pattern[...];

// detect the heartrate condition
insert into HeartrateConditionDetected
select *, current_timestamp as detectedTime from pattern[...];

// join step and heartrate condition to see if they co-occur in some way
select * from StepConditionDetected.std:unique(macAddress).win:time(15 min) as a,
HeartrateConditionDetected.std:unique(macAddress).win:time(15 min) as b
where a.macAddress = b.macAddress

您可以添加到连接两个条件的 where 子句,并使用“overlap”来实现一些 Allen 区间代数,即“and a.detecttime.overlaps(b.DetectedTime, x, y)”

关于java - 超能力规则语言: using timer for rule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36745889/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com