【发布时间】:2017-05-05 10:42:47
【问题描述】:
我已从下游发送设备温度和湿度值,并有一个 ASA 用于处理处于警报或正常状态下的值以沉入事件中心。
设备正在发送包含其低警告范围、高警告范围、低临界范围和高临界范围的温度和湿度信息。值是这样的
查询是 ASA 定义为检测当前温度是否不是“正常”,即“警告”或“临界”,此事件将被接收到事件中心,另一个应用程序将获取此数据以向其发送通知警报负责人。警告级别的查询示例是:-
SELECT
e.IoTHub.ConnectionDeviceId AS DeviceID,
e.Sensorname AS Sensorname,
e.SensorIPAddress AS SensorIPAddress,
CAST(e.Temperature AS FLOAT) AS Temperature,
DATEADD(HH,8,CAST(e.Timestamp AS DATETIME)) AS LocalTime,
CAST(e.TemperatureThreshold.Warning.Low AS FLOAT) AS TempWarningLow,
CAST(e.TemperatureThreshold.Warning.High AS FLOAT) AS TempWarningHigh,
CAST(e.TemperatureThreshold.Critical.Low AS FLOAT) AS TempCriticalLow,
CAST(e.TemperatureThreshold.Critical.High AS FLOAT) AS TempCriticalHigh,
'WARNING' AS ALERT
INTO [TEMP-NOTIFICATION-WARNING]
FROM [realcoming] AS e
WHERE (CAST(e.Temperature AS FLOAT) <= CAST(e.TemperatureThreshold.Warning.Low AS FLOAT) AND CAST(e.Temperature AS FLOAT) > CAST(e.TemperatureThreshold.Critical.Low AS FLOAT)) OR (CAST(e.Temperature AS FLOAT) >= CAST(e.TemperatureThreshold.Warning.High AS FLOAT) AND Sensorname IS NOT NULL AND
SensorIPAddress IS NOT NULL AND
Temperature IS NOT NULL
我在 ASA 示例测试中使用示例 json 文件进行了测试,它正确显示了哪些数据是警告的,哪些数据是关键的,哪些数据是正常的:-
{"Sensorname":"Ultrasonic Surface","SensorIPAddress":"10.12.115.18","Temperature":33.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:25.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Infra Red 1A","SensorIPAddress":"10.12.115.35","Temperature":46.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:27.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Infra Red 1A","SensorIPAddress":"10.12.115.35","Temperature":42.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:29.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Laser Room 2B","SensorIPAddress":"10.12.115.20","Temperature":23.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:31.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Laser Room 2B","SensorIPAddress":"10.12.115.20","Temperature":63.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:33.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Laser Room 2B","SensorIPAddress":"10.12.115.20","Temperature":32.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:35.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Laser Room 2B","SensorIPAddress":"10.12.115.20","Temperature":23.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:37.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Room 2A","SensorIPAddress":"10.12.115.11","Temperature":59.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:39.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Laser Room 2B","SensorIPAddress":"10.12.115.20","Temperature":40.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:41.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Infra Red 1A","SensorIPAddress":"10.12.115.35","Temperature":12.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:43.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Infra Red 1A","SensorIPAddress":"10.12.115.35","Temperature":54.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:45.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Room 2A","SensorIPAddress":"10.12.115.11","Temperature":64.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:47.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Ultrasonic Surface","SensorIPAddress":"10.12.115.18","Temperature":78.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:49.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Laser Room 2B","SensorIPAddress":"10.12.115.20","Temperature":64.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:51.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Infra Red 1A","SensorIPAddress":"10.12.115.35","Temperature":64.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:53.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
{"Sensorname":"Laser Room 2B","SensorIPAddress":"10.12.115.20","Temperature":35.0,"TemperatureThreshold":{"Warning":{"Low":"20","High":"80"},"Critical":{"Low":"10","High":"90"}},"Timestamp":"2016-12-20T13:15:55.0000000Z","IoTHub":{"ConnectionDeviceId":"TEMP001"}}
每个事件之间的间隔为 2 分钟。因此,如果第一个事件是“WARNING”,它将下沉到事件中心,如果下一个事件仍然是“WARNING”,则该事件将被跳过,因为用户需要一次通知,如果达到第一个“WARNING”或“CRITICAL”。
我已经搜索并发现要与以前的事件进行比较,我需要在查询中使用“LAG”。
LAG(CAST(e.Temperature AS FLOAT) <= CAST(e.TemperatureThreshold.Warning.Low AS FLOAT) AND CAST(e.Temperature AS FLOAT) > CAST(e.TemperatureThreshold.Critical.Low AS FLOAT)) OR (CAST(e.Temperature AS FLOAT) >= CAST(e.TemperatureThreshold.Warning.High AS FLOAT)) OVER (PARTITION BY Temperature LIMIT DURATION(minute, 2))
但是这个查询在格式上失败了。如果我知道我静态设置的“WARNING”是否在以前的事件中可用,那么我只能比较可以缩短查询的“ALERT”变量。
“ALERT”变量设置为静态。有人知道如何比较吗?
一个简单的问题:- 我们在查询中定义的任何内容都会传递给之前的事件吗?还是之前的事件仅包含来自 IoT 中心的信息?在我的情况下,如果温度处于“WARNING”状态,在之前的事件中,它会有“ALERT”和“WARNING”值吗?
我的参考文章:
https://msdn.microsoft.com/en-us/library/azure/dn966240.aspx
【问题讨论】:
标签: azure azure-stream-analytics