- 1. 统计程序-模板格式定义
- 1.1. 概念介绍
- 1.1.1. 统计对象
- 1.1.2. 统计方法
- 1.1.3. 统计区间
- 1.2. 格式定义
- 1.3. 参数说明
- 1.3.1. connector
- 1.3.2. source
- 1.3.3. expr
- 1.3.3.1. max
- 1.3.3.2. min
- 1.3.3.3. count
- 1.3.3.4. average
- 1.3.3.5. sum
- 1.3.3.6. accumulate
- 1.3.3.7. integral
- 1.3.3.8. hour
- 1.3.3.9. 示例
- 1.3.4. selection
- 1.3.4.1. 示例1
- 1.3.4.2. 示例2
- 1.3.5. track
- 1.3.6. duration
- 1.3.6.1. 示例
- 1.3.7. cycle
- 1.3.8. statistics_id
- 1.3.9. statos_name
- 1.3.10. name
- 1.3.11. result
- 1.3.11.1. precision
- 1.3.12. type
- 1.3.13. 注意
- 1.1. 概念介绍
1. 统计程序-模板格式定义
1.1. 概念介绍
一个统计程序由一个统计由3大要素组成:统计对象,统计方法,统计区间。
1.1.1. 统计对象
- 支持GR,MO,CU,EQ,EV,FA,AL,ME,ST,CO 总共10大类。
- 支持四则表达式运算 。
1.1.2. 统计方法
表示对统计对象做什么样的统计,计数(count),累加(sum)还是平均数(average)等等,目前支持8种。
1.1.3. 统计区间
表示对统计对象的取值的采样区间,使用cycle表示。
1.2. 格式定义
示例
{"params": {"connector": {"INFLUXDB": {"host": "127.0.0.1:8086"},"MYSQL": {"host": "127.0.0.1:3306"}},"source": {"MO": {"object": ["S54;S54 > 150 || S54 < 120"]}},"expr": "accumulate(S54)","selection": {"filter_not": {"customerID": ["1004"]},"filter_and": {"mappingID": ["1002"]}},"track": true,"duration": {"start": "2018-07-01 00:00:00","end": "2018-08-01 12:00:00"},"result": {"precision": 3},"cycle": "60m"},"statistics_id": "totalCumulativeActivePower","statos_name": "每小时用电量","description": "每小时用电量的统计","name": "totalCumulativeActivePower","type": "statistics"}
1.3. 参数说明
1.3.1. connector
- INFLUXDB:
- 定义连接influxdb的参数,格式:ip:port
- MYSQL:
- 定义连接MYSQL的参数,格式:ip:port
1.3.2. source
定义统计的数据源,就是对哪些数据进行统计,支持MO,CU,EQ,EV,FA,AL,ME,ST,CO,四则运算(+,-,*,/)总共11大类。
- MO:就是 MOSAIC ,获取 mosaic 的数据
- CU:就是 CUSTOMER ,对应的是数据库的 admin_customer
- EQ:就是 EQUIPMENT ,对应的是数据库的 admin_equipment
- EV:就是 EVENT ,对应的是数据库的 admin_event
- FA:就是 FAULT ,对应的是数据库的 admin_fault
- AL:就是 ALARM ,对应的是数据库的 admin_alarm
- ME:就是 MESSAGE ,对应的是数据库的 admin_message
- ST:就是 STATOS ,对应的是数据库的 admin_statos
- CO:就是 COLLECTOS ,对应的是数据库的 admin_collectos
- object: 表示实体对象,格式 name[=default_value];condition。
- 支持逻辑表达式 && , ||, >, >=, <, <=
MO的source目前只能配置一个,其他的source源可以配置多个。
示例:配置MO/GR数据源:
"source": {"MO": {"object": ["S02;S02 > 100 && S02 < 120""S03"// 配置错误,MO的source配置仅支持一个源]}}定义数据源S02,并且取值值区间范围为 S02 > 100 && S02 < 120
- CU,EQ,EV,FA,AL,ME,ST,CO 这8类统计数据源是数据库的某个field,支持条件
- field必须是数据库存在的.
针对这类统计,表达式expr必须是有意义的.
示例:配置CU数据源:
"expr":"count(euipment_id)","source": {"CU": {"object": ["customer_id; customer_id >= '1001'"]}}定义数据源customer_id,并且取值条件为:customer_id >= '1001'统计customer_id>=1001另外:1001 必须添加单引号
- 示例:配置EQ数据源:
"expr":"count(euipment_id)","source": {"EQ": {"object": ["euipment_id; euipment_id >= '1004' && customer_id = '1001' "]}}定义数据源customer_id,并且取值条件为:customer_id >= '1001'统计设备号>='1004' 并且customer_id = '1001' 的设备有多少
- 错误示例:配置CU数据源:
"expr":"accumulate(euipment_id)","source": {"CU": {"object": ["customer_id; customer_id >= '1001'"]}}定义数据源customer_id,并且取值条件为:customer_id >= '1001'统计方法accumulate是错误的表述,相同的有错误表述的统计方法有:max,min,average,sum,accumulate,integral,hour
- 示例:配置CO默认值:
"expr":"accumulate(S04) * A","source": {"MO": {"object": ["S04"]},"CO": {"object":["A = 1;collect_id = 'OriginalGasElectricityRatio'"]}}配置中sourceMO的key是S04CO的key是A,并且A的默认值是1,当任何原因导致没有查询到CO的值的时候,会用设置的默认值替代,如何没有设置默认值,则默认值为0
1.3.3. expr
表达式,统计的表达式,针对source块里面定义的值的表达式
- 支持聚合函数 max,min,count,average,sum,accumulate,integral,hour,函数内不可嵌套四则运算
- 支持四则运算
- 示例:
"expr":"max(A) + min(B)""expr":"accumulate(A) * B""expr":"max(A + B)" // 不支持
1.3.3.1. max
- 格式:max(object)
- 说明:在指定范围内对object取最大值
- 示例:
{"expr":"max(S01)","cycle":"60m"}取出1小时内的S01值得最大值
1.3.3.2. min
- 格式:min(object)
- 说明:在指定范围内对object取最小值
- 示例:
{"expr":"min(S01)","cycle":"60m"}取出1小时内的S01值得最小值
1.3.3.3. count
- 格式:count(object)
- 说明:在指定范围内对object做计数统计
- 示例:
{"expr":"count(S01)","cycle":"60m"}取出1小时内的S01值的计数统计
1.3.3.4. average
- 格式:average(object)
- 说明:在指定范围内对object做平均数统计
- 示例:
{"expr":"average(S01)","cycle":"60m"}取出1小时内的S01值做平均数统计
1.3.3.5. sum
- 格式:sum(object)
- 说明:在指定范围内对object做求和统计
- 示例:
{"expr":"sum(S01)","cycle":"60m"}取出1小时内的S01值做求和统计
1.3.3.6. accumulate
- 格式:accumulate(object)
- 说明:在指定范围内对object做累计值统计(读数转用量)
- 示例:
{"expr":"accumulate(S01)","cycle":"60m"}取出1小时内的S01值做累计值统计
1.3.3.7. integral
- 格式:integral(object)
- 说明:在指定范围内对object做积分统计
- 示例:
{"expr":"integral(S01)","cycle":"60m"}取出1小时内的S01值做积分统计
1.3.3.8. hour
- 格式:hour(object)
- 说明:在指定范围内对object做耗时统计(非连续)
- 示例:
{"expr":"hour(S01)","cycle":"60m"}取出1小时内的S01值做耗时统计(非连续)
1.3.3.9. 示例
{"expr":"sum(S01)","cycle":"60m","source": {"MO": {"object": ["S01"]}}}统计每小时 S01值 总和。类似的表达式:"expr":"volumne(S01)" 统计每小时S01的累加值"expr":"count(S01)" 统计每小时出现S01的计数"expr":"max(S01)" 统计每小时S01的值的最大值"expr":"min(S01)" 统计每小时S01的值的最小值"expr":"average(S01)" 统计每小时S01的值的平均值
1.3.4. selection
对哪些设备进行统计.
- filter_and: 逻辑关系与
- filter_not: 逻辑关系非
支持三种类型的方式过滤设备
equipmentID,customerID,mappingID
1.3.4.1. 示例1
"selection": {"filter_not":{"customerID":["1004"]},"filter_and":{"equipmentID":["1006","1007","1008","1002"]}}对customerID=1004之外的的equipmentID=1006,1007,1008,1002的设备进行统计
1.3.4.2. 示例2
"selection": {"filter_not":{}}对目前系统的所有设备进行统计
1.3.5. track
调试开关,开启之后程序会打印更多的信息.
1.3.6. duration
统计的时间范围,主要用于手动运行统计程序.配合cycle一起使用
1.3.6.1. 示例
"duration":{"start":"2018-07-01 00:00:00","end":"2018-08-01 00:00:00"},"cycle":"60m"表示统计时间段2018-07-01 00:00:00 - 2018-08-01 00:00:00,统计程序取数据的范围是60m
1.3.7. cycle
统计程序统计累积量的计算范围.
1.3.8. statistics_id
统计程序的统计ID
1.3.9. statos_name
统计程序的名称
1.3.10. name
统计程序可执行文件的名称
1.3.11. result
1.3.11.1. precision
统计结果的精度
1.3.12. type
标识这个统计脚本是用于统计还是计算 type的值有 statistics,calculate;statistics用于统计,calculate用于计算
1.3.13. 注意
- 如果要单独执行统计程序要将statistics_id,statos_name,name 写入到parmas的json块,并且把params保存为json文件。
