本发明涉及物联网监控
技术领域:
:,尤其是涉及一种基于lua脚本的动态复杂报警实现方法。
背景技术:
::json:(javascriptobjectnotation)是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。javascript:是一种直译式的脚本语言,在网页上使用,用来给网页增加逻辑功能。node.js:是一个事件驱动i/o服务端javascript环境,基于google的v8引擎,v8引擎执行javascript的速度非常快,性能非常好。html:超文本标记语言(hypertextmarkuplanguage)是一种用于创建网页的标准标记语言。lua:是一种轻量小巧的脚本语言,用标准c语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。c :是c语言的继承,它既可以进行c语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。动态:是指报警配置变更,可及时通知规则转换模块。复杂报警:含时间、历史数据、同一设备的多属性点数据、多台设备的多属性点数据、多种组合关系的报警配置。传统的工业监控系统的报警主要是利用scada(supervisorycontrolanddataacquisition,数据采集监控)系统的阈值报警机制实现预警报警分析。在scada系统中,对每个监测参数设置高值、高高值、低值和低低值四个限值:如果监测参数值在低值和高值之间,则是正常的,如果监测参数值在低值和低低值之间、高值和高高值之间,则需要预警,如果监测参数值大于高高值,或监测参数值小于低低值则需要报警。上述监控报警技术只能进行阈值报警,无法实现含时间段、多设备、不同属性点阈值相关联的报警应用,在应用初期满足了基本的应用需求,然而随着智能化、精细化管理要求的提高及设备接入云平台,设备之间的关联性的增加,该技术方案已经无法满足应用需要。另外,自主研发的监控系统的报警增加了置缓值和变化率,但无法满足时间段内的某个设备的报警应用,并需软件统一发布,才可实现配置变更时动态变更报警规则,而且规则转换模板扩展不方便,需要更改原有的应用程序。而在互联网企业里兴起的物联网解决方案,提供了事件报警和阈值报警规则,但其中报警对象只针某个时间内某个设备的某个属性,无法满足对不同时间段,不同设备的不同属性点,多种组合关系的复杂报警应用。技术实现要素:本发明的发明目的是为了克服现有技术中的物联网解决方案无法满足对不同时间段,不同设备的不同属性点,多种组合关系的复杂报警应用的不足,提供了一种基于lua脚本的动态复杂报警实现方法。一种基于lua脚本的动态复杂报警实现方法,包括计算机和检测区域area1,area1中设有设备a和设备b,设备a和设备b均设有属性点attitude1和属性点attitude2;设定时间段区间[t1-t2];计算机中安装有报警配置模块、规则转换模块、引擎加载模块、计算处理模块和应用处理模块;包括如下步骤:(1-1)报警配置模块将用户在物联网平台配置页面的报警配置的内容转换为json格式的数据;(1-2)规则转换模块将json格式的数据内容转换为lua脚本,转换完成后,发送json格式的数据内容给引擎加载模块;(1-3)引擎加载模块根据接收到的json格式的数据内容,读取lua脚本,得到lua脚本的内容,将lua脚本的内容发给计算处理模块;(1-4)计算处理模块接收到lua脚本的内容后,将lua脚本的内容存入计算机的内存里,利用实时值获取函数calcore.get_devicelist_data({’a’,’b’})获得设备的实时值,调用on_data(devs)函数,对实时值进行逻辑计算处理,将得到的设备的实时值、当前时刻、报警描述、报警名称和报警产生后的操作列表发送给应用处理模块;(1-5)应用处理模块根据操作列表做出更新数据、下发控制、设备联动、拍摄报警现场照片或发送短信通知用户的处理。本发明使用了lua脚本语言,将报警配置转换为对应的lua脚本,报警需求变更时,仅更改对应生成的lua脚本即可,不需要修改原有的报警处理模块,提供了灵活的扩展和定制功能,降低了二次开发成本和维护成本。本发明动态的将物联网平台中的设备报警配置,转换成对应的lua脚本,然后加载lua脚本,调用相关内部库函数,处理解析实时数据,当数据满足报警条件,立即向报警应用模块推送报警信息。其中设备报警的配置,不仅仅是一个设备的简单阈值配置,可包含时间、历史数据、同一设备的多属性点数据、多台设备的多属性点数据、多种组合关系等的报警配置。本发明既保留了原有阈值配置的简单报警功能实现,又增加了时间、历史数据、同一设备的多属性点数据、多台设备的多属性点数据、多种组合关系等的复杂报警功能实现,满足物联网监控系统多种不同报警需求功能的实现。作为优选,(1-1)包括如下步骤:报警配置模块使用html页面展示配置内容,运用javascript将用户报警配置转换为json格式数据,将json格式的用户报警配置的数据上传给后台配置中心;用户报警配置包含时间、历史数据、同一设备的多属性点数据、各台设备的多属性点数据、组合关系和用户自定义的脚本;用户在物联网平台配置页面,进行报警配置:添加报警,设置报警名称为area1_alarm1,选择报警监测时间段为t1-t2,设置报警条件1,选择设备a,页面显示当前设备的属性点,选择填写算法表达式单选框,填写表达式attitude1>yesterdayaverage(attitude1)*k;设置报警条件2,选择设备b,页面显示当前设备的属性点,选择阈值设置单选框,设置attitude2的上限值c1和下限值c2,产生报警处理,选择短信通知,用户点击确定按钮,完成配置。作为优选,(1-2)包括如下步骤:将json格式的报警配置转换为lua脚本,将lua脚本中的算术运算、逻辑运算、时间计算和设备属性点数据类型处理分别写一个对应的lua脚本模板,内存中缓存各个脚本模板,当读取配置中的数据符合对应的脚本模板时,则将所述脚本模板添加至正在生成的lua脚本文件中。作为优选,(1-3)包括如下步骤:引擎加载模块收到json格式的数据内容后,获得脚本文件夹目录和脚本文件名,如果脚本文件名内容为空,则不处理;如果脚本文件名存在,则依次读取对应的lua脚本文件,将文件内容缓存至脚本文件数组中,直到读取结束;完成脚本文件的读取后,发送脚本文件数据给计算处理模块。作为优选,(1-4)包括如下步骤:计算处理模块收到lua脚本的内容后,获得area1_alarm1的lua脚本,并通过计算处理模块执行lua脚本:利用实时值获取函数calcore.get_devicelist_data({’a’,’b’})获得设备的实时值;调用on_data(devs)函数,在on_data(devs)函数中计算当前时间的秒数,将当前时间的秒数与时间段区间[t1-t2]进行比较,如果当前时间的秒数不在时间段区间[t1-t2]内,则结束on_data(devs)函数调用;如果当前时间的秒数在时间段区间[t1-t2]内,则计算设备a属性点attitude1昨天平均值乘以k的值,并与当前的实时值比较,如果实时值≤设备a属性点attitude1昨天平均值乘以k后得到的值,则结束on_data(devs)函数调用;如果实时值>设备a属性点attitude1昨天平均值乘以k后得到的值,则继续判断设备b属性点attitude2的实时值与上限值c1及下限值c2的大小关系;如果设备b属性点attitude2的实时值小于等于c1且大于等于c2,则结束on_data(devs)函数调用;如果设备b属性点attitude2的实时值大于c1,或者设备b属性点attitude2的实时值小于c2,则计算当前时间戳,并执行报警信息提取函数mqtt_pub(devs,timestamp);在mqtt_pub(devs,timestamp)函数中定义luatable变量json,并将报警信息和设备实时值赋值给变量json,通过发送报警信息函数mqtt_publish(″note_alarm″,json)将数据信息发布给应用处理模块。为了实现上述目的,本发明采用以下技术方案:因此,本发明具有如下有益效果:采用基于lua的报警脚本,复杂报警的逻辑均可转换为可执行的lua脚本;通过模块消息机制,可动态通知规则转换模块配置变更状态,使用node.js编写生成复杂报警脚本,可完美支持web服务;采用c 和lua混合调用,生成的报警lua脚本,可调用封装好的库函数,可重复使用,提供了灵活的扩展和定制功能,降低了二次开发成本和维护成本。附图说明图1为本发明的一种流程图;图2为本发明的一种报警配置信息至lua脚本生成的流程图。具体实施方式下面结合附图和具体实施方式对本发明做进一步的描述。如图1中所示的实施例是一种基于lua脚本的动态复杂报警实现方法,包括计算机和检测区域area1,area1中设有设备a和设备b,设备a和设备b均设有属性点attitude1和属性点attitude2;设定时间段区间[t1-t2];计算机中安装有报警配置模块、规则转换模块、引擎加载模块、计算处理模块和应用处理模块;报警配置可以多样化,用户可以根据实际需要进行配置,下面以如下例子为例来说明具体实施步骤。例如,在每天的00:00-08:00时间段里,如果设备a的属性点attitude1的值大于其昨天的平均值乘以1.2,且设备b的属性点attitude2的值大于28℃或设备b的属性点attitude2的值小于6℃,则产生报警,如果产生报警,则发送短信通知检测区域area1产生报警。设备a为流量压力检测装置,设备a的属性点attitude1为压力,设备a的属性点attitude2为流量,设备b为液位计,设备b的属性点attitude1为水位高度,设备b的属性点attitude2为环境温度。具体实施步骤1,报警配置模块将用户在物联网平台配置页面的报警配置的内容转换为json格式的数据:运用javascript将用户报警配置(配置可包含时间、历史数据、同一设备的多属性点数据、多台设备的多属性点数据、多种组合关系、用户自定义的脚本等)转换为json格式数据,并将数据上传给后台配置中心。用户在物联网平台配置页面,进行报警配置。添加报警,设置报警名称为area1_alarm1,选择报警监测时间段为00:00-08:00,设置报警条件1,选择设备a,(页面显示当前设备的属性点)选择填写算法表达式单选框,填写表达式attitude1>yesterdayaverage(attitude1)*1.2;设置报警条件2,选择设备b,(页面显示当前设备的属性点)选择阈值设置单选框,设置attitude2的上限值为28℃,下限值为6℃,产生报警处理,选择短信通知,用户点击确定按钮,完成配置。确定按钮点击触发事件,前端处理配置内容,转换成对应json格式的数据,内容包括报警名称、报警描述、报警时间段、报警时间段设置列表、报警计算表达式、报警计算表达式设置列表和产生报警后发生的操作列表,并将json格式的数据上传给后台配置中心。具体json格式的数据如下,“//”后面的为该行的注释,此处仅作为说明使用,与格式语法无关。具体实施步骤2,规则转换模块将json格式的数据内容转换为lua脚本,转换完成后,发送json格式的数据内容给引擎加载模块。如图2中所示,为本发明中所述的实现报警配置变更,立即转换新报警配置为最新lua脚本流程图。通过配置中心下发的配置变更消息,读取配置信息,如果包含报警配置信息,则解析报警配置,并按规则转换为对应的lua脚本。报警配置模块使用html页面展示配置内容,运用javascript将用户报警配置转换为json格式,将json格式的用户报警配置的数据上传给后台配置中心;用户报警配置包含时间、历史数据、同一设备的多属性点数据、各台设备的多属性点数据、组合关系和用户自定义的脚本。lua脚本包括加载计算库模块、订阅设备的实时值、根据设备的实时值计算表达式和逻辑处理及通过mqtt往通道发布报警消息。解析json格式的报警配置数据,首先,解析报警时间段设置列表,根据类型选择时间计算模板,生成时间计算条件的脚本,再解析报警计算表达式设置列表,根据报警计算表达式设置列表时中的name,生成获取设备实时值函数calcore.get_devicelist_data({’a’,’b’})的脚本,由设备名和对应属性点确定唯一对应的实时值,解析表达式中的函数名称,例如yesterdayaverage,得到需要调用的函数接口calcore.yesterdayaverage({’a’,’attitude1’}),根据代码中的2个计算表达式,生成实时值计算条件的脚本,最后再解析产生报警后发生的操作列表,根据报警产生后操作类型,选择报警处理模板mqtt_pub(devs,timestamp),生成报警处理消息内容脚本。脚本生成完成后,保存至指定的目录文件夹下,并发送消息给引擎加载模块。具体的lua脚本如下,“//”后面的为该行的注释,此处仅作为说明使用,与脚本语法无关。具体消息包括脚本文件夹目录和脚本文件名,如有多个脚本文件,则对应的name内容的值有多个脚本文件名,对应json格式的数据如下,“//”后面的为该行的注释,此处仅作为说明使用,与格式语法无关。具体实施步骤3,引擎加载模块根据接收到的json格式的数据内容,读取lua脚本,得到lua脚本的内容,将lua脚本的内容发给计算处理模块;引擎加载模块收到json格式的数据内容后,获得脚本文件夹目录和脚本文件名,如果脚本文件名内容为空,则不处理;如果脚本文件名存在,则依次读取对应的lua脚本文件,将文件内容缓存至脚本文件数组中,直到读取结束;完成脚本文件的读取后,发送脚本文件数据给计算处理模块。具体实施步骤4,计算处理模块接收到lua脚本的内容后,将lua脚本的内容存入计算机的内存里,利用实时值获取函数calcore.get_devicelist_data({’a’,’b’})获得设备的实时值;调用on_data(devs)函数,对实时值进行逻辑计算处理,将得到的设备的实时值、当前时刻、报警描述、报警名称和报警产生后的操作列表发送给应用处理模块;计算处理模块为c 可执行程序,其中嵌入执行lua脚本,根据lua脚本,处理调用相关的库函数,如订阅对应属性点的数据,计算相关报警表达式,对符合报警条件的,按lua脚本内容发送消息(控制、更新等)至应用处理模块。计算处理模块收到lua脚本的内容后,获得area1_alarm1的lua脚本,并通过计算处理模块执行lua脚本:利用实时值获取函数calcore.get_devicelist_data({’a’,’b’})获得设备的实时值;调用on_data(devs)函数,在on_data(devs)函数中计算当前时间的秒数,将当前时间的秒数与时间段区间[0-28800]进行比较,如果当前时间的秒数不在时间段区间[0-28800]内,则结束on_data(devs)函数调用;如果当前时间的秒数在时间段区间[0-28800]内,则计算设备a属性点attitude1昨天平均值乘以1.2的值,并与当前的实时值比较,如果实时值≤设备a属性点attitude1昨天平均值乘以k后得到的值,则结束on_data(devs)函数调用;如果实时值>设备a属性点attitude1昨天平均值乘以k后得到的值,则继续判断设备b属性点attitude2的实时值与上限值28及下限值6的大小关系;如果设备b属性点attitude2的实时值小于等于28且大于等于6,则结束on_data(devs)函数调用;如果设备b属性点attitude2的实时值大于28,或者设备b属性点attitude2的实时值小于6,则计算当前时间戳,并执行报警信息提取函数mqtt_pub(devs,timestamp);在mqtt_pub(devs,timestamp)函数中定义luatable变量json,并将报警信息和设备实时值赋值给变量json,通过发送报警信息函数mqtt_publish(″note_alarm″,json)将数据信息发布给应用处理模块。具体实施步骤5,应用处理模块根据操作列表做出更新数据、下发控制、设备联动、拍摄报警现场照片或发送短信通知用户的处理。应用处理模块,并不限定使用何种技术,可以通过mqtt订阅“note_alarm”,接收到报警数据信息,解析数据内容,获得报警信息,根据报警信息中的手机号及报警描述,调用指定接口函数,类似与填写了手机号码,获取验证短信。应理解,本实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。当前第1页1 2 3 当前第1页1 2 3 
技术特征:1.一种基于lua脚本的动态复杂报警实现方法,其特征是,包括计算机和检测区域area1,area1中设有设备a和设备b,设备a和设备b均设有属性点attitude1和属性点attitude2;设定时间段区间[t1-t2];计算机中安装有报警配置模块、规则转换模块、引擎加载模块、计算处理模块和应用处理模块;
包括如下步骤:
(1-1)报警配置模块将用户在物联网平台配置页面的报警配置的内容转换为json格式的数据;
(1-2)规则转换模块将json格式的数据内容转换为lua脚本,转换完成后,发送json格式的数据内容给引擎加载模块;
(1-3)引擎加载模块根据接收到的json格式的数据内容,读取lua脚本,得到lua脚本的内容,将lua脚本的内容发给计算处理模块;
(1-4)计算处理模块接收到lua脚本的内容后,将lua脚本的内容存入计算机的内存里,利用实时值获取函数calcore.get_devicelist_data({’a’,’b’})获得设备的实时值,调用on_data(devs)函数,对实时值进行逻辑计算处理,将得到的设备的实时值、当前时刻、报警描述、报警名称和报警产生后的操作列表发送给应用处理模块;
(1-5)应用处理模块根据操作列表做出更新数据、下发控制、设备联动、拍摄报警现场照片或发送短信通知用户的处理。
2.根据权利要求1所述的基于lua脚本的动态复杂报警实现方法,其特征是,(1-1)包括如下步骤:
报警配置模块使用html页面展示配置内容,运用javascript将用户报警配置转换为json格式,将json格式的用户报警配置的数据上传给后台配置中心;用户报警配置包含时间、历史数据、同一设备的多属性点数据、各台设备的多属性点数据、组合关系和用户自定义的脚本;
用户在物联网平台配置页面,进行报警配置:
添加报警,设置报警名称为area1_alarm1,选择报警监测时间段为t1-t2,设置报警条件1,选择设备a,页面显示当前设备的属性点,选择填写算法表达式单选框,填写表达式attitude1>yesterdayaverage(attitude1)*k;设置报警条件2,选择设备b,页面显示当前设备的属性点,选择阈值设置单选框,设置attitude2的上限值c1和下限值c2,产生报警处理,选择短信通知,用户点击确定按钮,完成配置。
3.根据权利要求2所述的基于lua脚本的动态复杂报警实现方法,其特征是,(1-2)包括如下步骤:
将json格式的报警配置转换为lua脚本,将lua脚本中的算术运算、逻辑运算、时间计算和设备属性点数据类型处理分别写一个对应的lua脚本模板,内存中缓存各个脚本模板,当读取配置中的数据符合对应的脚本模板时,则将所述脚本模板添加至正在生成的lua脚本文件中。
4.根据权利要求3所述的基于lua脚本的动态复杂报警实现方法,其特征是,(1-3)包括如下步骤:
引擎加载模块收到json格式的数据内容后,获得脚本文件夹目录和脚本文件名,如果脚本文件名内容为空,则不处理;如果脚本文件名存在,则依次读取对应的lua脚本文件,将文件内容缓存至脚本文件数组中,直到读取结束;完成脚本文件的读取后,发送脚本文件数据给计算处理模块。
5.根据权利要求4所述的基于lua脚本的动态复杂报警实现方法,其特征是,(1-4)包括如下步骤:
计算处理模块收到lua脚本的内容后,获得area1_alarm1的lua脚本,并通过计算处理模块执行lua脚本:
利用实时值获取函数calcore.get_devicelist_data({’a’,’b’})获得设备的实时值;调用on_data(devs)函数,在on_data(devs)函数中计算当前时间的秒数,将当前时间的秒数与时间段区间[t1-t2]进行比较,如果当前时间的秒数不在时间段区间[t1-t2]内,则结束on_data(devs)函数调用;如果当前时间的秒数在时间段区间[t1-t2]内,则计算设备a属性点attitude1昨天平均值乘以k的值,并与当前的实时值比较,如果实时值≤设备a属性点attitude1昨天平均值乘以k后得到的值,则结束on_data(devs)函数调用;如果实时值>设备a属性点attitude1昨天平均值乘以k后得到的值,则继续判断设备b属性点attitude2的实时值与上限值c1及下限值c2的大小关系;如果设备b属性点attitude2的实时值小于等于c1且大于等于c2,则结束on_data(devs)函数调用;如果设备b属性点attitude2的实时值大于c1,或者设备b属性点attitude2的实时值小于c2,则计算当前时间戳,并执行报警信息提取函数mqtt_pub(devs,timestamp);在mqtt_pub(devs,timestamp)函数中定义luatable变量json,并将报警信息和设备实时值赋值给变量json,通过发送报警信息函数mqtt_publish(″note_alarm″,json)将数据信息发布给应用处理模块。
技术总结本发明公开了一种基于Lua脚本的动态复杂报警实现方法,包括计算机和检测区域AREA1,AREA1中设有设备A和设备B,设备A和设备B均设有属性点attitude1和属性点attitude2;设定时间段区间[T1‑T2];计算机中安装有报警配置模块、规则转换模块、引擎加载模块、计算处理模块和应用处理模块;包括如下步骤:报警配置模块将用户在物联网平台配置页面的报警配置的内容转换为JSON格式的数据;规则转换模块将JSON格式的数据内容转换为Lua脚本,转换完成后,发送JSON格式的数据内容给引擎加载模块;本发明具有提供了灵活的扩展和定制功能,降低了二次开发成本和维护成本的特点。
技术研发人员:林杨平;何琦枫;王陈淼;杨振伟;姜雪明;唐飞婷
受保护的技术使用者:浙江浙大中控信息技术有限公司
技术研发日:2019.11.28
技术公布日:2020.06.09