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)"