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文件。