1. 统计程序-模板格式定义

1.1. 概念介绍

一个统计程序由一个统计由3大要素组成:统计对象,统计方法,统计区间。

1.1.1. 统计对象

  1. 支持GR,MO,CU,EQ,EV,FA,AL,ME,ST,CO 总共10大类。
  2. 支持四则表达式运算 。

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大类。

  1. MO:就是 MOSAIC ,获取 mosaic 的数据
  2. CU:就是 CUSTOMER ,对应的是数据库的 admin_customer
  3. EQ:就是 EQUIPMENT ,对应的是数据库的 admin_equipment
  4. EV:就是 EVENT ,对应的是数据库的 admin_event
  5. FA:就是 FAULT ,对应的是数据库的 admin_fault
  6. AL:就是 ALARM ,对应的是数据库的 admin_alarm
  7. ME:就是 MESSAGE ,对应的是数据库的 admin_message
  8. ST:就是 STATOS ,对应的是数据库的 admin_statos
  9. CO:就是 COLLECTOS ,对应的是数据库的 admin_collectos
  10. object: 表示实体对象,格式 name[=default_value];condition。
  11. 支持逻辑表达式 && , ||, >, >=, <, <=
  12. MO的source目前只能配置一个,其他的source源可以配置多个。

  13. 示例:配置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块里面定义的值的表达式

  1. 支持聚合函数 max,min,count,average,sum,accumulate,integral,hour,函数内不可嵌套四则运算
  2. 支持四则运算
  3. 示例:
"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. 注意

  1. 如果要单独执行统计程序要将statistics_id,statos_name,name 写入到parmas的json块,并且把params保存为json文件。
© Mixlinker all right reserved,powered by Gitbook文件修订时间: 2018-12-28 10:48:30

results matching ""

    No results matching ""