上报地址以及秘钥

  1. 节能平台能耗数据上报服务器地址为:115.233.209.158:8082
  2. 上报数据包AES密钥:0102030405060708090a0b0c0d0e0f10
  3. 向量:0102030405060708090a0b0c0d0e0f10
  4. MD5:12345
  5. AES采用CBC算法模式、填充模式为Zeros


能耗数据类型编码

序号 能耗数据类型 编码
1. 正向有功总电能累积量 1090
2. 水表累积量 1F90
3. 燃气表累积量 1190
4. A相电压 11B6
5. B相电压 12B6
6. C相电压 13B6
7. A相电流 21B6
8. B相电流 22B6
9. C相电流 23B6
10. 功率因素 50B6
11. A相功率因素 51B6
12. B相功率因素 52B6
13. C相功率因素 53B6
14. 有功功率 SKW
15. 冷冻水出水温度 SLDSC
16. 冷冻水回水温度 SLDSH
17. 冷冻水流量 SLDSLL
18. 室外温度 RNA01
19. 太阳辐照度 RNA02
20. 光伏组件背面表面温度 RNA03
21. 发电量 RNA04
22. 光伏逆变器转换效率 RNA05
23. 集热系统进水温度 RNA06
24. 集热系统出水温度 RNA07
25. 集热系统循环流量 RNA08
26. 辅助热源耗能量 RNA09
27. 系统耗电量 RNA10
28. 机组用户侧进水温度 RNA11
29. 机组用户侧出水温度 RNA12
30. 机组用户侧流量 RNA13
31. 机组输入功率 RNA14
32. 系统热源侧流量 RNA15
33. 系统用户侧流量 RNA16
34. 系统热源侧进水温度 RNA17
35. 系统热源侧出水温度 RNA18
36. 系统用户侧进水温度 RNA19
37. 系统用户侧出温度度 RNA20
38. 机组热源侧流量 RNA21
39. 机组热源侧进水温度 RNA22
40. 机组热源侧出水温度 RNA23
41. 系统能效(COP) RNA24

采集设备类型列表

采集设备类型编号 采集设备类型名称
001 单相电表
002 水表
003 燃气表
004 多功能电表
005 三相四线有功电表
GE01 GE冷量表

能耗类型列表

能耗类型编号 能耗类型名称
01 电(electricity)
02 水(water)
03 气(gas)
04 集中供热量(hot)
05 集中供冷量(cool)
06 其他能源(other)
07 煤(coal)
08 液化石油气
09 人工煤气
10 汽油
11 煤油
12 柴油
13 可再生能源

计量单位列表

计量单位编号 计量单位名称
U001 千瓦时(电)
U002 立方米(水)
U003 立方米(煤气)
U004 千瓦时(电)/平方米
U005 立方米(水)/平方米
U006 立方米(煤气)/平方米
U007 千瓦(电)
U008 n
U009 分钟
U010 GJ/h
U011 GJ
U012 摄氏度
U013 立方米/秒
U014 升/分钟
U015 千克/分钟
U016 吨/小时
U017 立方米/小时
U018
U019 千克
U020
U021 立方米(柴油)
U022 冷量MJ 流量 M3

数据采集器身份认证过程和数据加密

  1. 身份认证过程

    数据中心使用MD5算法进行数据采集器身份认证,密钥长度为128bit,具体过程如下:

    1. TCP连接建立成功后,数据采集器向数据中心发送身份认证请求;
    2. 数据中心向数据采集器发送一个随机序列;
    3. 数据采集器将接收到的随机序列和本地存储的认证密钥组合成一连接串,计算连接串的MD5值并发送给数据中心;
    4. 数据中心将接收到的MD5值和本地计算结果相比较,如果一致则认证成功,否则认证失败。

认证密钥存储在数据中心和数据采集器的本地文件系统中,数据中心可以通过网络对数据采集器的认证密钥进行更新。

  1. 数据加密

使用AES加密算法对XML数据包进行加密,密钥长度为128bit。加密密钥存储在数据中心和数据采集器的本地文件系统中,数据中心可以通过网络对数据采集器的加密密钥进行更新

数据采集器和数据中心通信过程

