现实生活中,温度单次超出阈值并不会对设备造成影响,但连续多次超出阈值可能会引发机器故障等风险。本文以连续高温报警(连续3次超过80度)为例,详细说明如何使用流数据分析复杂事件处理的功能实现连续高温事件的判断,并将结果输出到文件中。
示意图如下所示。
前提条件
请您确保已创建边缘实例,具体操作请参见专业版环境搭建。
一、添加设备
参考设备模拟器章节中使用设备模拟器驱动部分的内容,创建一个使用设备模拟器驱动的设备,并将设备分配到边缘实例中。
说明
- 设备分配到边缘实例后,请先不要部署边缘实例,待完成其他操作后统一部署。
- 若已操作过高温报警示例内容,并创建了温度传感器产品和设备,则无需重复创建。
二、添加流数据分析任务
- 参考流数据任务开发内容,创建、设置并发布连续高温报警的流数据分析任务。
其中,开发类型选择SQL,运行环境选择边缘。
- 系统自动进入流数据任务开发SQL工作台。
复制如下SQL内容到编辑框中。若想了解更多复杂事件处理(CEP)的语法,请参见复杂事件处理(CEP)语句。
-- 连续3次温度>80时,输出报警信息到本地文件中 create table property ( propertyName varchar, propertyValue varchar, productKey varchar, deviceName varchar, ts varchar, tstamp as to_timestamp (cast (ts as bigint)), WATERMARK wk FOR tstamp as withOffset (tstamp, 0) ) with ( type = 'edgebus', jsonParser = 'device_property' ); create table file ( productKey varchar, deviceName varchar, temperatureList varchar, startTime timestamp, endTime timestamp ) with ( type = 'file', filePath = '/linkedge/run/debug/case05_continue_high_temperature_alarm.txt' ); insert into file select productKey, deviceName, temperatureList, -- 每次的温度示数 startTime, -- 开始时间 endTime -- 结束时间 from property MATCH_RECOGNIZE ( PARTITION BY productKey, deviceName ORDER BY tstamp -- 在窗口内,对事件时间进行排序 MEASURES -- 定义如何根据匹配成功的输入事件构造输出事件 CONCAT(LAST(e.propertyValue, 2), '|', LAST(e.propertyValue, 1), '|', e.propertyValue) as temperatureList, LAST(e.tstamp, 2) as startTime, e.tstamp as endTime ONE ROW PER MATCH -- 匹配成功输出一条 AFTER MATCH SKIP TO NEXT ROW -- 匹配跳转到下一行后继续处理 PATTERN (e{3}) -- e连续发生3次则输出一个事件 DEFINE -- 定义在PATTERN中出现的patternVariable的具体含义 e as e.propertyName = 'temperature' and cast (e.propertyValue as double) > 80 );
- 保存任务并发布。
- 将该SQL任务分配到边缘实例中,具体操作请参见分配流数据分析到边缘实例。
三、添加消息路由
在边缘实例的实例详情页面,选择消息路由,将温度传感器的属性变化数据路由到连续高温报警的流数据分析作业中。
四、部署边缘实例
- 在边缘实例的实例详情页面,单击部署,将子设备、流数据分析作业及消息路由下发到边缘端。
- 在实例详情页面网关页签,单击网关名称右侧的远程SSH终端,打开两个远程控制台,例如远程控制台1和远程控制台2。远程控制台1用于改变温度传感器温度值,远程控制台2用于查看计算结果。
说明 需要您先打开网关名称右侧的远程访问按钮,远程SSH终端才可以使用。
- 在远程控制台1,进入/linkedge/gateway/build/bin目录,执行3次如下命令,每次更改
temperature
参数的值,分别改为80、81、82。./ds_ctrl property a1WuxHr**** temperatureSensor01 '{"temperature":80}'
- 在远程控制台2,执行
tail -f /linkedge/run/debug/case05_continue_high_temperature_alarm.txt
命令 ,查看输出结果。此时因为设备温度只是连续两次超过80度,因此不会输出任何信息。 - 在远程控制台1,多次执行如下命令,每次更改
temperature
参数的值,按83~89、78~83,每次增加一度的规律执行命令。./ds_ctrl property a1WuxHr**** temperatureSensor01 '{"temperature":90}'
命令执行完成后,可在远程控制台2可看到如下信息。
2019-02-01 14:51:23.890 -> a1WuxHr****,temperatureSensor01,81|82|83,2019-02-01 14:51:20.1,2019-02-01 14:51:23.723 2019-02-01 14:51:30.472 -> a1WuxHr****,temperatureSensor01,82|83|84,2019-02-01 14:51:22.053,2019-02-01 14:51:30.401 2019-02-01 14:51:32.582 -> a1WuxHr****,temperatureSensor01,83|84|85,2019-02-01 14:51:23.723,2019-02-01 14:51:32.509 2019-02-01 14:51:34.494 -> a1WuxHr****,temperatureSensor01,84|85|86,2019-02-01 14:51:30.401,2019-02-01 14:51:34.398 2019-02-01 14:51:36.602 -> a1WuxHr****,temperatureSensor01,85|86|87,2019-02-01 14:51:32.509,2019-02-01 14:51:36.559 2019-02-01 14:51:38.817 -> a1WuxHr****,temperatureSensor01,86|87|88,2019-02-01 14:51:34.398,2019-02-01 14:51:38.802 2019-02-01 14:51:41.031 -> a1WuxHr****,temperatureSensor01,87|88|89,2019-02-01 14:51:36.559,2019-02-01 14:51:40.967 2019-02-01 14:51:59.790 -> a1WuxHr****,temperatureSensor01,81|82|83,2019-02-01 14:51:53.35,2019-02-01 14:51:59.68
文档内容是否对您有帮助?