问题描述
我想要在不同的功率设置1-10(sensor = 2)下的平均速度(sensor = 1)。我不希望传感器1的速度出现在设置更改(sensor = 2)之前的平均值计算中。
例如power_setting = 1,速度= 50,速度= 60,power_setting = 2,速度= 100,速度= 120
如果我在power_setting = 2周围有一个时间窗口,那么它可能包括power_setting = 1的速度。
我如何明确告诉esper仅使用功率设置更改后出现的值进行计算。
这是我当前的脚本:
CREATE window SpeedWindow.win:time_batch(30 sec) as (speed double,power_setting int);
INSERT into SpeedWindow
SELECT
speedEvent.value as speed,powerSetting.value as power_setting
FROM
Sensors(id = 1).std:lastevent() as speedEvent,Sensors(id = 2).std:lastevent() as powerSetting;
INSERT into Output
SELECT
case
when SpeedWindowEvent.power_setting = 1 then 4154
when SpeedWindowEvent.power_setting = 2 then 4155
... etc ...
end as id,avg(SpeedWindowEvent.speed) as value
FROM
SpeedWindow as SpeedWindowEvent
GROUP BY
SpeedWindowEvent.power_setting;
解决方法
基于阐明用例的注释。创建一个在速度事件上启动和终止的上下文。
// make it easy to read,takes no CPU at all
insert into Speed select * from Sensor(id=1);
insert into Power select * from Sensor(id=2);
create context SpeedSession initiated by Speed terminated by Speed;
context SpeedSession select avg(...) from Power;