数据封包格式

  1. 数据封包的基本结构 | 项目 | 长度 | 定义 | 说明 | | —- | —- | —- | —- | | 包头 | 4字节 | 0x68 0x68 0x16 0x16 |
    | | 有效数据总长度 | 4字节 |
    | 代表当前数据包中的“有效数据”的长度。 | | 有效数据 | N字节(M+4) |
    | “有效数据”为数据包的实体内容,M指令内容为经过AES加密后的XML文本长度。 | | CBC校验 | 2字节 |
    | 只对“有效数据”进行CBC校验,CBC校验采用CBC-16-CCITT。 CBC-16/XMODEM
    需要字节颠倒,如校验结果是1234,报文里需要是3412 | | 包尾 | 4字节 | 0x55 0xAA 0x55 0xAA |
    |

  2. 有效数据 | 项目 | 长度 | 定义 | 说明 | | —- | —- | —- | —- | | 指令序号 | 4字节 |
    | 该标识符由指令发起方指定,标识了指令发起方向指令应答方发送的指令,指令应答方应答时,本项内容需要按照指令发起方提供的标识符来进行填充。指令序号 4字节,需要两个字节两个字节颠倒,如序号是12345678的话,报文里需要是56781234 | | 指令内容 | M字节 |
    | 根据指令的不同,内容不同,指令内容为经过AES加密后的XML文本 |

数据传输的XML数据格式

  1. 身份验证和校时数据包 ```xml <?xml version=”1.0” encoding=”utf-8” ?> request
  1. ```xml
  2. <?xml version="1.0" encoding="utf-8" ?>
  3. <root>
  4. <common>
  5. <building_id><!-- 分项计量建筑识别码(10位) --></building_id>
  6. <gateway_id><!-- 采集装置编号 --></gateway_id>
  7. <type>sequence</type>
  8. </common>
  9. <id_validate operation="sequence">
  10. <sequence ><!-- 随机序列 --></sequence>
  11. </id_validate>
  12. </root>
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <root>
  3. <common>
  4. <building_id><!-- 分项计量建筑识别码(10位) --></building_id>
  5. <gateway_id><!-- 采集装置编号(2位),如01 --></gateway_id>
  6. <type>md5</type>
  7. </common>
  8. <id_validate operation="md5">
  9. <md5><!-- 数据中心随机序列+MD5码的MD5计算值 --></md5>
  10. </id_validate>
  11. </root>
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <common>
    <building_id><!-- 分项计量建筑识别码(10位)  --></building_id>
    <gateway_id><!-- 采集装置编号(2位),如01 --></gateway_id>
<type>result</type>
<type>time</type>
  </common>
  <id_validate operation="result">
<result><!-- 验证成功:pass;验证失败:fail --></result>
<time><!-- 格式: yyyyMMddHHmmss --></time>
  </id_validate>
</root>
  1. 心跳数据包 ```xml <?xml version=”1.0” encoding=”utf-8” ?> notify
```xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <common>
    <building_id><!-- 分项计量建筑识别码(10位)  --></building_id>
    <gateway_id><!-- 采集装置编号(2位),如01 --></gateway_id>
    <type>heart_result</type>
  </common>
<id_validate operation="heart_result">
<heart_result><!--0000--></heart_result>
  </id_validate>
</root>
  1. 设备验证及数据上报数据包 ```xml <?xml version=”1.0” encoding=”utf-8” ?> query
```xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <common>
    <building_id><!-- 分项计量建筑识别码(10位)  --></building_id>
    <gateway_id><!-- 采集装置编号(2位),如01 --></gateway_id>
    <type>reply</type>
  </common>
  <data operation="reply">
    <sequence>
      <!-- 采集装置向数据中心发送数据的序号 -->
    </sequence>
    <parse>
      <!-- 
        yes: 向数据中心发送的数据经过采集装置解析;
        no:  向数据中心发送的数据未经过采集装置解析;
      -->
    </parse>
    <time>
      <!-- 数据采集时间 -->
    </time>
    <!-- 
      计量装置信息, 一个或多个
      meter元素属性: 
        id: 仪表序号(当前仪表在所有仪表中的序号)
        name: 采集点识别码
        conn: 计量装置诊断信息,取值 conn: 计量装置连接正常 disconn: 计量装置连接断开
    -->
    <meter id="1" name="330102E066090001" conn="conn">
      <!--
        计量装置的具体采集功能,一个或多个
        function元素属性:
          id: 计量装置的具体采集功能编号
          name: 采集点识别码-能耗数据类型编码
          coding: 监测数据分类/分项编号
          error: 该功能出现错误的状态码,192表示没有错误
      -->
      <function id="1" coding="abc" name="330102E066090001-1090" error="0" sample_time="yyyyMMddHHmmss">
        <!-- 具体数据 -->
      </function>
    </meter>
    <meter id="1" name="330102E066090001" conn="conn">     
      <function id="1" coding="abc" name="330102E066090001-1090" error="0" sample_time="yyyyMMddHHmmss">
        <!-- 具体数据 -->
      </function>
       <function id="1" coding="abc" name="330102E066090001-1090" error="0" sample_time="yyyyMMddHHmmss">
        <!-- 具体数据 -->
      </function>
    </meter>
  </data>
