Siddhi 5,比较之前的值

Siddhi 5,比较之前的值,siddhi,Siddhi,我需要在温度高于存储的最高温度或低于存储的最低温度时,向警报流发送一个带有新温度的警报 问题是,当我得到较高或较低的温度时,首先将其添加到最大值和/或最小值,然后进行检查,因此我从不跳过警报 我该如何做才能首先比较出现在我面前的新温度并提高警惕 @App:name("MaxTenMinutesApp") define stream CargoStream (temperature int); @sink(type='log', prefix='ouput >') define strea

我需要在温度高于存储的最高温度或低于存储的最低温度时,向警报流发送一个带有新温度的警报

问题是,当我得到较高或较低的温度时,首先将其添加到最大值和/或最小值,然后进行检查,因此我从不跳过警报

我该如何做才能首先比较出现在我面前的新温度并提高警惕

@App:name("MaxTenMinutesApp")
define stream CargoStream (temperature int);

@sink(type='log', prefix='ouput >')
define stream OutputStream(temperature int, temperatureMax int, temperatureMin int);

@sink(type='log', prefix='alert >')
define stream AlertStream(temperature int);

@info(name='Alert')
from OutputStream[temperatureMax < temperature or temperatureMin > temperature ]
select temperature
insert into AlertStream;

@info(name='MaxTenMinutes')
from CargoStream#window.time(5 min)
select temperature, max(temperature) as temperatureMax, min(temperature) as temperatureMin
insert into OutputStream;
//范例

VALUE   TEM MAX MIN  EVENT
5         5   5   5  SENT ALARM NEW MAX Y MIN
10       10  10   5  SENT ALARM NEW MAX
6         6  10   5  NOTHING
3         3  10   3  SENT ALARM NEW MIN

您必须保留一个占位符,其中包含最后的最高和最低温度,并在输入温度时使用它

请参考示例代码

@App:name("MaxTenMinutesApp")

define stream CargoStream (temperature int);

define table tempValueHolder (index int, temperatureMax int, temperatureMin int);

-- Sets initial value
define trigger triggerAtStart at 'start';

@sink(type='log', prefix='ouput >')
define stream OutputStream(temperature int, temperatureMax int, temperatureMin int);

@sink(type='log', prefix='alert >')
define stream AlertStream(temperature int);

@info(name='Sets initial value')
from triggerAtStart
select 0 as index, 0 as temperatureMax, 0 as temperatureMin
insert into tempValueHolder;

@info(name='Alert')
from CargoStream as strm
join tempValueHolder as tbl
select strm.temperature, tbl.temperatureMax, tbl.temperatureMin
insert into OutputStream;

from OutputStream[temperatureMax < temperature or temperatureMin > temperature ]
select temperature
insert into AlertStream;


@info(name='MaxTenMinutes')
from OutputStream#window.time(5 min)
select max(temperature) as temperatureMax, min(temperature) as temperatureMin
update tempValueHolder
on tempValueHolder.index == 0;

你能详细说明一下要求吗。使用示例场景。问题的开头是目的,我不知道还能解释什么。我需要保持最高和最低温度。当温度大于最大值或小于最小值时,我必须将该温度发送到报警流。问题是,现在我首先将温度设置为最大值或最小值,然后进行比较,我需要以另一种方式进行比较。首先检查新温度是否高于最高或低于最低温度,如果是,则发送警报,然后将其设置为最高或最低(如果适用)。
@App:name("MaxTenMinutesApp")

define stream CargoStream (temperature int);

define table tempValueHolder (index int, temperatureMax int, temperatureMin int);

-- Sets initial value
define trigger triggerAtStart at 'start';

@sink(type='log', prefix='ouput >')
define stream OutputStream(temperature int, temperatureMax int, temperatureMin int);

@sink(type='log', prefix='alert >')
define stream AlertStream(temperature int);

@info(name='Sets initial value')
from triggerAtStart
select 0 as index, 0 as temperatureMax, 0 as temperatureMin
insert into tempValueHolder;

@info(name='Alert')
from CargoStream as strm
join tempValueHolder as tbl
select strm.temperature, tbl.temperatureMax, tbl.temperatureMin
insert into OutputStream;

from OutputStream[temperatureMax < temperature or temperatureMin > temperature ]
select temperature
insert into AlertStream;


@info(name='MaxTenMinutes')
from OutputStream#window.time(5 min)
select max(temperature) as temperatureMax, min(temperature) as temperatureMin
update tempValueHolder
on tempValueHolder.index == 0;