perseo 规则,如何获得特定时间的平均值 window?
perseo rules, how to get average of specific time window?
如何在 perseo 规则中随时间使用模式 windows?我尝试了很多不同的组合,按照 EsperTech Tutorials 的指示,不过,每次我 post 将它们 post 都成功了。时间 window 的任何示例以及如何获得该时间内任何值(例如温度)的平均值将受到高度赞赏。相信我,在问之前我已经做了很多努力;)
对我来说,一个有效的查询如下:
select *,\"temperature_range_XX-YY\" as ruleName, *, ev.temperature? as Temperature, ev.id? as Id, ev.datetime? as DateTime, ev.cid? as CID, current_timestamp as TS from pattern [every ev=iotEvent(cast(cast(temperature?,String),float)>XX or cast(cast(temperature?,String),float)<YY and type=\"sensors\")]
当然,这个查询 returns 只查询 XX 和 YY 范围之外的任何温度。我需要的是在特定时间的温度超出范围时收到警报,以及该时间内所有值的平均值是多少。
要获得平均值,您可以在 select 子句中使用 de avg()
函数。
以下规则对我有用:
{
"name":"calculate_avg",
"text":"select *, avg(cast(cast(ev.NO2?,String),float)) as mediaNO2, ev.id? as id, \"calculate_avg\" as ruleName from pattern [every ev=iotEvent(type=\"AirQualityObserved\")].win:time(1 minute) group by ev.id?",
"action":{
"type":"update",
"parameters":{
"id":"${id}",
"type":"AirQualityAveraged",
"attributes": [
{
"name":"average",
"value":"${mediaNO2}"
}
]
}
}
}
我想你的规则应该类似于:
"text":"select *,\"temperature_range_XX-YY\" as ruleName, *, avg(cast(cast(ev.temperature?, String), float)) as Temperature, ev.id? as Id, ev.datetime? as DateTime, ev.cid? as CID, current_timestamp as TS from pattern [every ev=iotEvent(cast(cast(temperature?,String),float)>XX or cast(cast(temperature?,String),float)<YY and type=\"sensors\")].win:time(1 minute)"
如何在 perseo 规则中随时间使用模式 windows?我尝试了很多不同的组合,按照 EsperTech Tutorials 的指示,不过,每次我 post 将它们 post 都成功了。时间 window 的任何示例以及如何获得该时间内任何值(例如温度)的平均值将受到高度赞赏。相信我,在问之前我已经做了很多努力;) 对我来说,一个有效的查询如下:
select *,\"temperature_range_XX-YY\" as ruleName, *, ev.temperature? as Temperature, ev.id? as Id, ev.datetime? as DateTime, ev.cid? as CID, current_timestamp as TS from pattern [every ev=iotEvent(cast(cast(temperature?,String),float)>XX or cast(cast(temperature?,String),float)<YY and type=\"sensors\")]
当然,这个查询 returns 只查询 XX 和 YY 范围之外的任何温度。我需要的是在特定时间的温度超出范围时收到警报,以及该时间内所有值的平均值是多少。
要获得平均值,您可以在 select 子句中使用 de avg()
函数。
以下规则对我有用:
{
"name":"calculate_avg",
"text":"select *, avg(cast(cast(ev.NO2?,String),float)) as mediaNO2, ev.id? as id, \"calculate_avg\" as ruleName from pattern [every ev=iotEvent(type=\"AirQualityObserved\")].win:time(1 minute) group by ev.id?",
"action":{
"type":"update",
"parameters":{
"id":"${id}",
"type":"AirQualityAveraged",
"attributes": [
{
"name":"average",
"value":"${mediaNO2}"
}
]
}
}
}
我想你的规则应该类似于:
"text":"select *,\"temperature_range_XX-YY\" as ruleName, *, avg(cast(cast(ev.temperature?, String), float)) as Temperature, ev.id? as Id, ev.datetime? as DateTime, ev.cid? as CID, current_timestamp as TS from pattern [every ev=iotEvent(cast(cast(temperature?,String),float)>XX or cast(cast(temperature?,String),float)<YY and type=\"sensors\")].win:time(1 minute)"