</root>
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <common>
    <building_id><!-- 分项计量建筑识别码(10位)  --></building_id>
    <gateway_id><!-- 采集装置编号(2位),如01 --></gateway_id>
    <type>report</type>
  </common>
  <data operation="report">
    <sequence>
      <!-- 采集装置向数据中心发送数据的序号 -->
    </sequence>
    <parse>
      <!-- 
        yes: 向数据中心发送的数据经过采集装置解析;
        no:  向数据中心发送的数据未经过采集装置解析;
      -->
    </parse>
    <time>
      <!-- 数据采集时间 -->
    </time>
    <!-- 
      计量装置信息, 一个或多个
      meter元素属性: 
        id: 仪表序号(当前仪表在所有仪表中的序号)
        name: 采集点识别码
        conn: 计量装置诊断信息,取值 conn: 计量装置连接正常 disconn: 计量装置连接断开
    -->
    <meter id="1" name="330102E066090001" conn="conn">

      <!--
        计量装置的具体采集功能,一个或多个
        function元素属性:
          id: 计量装置的具体采集功能编号
          coding: 监测数据分类/分项编号
          name: 采集点识别码-能耗数据类型编码
          error: 该功能出现错误的状态码,192表示没有错误
      -->
      <function id="1" coding="abc" name="330102E066090001-1090" error="0" sample_time="yyyyMMddHHmmss">
        <!-- 具体数据 -->
      </function>
    </meter>
  </data>
</root>
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <common>
    <building_id><!-- 分项计量建筑识别码(10位)  --></building_id>
    <gateway_id><!-- 采集装置编号(2位),如01 --></gateway_id>
    <type>continuous</type>
  </common>
  <data operation="continuous">
    <sequence>
      <!-- 采集装置向数据中心发送数据的序号 -->
    </sequence>
    <parse>
      <!-- 
        yes: 向数据中心发送的数据经过采集装置解析;
        no:  向数据中心发送的数据未经过采集装置解析;
      -->
    </parse>
    <time>
      <!-- 数据采集时间 -->
    </time>
    <total>
      <!-- 需要断点续传数据包的总数 -->
    </total>
    <current>
      <!-- 当前断点续传数据包的编号 -->
    </current>
    <!-- 
      计量装置信息, 一个或多个
      meter元素属性: 
        id: 仪表序号(当前仪表在所有仪表中的序号)
        name: 采集点识别码
        conn: 计量装置诊断信息,取值 conn: 计量装置连接正常 disconn: 计量装置连接断开
    -->
    <meter id="1" name="330102E066090001" conn="conn">
      <!--
        计量装置的具体采集功能,一个或多个
        function元素属性:
          id: 计量装置的具体采集功能编号
          coding: 监测数据分类/分项编号
          name: 采集点识别码-能耗数据类型编码
          error: 该功能出现错误的状态码,192表示没有错误
      -->
      <function id="1" coding="abc" name="330102E066090001-1090" error="0" sample_time="yyyyMMddHHmmss">
        <!-- 具体数据 -->
      </function>
    </meter>
  </data>
</root>
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <common>
    <building_id><!-- 分项计量建筑识别码(10位)  --></building_id>
    <gateway_id><!-- 采集装置编号(2位),如01 --></gateway_id>
    <type>continuous_ack</type>
  </common>
<data operation="continuous_ack" />
< continuous_ack >
      <!—当前包 -->
    </ continuous_ack >
  </data>
</root>
  1. 配置信息数据包 ```xml <?xml version=”1.0” encoding=”utf-8” ?> period
```xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
<common>
    <building_id><!-- 分项计量建筑识别码(10位)  --></building_id>
    <gateway_id><!-- 采集装置编号(2位),如01 --></gateway_id>
    <type>period_ack</type>
  </common>
  <config operation="period_ack" />
  </config>
