• 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. 概念介绍

    一个统计程序由一个统计由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. 格式定义

    示例

    1. {
    2. "params": {
    3. "connector": {
    4. "INFLUXDB": {
    5. "host": "127.0.0.1:8086"
    6. },
    7. "MYSQL": {
    8. "host": "127.0.0.1:3306"
    9. }
    10. },
    11. "source": {
    12. "MO": {
    13. "object": [
    14. "S54;S54 > 150 || S54 < 120"
    15. ]
    16. }
    17. },
    18. "expr": "accumulate(S54)",
    19. "selection": {
    20. "filter_not": {
    21. "customerID": [
    22. "1004"
    23. ]
    24. },
    25. "filter_and": {
    26. "mappingID": [
    27. "1002"
    28. ]
    29. }
    30. },
    31. "track": true,
    32. "duration": {
    33. "start": "2018-07-01 00:00:00",
    34. "end": "2018-08-01 12:00:00"
    35. },
    36. "result": {
    37. "precision": 3
    38. },
    39. "cycle": "60m"
    40. },
    41. "statistics_id": "totalCumulativeActivePower",
    42. "statos_name": "每小时用电量",
    43. "description": "每小时用电量的统计",
    44. "name": "totalCumulativeActivePower",
    45. "type": "statistics"
    46. }

    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数据源

    1. "source": {
    2. "MO": {
    3. "object": [
    4. "S02;S02 > 100 && S02 < 120"
    5. "S03"// 配置错误,MO的source配置仅支持一个源
    6. ]
    7. }
    8. }
    9. 定义数据源S02,并且取值值区间范围为 S02 > 100 && S02 < 120
    • CU,EQ,EV,FA,AL,ME,ST,CO 这8类统计数据源是数据库的某个field,支持条件
    • field必须是数据库存在的.
    • 针对这类统计,表达式expr必须是有意义的.

    • 示例:配置CU数据源

    1. "expr":"count(euipment_id)",
    2. "source": {
    3. "CU": {
    4. "object": ["customer_id; customer_id >= '1001'"]
    5. }
    6. }
    7. 定义数据源customer_id,并且取值条件为:customer_id >= '1001'
    8. 统计customer_id>=1001
    9. 另外:1001 必须添加单引号
    • 示例:配置EQ数据源
    1. "expr":"count(euipment_id)",
    2. "source": {
    3. "EQ": {
    4. "object": ["euipment_id; euipment_id >= '1004' && customer_id = '1001' "]
    5. }
    6. }
    7. 定义数据源customer_id,并且取值条件为:customer_id >= '1001'
    8. 统计设备号>='1004' 并且customer_id = '1001' 的设备有多少
    • 错误示例:配置CU数据源
    1. "expr":"accumulate(euipment_id)",
    2. "source": {
    3. "CU": {
    4. "object": ["customer_id; customer_id >= '1001'"]
    5. }
    6. }
    7. 定义数据源customer_id,并且取值条件为:customer_id >= '1001'
    8. 统计方法accumulate是错误的表述,相同的有错误表述的统计方法有:
    9. max,min,average,sum,accumulate,integral,hour
    • 示例:配置CO默认值
    1. "expr":"accumulate(S04) * A",
    2. "source": {
    3. "MO": {
    4. "object": ["S04"]
    5. },
    6. "CO": {
    7. "object":["A = 1;collect_id = 'OriginalGasElectricityRatio'"]
    8. }
    9. }
    10. 配置中source
    11. MOkeyS04
    12. COkeyA,并且A的默认值是1,当任何原因导致没有查询到CO的值的时候,会用设置的默认值替代,如何没有设置默认值,则默认值为0

    1.3.3. expr

    表达式,统计的表达式,针对source块里面定义的值的表达式

    • 支持聚合函数 max,min,count,average,sum,accumulate,integral,hour,函数内不可嵌套四则运算
    • 支持四则运算
    • 示例:
    1. "expr":"max(A) + min(B)"
    2. "expr":"accumulate(A) * B"
    3. "expr":"max(A + B)" // 不支持

    1.3.3.1. max

    • 格式:max(object)
    • 说明:在指定范围内对object取最大值
    • 示例:
    1. {
    2. "expr":"max(S01)",
    3. "cycle":"60m"
    4. }
    5. 取出1小时内的S01值得最大值

    1.3.3.2. min

    • 格式:min(object)
    • 说明:在指定范围内对object取最小值
    • 示例:
    1. {
    2. "expr":"min(S01)",
    3. "cycle":"60m"
    4. }
    5. 取出1小时内的S01值得最小值

    1.3.3.3. count

    • 格式:count(object)
    • 说明:在指定范围内对object做计数统计
    • 示例:
    1. {
    2. "expr":"count(S01)",
    3. "cycle":"60m"
    4. }
    5. 取出1小时内的S01值的计数统计

    1.3.3.4. average

    • 格式:average(object)
    • 说明:在指定范围内对object做平均数统计
    • 示例:
    1. {
    2. "expr":"average(S01)",
    3. "cycle":"60m"
    4. }
    5. 取出1小时内的S01值做平均数统计

    1.3.3.5. sum

    • 格式:sum(object)
    • 说明:在指定范围内对object做求和统计
    • 示例:
    1. {
    2. "expr":"sum(S01)",
    3. "cycle":"60m"
    4. }
    5. 取出1小时内的S01值做求和统计

    1.3.3.6. accumulate

    • 格式:accumulate(object)
    • 说明:在指定范围内对object做累计值统计(读数转用量)
    • 示例:
    1. {
    2. "expr":"accumulate(S01)",
    3. "cycle":"60m"
    4. }
    5. 取出1小时内的S01值做累计值统计

    1.3.3.7. integral

    • 格式:integral(object)
    • 说明:在指定范围内对object做积分统计
    • 示例:
    1. {
    2. "expr":"integral(S01)",
    3. "cycle":"60m"
    4. }
    5. 取出1小时内的S01值做积分统计

    1.3.3.8. hour

    • 格式:hour(object)
    • 说明:在指定范围内对object做耗时统计(非连续)
    • 示例:
    1. {
    2. "expr":"hour(S01)",
    3. "cycle":"60m"
    4. }
    5. 取出1小时内的S01值做耗时统计(非连续)

    1.3.3.9. 示例

    1. {
    2. "expr":"sum(S01)",
    3. "cycle":"60m",
    4. "source": {
    5. "MO": {
    6. "object": [
    7. "S01"
    8. ]
    9. }
    10. }
    11. }
    12. 统计每小时 S01 总和。
    13. 类似的表达式:
    14. "expr":"volumne(S01)" 统计每小时S01的累加值
    15. "expr":"count(S01)" 统计每小时出现S01的计数
    16. "expr":"max(S01)" 统计每小时S01的值的最大值
    17. "expr":"min(S01)" 统计每小时S01的值的最小值
    18. "expr":"average(S01)" 统计每小时S01的值的平均值

    1.3.4. selection

    对哪些设备进行统计.

    • filter_and: 逻辑关系与
    • filter_not: 逻辑关系非

    支持三种类型的方式过滤设备 equipmentID,customerID,mappingID

    1.3.4.1. 示例1

    1. "selection": {
    2. "filter_not":{
    3. "customerID":["1004"]
    4. },
    5. "filter_and":{
    6. "equipmentID":["1006","1007","1008","1002"]
    7. }
    8. }
    9. customerID=1004之外的的equipmentID=1006,1007,1008,1002的设备进行统计

    1.3.4.2. 示例2

    1. "selection": {
    2. "filter_not":{
    3. }
    4. }
    5. 对目前系统的所有设备进行统计

    1.3.5. track

    调试开关,开启之后程序会打印更多的信息.

    1.3.6. duration

    统计的时间范围,主要用于手动运行统计程序.配合cycle一起使用

    1.3.6.1. 示例

    1. "duration":{
    2. "start":"2018-07-01 00:00:00",
    3. "end":"2018-08-01 00:00:00"
    4. },
    5. "cycle":"60m"
    6. 表示统计时间段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文件。