当前位置: 首页 > 知识库问答 >
问题:

Esper规则语言:使用计时器进行规则

丌官嘉良
2023-03-14

我想在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());

我的心率类别有以下字段:

int heartrate;
String heartratesTimestamp;
String macAddress;

我的Steps类有以下字段:

int steps;
String stepsTimestamp;
String macAddress;

我面临的问题是,我只想在过去15分钟内没有采取任何措施的情况下启动规则。现在,当两个步骤事件的步骤数相同时,它将激发。我知道我可能必须使用计时器。但是我不知道如何写这个规则。谁能帮帮我吗?

共有1个答案

戚繁
2023-03-14

要求定义不清。“心率高于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区间代数,即“和a.detecttime.overlaps(b.detectedTime,x,y)”

 类似资料:
  • 我有以下两个类Heartrate与字段: 和字段步骤: 我写的规则在最后一分钟步数超过100步,心率超过160时触发。 我想更改此规则,使其基于macAddress的上下文。因此,该规则只考虑具有相同macAddress的步骤和心率。我已经为步骤的macAddress和心率的macAddress编写了上下文规则。它们都是单独工作的,但当我试着给它们筑巢时,规则就不再起作用了。 我做错了什么?

  • 我是一个流口水的新手(6.3版),我很难想出一个具体的规则。我有一个名为Steps的类,只有一个简单的字段

  • 我想写一个心率在160以上持续5分钟时触发的规则,我想出的规则如下: 我的心率类别有以下字段: 我面临的问题是,每当心率超过160时,这条规则就会启动。相反,我希望它只有在心率保持在160以上5分钟时才会启动。如何调整此规则?

  • 我最近开始使用Esper编程,我有一个智能可穿戴设备,可以将计步器数据发送到我的笔记本电脑。然后,我使用esper处理这些数据。但假设我有多个智能穿戴设备,每个都有一个唯一的MAC地址。我使用时间窗口,我的问题是如何更改规则文件,使规则仅对具有相同MAC地址的事件触发,并基于此MAC地址采取适当的操作。我的初始化和规则是: “我的步骤”类具有以下字段: 以下是我插入事件的方式: 这是我的输出: 为

  • 我有以下规则,当心率保持在160以上5分钟时触发。 我的心率类别有以下字段: 我想要的是能够在ruleListener中获得macAddress。然而,这将返回一个空的hashmap。所以我的问题是如何返回心率的macAddress?

  • 我是Drools Fusion的新手,我想知道为什么我的规则不总是被取消。我用的是Drools 6.3。以下是我要插入的事件: 这是我的规则文件: 这是我的输出: 我预计我的规则将触发2次,并给出以下输出: 我可能忽略了一些事情,但我没有找到关于我的问题的太多信息。有人能解释一下这里到底发生了什么吗?非常感谢。