</root>
2022-04-13 11:42:56.8900 [ INFO] [    7] [msl.Cloud.BizService.GovBuildingEnergyConsumption.Encoder.EnergyPackageEncoder] Send:
<?xml version="1.0" encoding="utf -8" ?>
<root>
  <id_validate operation="request" />
  <common>
    <building_id>330421J002</building_id>
    <gateway_id>01</gateway_id>
    <type>request</type>
  </common>
</root>
2022-04-13 11:42:56.9035 [ INFO] [    7] [msl.Cloud.BizService.GovBuildingEnergyConsumption.Encoder.EnergyPackageEncoder] Send:68681616E4000000000100008D80DB2E2085CADB5FA68FDD664DE43362E2535208A27EBEDEA85484553FB5FABBB96F0177151EF082CB129D09034F2A30FC8DA13BBCF17A486E6E6DB2EBF87FB413415541E82481E1779C7E4F76C83613A5728BC99B93A7E686DAFDF652336CF6EADF64CB2281898E580021E03E72131FB5FB504A83DB3521484023F30DA56FA0CDA5E4891F83B8049B82F547E28B3AFF38205C890AA9E2F93EF4BEAD68780C7FC5F5465A817403307D7854A64BF897DAC2BEA85666BB983048E2677C8AE93392591F12DBCC1F3C43044C363AB9FF823B4641E59793BCAF17ADEEB90E3C1061C70055AA55AA
2022-04-13 11:42:57.0024 [ INFO] [    4] [msl.Cloud.App.IoT.Driver.Energy.MslEnergyPackageHandler] Received:
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <common>
    <building_id>330421J002</building_id>
    <gateway_id>01</gateway_id>
    <type>sequence</type>
  </common>
  <id_validate operation="sequence">
    <sequence>A123456d-1333027671</sequence>
  </id_validate>
</root>
2022-04-13 11:42:57.0434 [ INFO] [    4] [msl.Cloud.App.IoT.Driver.Energy.MslEnergyPackageHandler] Sequence:A123456d-1333027671
2022-04-13 11:42:57.0434 [ INFO] [    4] [msl.Cloud.BizService.GovBuildingEnergyConsumption.Encoder.EnergyPackageEncoder] Send:
<?xml version="1.0" encoding="utf -8" ?>
<root>
  <id_validate operation="md5">
    <md5>2AF48530ABDAFACE0E3D8802F7E33597</md5>
  </id_validate>
  <common>
    <building_id>330421J002</building_id>
    <gateway_id>01</gateway_id>
    <type>md5</type>
  </common>
</root>
2022-04-13 11:42:57.0434 [ INFO] [    4] [msl.Cloud.BizService.GovBuildingEnergyConsumption.Encoder.EnergyPackageEncoder] Send:6868161624010000000200008D80DB2E2085CADB5FA68FDD664DE43362E2535208A27EBEDEA85484553FB5FABBB96F0177151EF082CB129D09034F2A30FC8DA13BBCF17A486E6E6DB2EBF87F7AA0B7EFEA9EF5C53F3C723D6EADE67A66624E5B9299AB0E797A5B9E07073169E7E99CB7F23DD3453FE0958BC23E89BD397B26DD9BC1D4057F5EF4035429B91E294896BAE0411962785C4BD3131E2A25674907B58EB939F0135BF26BBC1103FC4BBC0D7EF887F67B029409E72D2EC7599DC8E231A6FA5680C79B7DF993B58852176337625F269A6C1C10C129A63ACB5461FC0B99E0C3049E4545740DF75993913CC743CD90A1DD603B8FCA617F7B875A5800C7C60526E408D2031DF686ECD1F8C725A23B568F87FBCB09DB929CE4011001D6B07E0FB34FCCE93105BAD57647020DB655AA55AA
2022-04-13 11:42:57.0904 [ INFO] [    5] [msl.Cloud.App.IoT.Driver.Energy.MslEnergyPackageHandler] Received:
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <common>
    <building_id>330421J002</building_id>
    <gateway_id>01</gateway_id >
    <type>result</type>
  </common>
  <id_validate operation="result">
    <result>pass</result>
  </id_validate>
