【问题标题】:Esper rules for different users针对不同用户的 Esper 规则
【发布时间】:2016-03-13 17:39:02
【问题描述】:

我最近开始使用 Esper 进行编程,并且我有一个智能可穿戴设备,可以将计步器数据发送到我的笔记本电脑。然后我使用 esper 处理这些数据。但是假设我有多个智能可穿戴设备,每个设备都有一个唯一的 MAC 地址。我使用时间窗口,我的问题是如何更改我的规则文件,以便规则仅针对具有相同 MAC 地址的事件触发,并根据此 MAC 地址采取适当的措施。我的初始化和规则是:

    Configuration cepConfig = new Configuration();

    cepConfig.addEventType("Steps", Steps.class.getName());

    // We setup the engine
    EPServiceProvider cep = EPServiceProviderManager.getProvider("myCEPEngine", cepConfig);
    EPRuntime cepRT = cep.getEPRuntime();

    // We register an EPL statement
    EPAdministrator cepSteps1 = cep.getEPAdministrator();
    EPStatement cepStatementSteps1 = cepSteps1.createEPL("select * from "
            + "Steps().win:time(1 hour) "
            + "group by macAddress "
            + "having sum(max(steps)-min(steps)) < 100");
    cepStatementSteps1.addListener(new rule1Listener());

我的 Steps 类有以下字段:

double steps;
String stepsTimestamp;
String macAddress;

这就是我插入事件的方式:

Steps steps0 = new Steps(0, new Date(timeStamp).toString(), "K5E45H778");
cepRT.sendEvent(steps0);
Steps steps00 = new Steps(0, new Date(timeStamp).toString(), "LD24ESF74");
cepRT.sendEvent(steps00);
Steps steps1 = new Steps(25, new Date(timeStamp).toString(), "K5E45H778");
cepRT.sendEvent(steps1);
Steps steps2 = new Steps(50, new Date(timeStamp).toString(), "LD24ESF74");
cepRT.sendEvent(steps2);
Steps steps3 = new Steps(55, new Date(timeStamp).toString(), "K5E45H778");
cepRT.sendEvent(steps3);
Steps steps4 = new Steps(105, new Date(timeStamp).toString(), "LD24ESF74");
cepRT.sendEvent(steps4);
Steps steps5 = new Steps(75, new Date(timeStamp).toString(), "K5E45H778");
cepRT.sendEvent(steps5);
Steps steps6 = new Steps(110, new Date(timeStamp).toString(), "K5E45H778");
cepRT.sendEvent(steps6);

这是我的输出:

Sending tick:    Steps: 0.0 Timestamp: Mon Mar 14 18:13:23 CET 2016 Mac Address: K5E45H778
->Rule 1 fired: K5E45H778
Sending tick:    Steps: 0.0 Timestamp: Mon Mar 14 18:18:23 CET 2016 Mac Address: LD24ESF7474
->Rule 1 fired: LD24ESF7474
Sending tick:    Steps: 25.0 Timestamp: Mon Mar 14 18:23:23 CET 2016 Mac Address: K5E45H778
->Rule 1 fired: K5E45H778
Sending tick:    Steps: 105.0 Timestamp: Mon Mar 14 18:28:23 CET 2016 Mac Address: LD24ESF7474
Sending tick:    Steps: 55.0 Timestamp: Mon Mar 14 18:33:23 CET 2016 Mac Address: K5E45H778
->Rule 1 fired: K5E45H778
Sending tick:    Steps: 75.0 Timestamp: Mon Mar 14 18:38:23 CET 2016 Mac Address: K5E45H778
Sending tick:    Steps: 110.0 Timestamp: Mon Mar 14 18:43:23 CET 2016 Mac Address: K5E45H778

为什么规则不会为 75 步的最后一个事件触发?

【问题讨论】:

    标签: java rule-engine complex-event-processing esper


    【解决方案1】:

    SQL 标准的“group by”子句用于每个组的聚合。因此,只需添加“按 macAddress 分组”即可完成。

    【讨论】:

    • 感谢您的回答,输出更接近我想要的但仍然有错误。我用所做的更改编辑了我的问题。为什么规则不会在 75 步事件中触发?
    • 没关系,犯了一个愚蠢的错误。我不应该总结结果。再次感谢您的回答
    猜你喜欢
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    相关资源
    最近更新 更多