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'"]
}
}
配置中source
MO的key是S04
CO的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文件。