</root>
2022-04-13 11:42:57.0904 [ INFO] [    5] [msl.Cloud.App.IoT.Driver.Energy.MslEnergyPackageHandler] MD5 Check Result:pass
The thread 0x20ec has exited with code 0 (0x0).
2022-04-13 11:43:07.1164 [ INFO] [    5] [msl.Cloud.BizService.GovBuildingEnergyConsumption.Encoder.EnergyPackageEncoder] Send:
<?xml version="1.0" encoding="utf -8" ?>
<root>
  <heart_beat operation="notify" />
  <common>
    <building_id>330421J002</building_id>
    <gateway_id>01</gateway_id>
    <type>notify</type>
  </common>
</root>
2022-04-13 11:43:07.1164 [ INFO] [    5] [msl.Cloud.BizService.GovBuildingEnergyConsumption.Encoder.EnergyPackageEncoder] Send:68681616E4000000000300008D80DB2E2085CADB5FA68FDD664DE43362E2535208A27EBEDEA85484553FB5FABBB96F0177151EF082CB129D09034F2ADA33CEFD9C32C002A1E5D55D3E4B9FACA88CC3EB81730E4D2ECC2D27BAB4E2EA6E7A841A9BD1B64550ADA91FF59E2338E6EB406F56482F037D00BBA52B13CBE1196E81C29FB9D67F17C4E1452183400C2A837BBBBB55D7B23871E97269FEC0FA8440BE238469A3BAF44D3DB91223D518FA1EABB4E4DEB50E15F01418DBC60A890EB0B571B020B34FABB7F415A929B436010E721C3DBA4C0CC913BCD448B7668D4BE69BC29EB244513DDF315FDC1F11EDDA1455AA55AA
2022-04-13 11:43:07.4010 [ INFO] [    5] [msl.Cloud.App.IoT.Driver.Energy.MslEnergyPackageHandler] Received:
<?xml version="1.0" encoding="utf-8"?>
<root><common><building_id>330421J002</building_id><gateway_id>01</gateway_id><type>time</type></common><heart_beat operation="time"><time>20220413114303</time></heart_beat></root>

<?xml version="1.0" encoding="utf -8" ?>
<root>
  <data operation="report">
    <sequence>1649875980</sequence>
    <parse>yes</parse>
    <time>20220413185300</time>
    <meter id="2" name="330421J002040004" conn="conn">
      <function id="1" coding="01000" name="330421J002040004-01" error="192" sample_time="20220413185300">
        90
      </function>
    </meter>
  </data>
  <common>
    <building_id>330421J002</building_id>
    <gateway_id>01</gateway_id>
    <type>report</type>
  </common>
</root>

数据包

{
  root:{
    common:{
      building_id:"",//建筑识别码
      gateway_id:"", //采集装置编号 00~99
      type:"",       //reply;query;report;continuous
    },
    data:{
      operation:"", //reply;report;continuous
      sequence:"",//采集装置向数据中心发送数据的序号
      parse:"", //Yes:采集装置已解析;No:未解析
      time:"",  
      total:"",  //断点续传使用
      current:"",//断点续传使用
      meter:[
        {
          "@id":"",   //仪表序号 @ 标识此项对应 xml 节点的属性
          "@name":"", //采集点识别码          
          "@conn":"", //计量装置诊断信息
          function:[
            {
              "@id":"",    //计量装置的具体采集功能编号
              "@name":"",  //采集点识别码-能耗数据类型编码
              "@coding":"",//检测数据分类/分项编号
              "@error":"", //该功能出现错误的状态码,192标识没有错误
              "@sample_time":"", //采样时间
              "%value":"",       //采样值,xml对应节点值
            }
          ]
        }
      ]
    }
  }
}
 {
    building_id:"",//建筑识别码
    gateway_id:"", //采集装置编号 00~99 
    ip:"",
    port:"",
    aesHexKey:"",
    aesHexVector:"",
    md5Salt:"",    
}
{
  building_id:"",//建筑识别码
  gateway_id:"", //采集装置编号 00~99 
  meters:[
    {
      "id":"",   //仪表序号
      "name":"", //采集点识别码
       functions:[
        {
          "id":"",    //计量装置的具体采集功能编号
          "name":"",  //采集点识别码-能耗数据类型编码
          "coding":"",//检测数据分类/分项编号
          "error":"", //该功能出现错误的状态码,192标识没有错误
          "value":"", //采样值
        }
      ]
    }
  ]
}