首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Siddhi 5,比较之前的值

Siddhi 5,比较之前的值
EN

Stack Overflow用户
提问于 2020-02-26 17:43:13
回答 1查看 119关注 0票数 0

我需要的是,当我得到的温度高于存储的最高温度或低于存储的最低温度时,我会向警报流发送带有新温度的警报。

问题是,当我获得更高或更低的温度时,首先将其添加到最高和/或最低温度,然后进行检查,因此我永远不会跳过警报。

我怎么做才能让我先比较新的温度,然后保持警觉呢?

代码语言:javascript
运行
复制
@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;

//日志

代码语言:javascript
运行
复制
[2020-02-26_10-41-49_404] INFO {org.wso2.siddhi.core.stream.output.sink.LogSink} - ouput > : Event{timestamp=1582710109402, data=[10, 10, 10], isExpired=false} (Encoded)
[2020-02-26_10-41-54_600] INFO {org.wso2.siddhi.core.stream.output.sink.LogSink} - ouput > : Event{timestamp=1582710114596, data=[11, 11, 10], isExpired=false} (Encoded)
[2020-02-26_10-41-59_462] INFO {org.wso2.siddhi.core.stream.output.sink.LogSink} - ouput > : Event{timestamp=1582710119461, data=[9, 11, 9], isExpired=false} (Encoded)

//示例

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-27 20:07:07

你必须使用最后的最高和最低温度来维护一个占位符,并在输入温度到来时使用它。

请参考示例代码

代码语言:javascript
运行
复制
@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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60410908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档