# 能耗数据上传服务 ## 功能说明 本服务用于实现能耗数据上传功能,通过TCP协议与能耗监管系统进行通信,按照XML数据通讯协议规范进行数据传输。 ## 主要功能 1. **TCP连接管理**:建立和维护与能耗监管系统的TCP连接 2. **身份认证**:使用MD5算法进行身份验证 3. **数据加密**:使用AES加密算法对能耗数据进行加密传输 4. **定时推送**:每10分钟自动生成并推送能耗数据XML报文 5. **心跳机制**:定期发送心跳包保持连接 ## 配置说明 ### 应用配置(application-dev.yml) 在Nacos配置中心或本地配置文件中添加以下配置: ```yaml # 能耗服务配置 energy: # 服务端配置 server: host: 183.192.66.5 port: 9006 # 认证配置 auth: key: 529f3d2bf15d4d5d # 128bit密钥 # 建筑信息 building: id: PT310107BZ4054 # 网关配置(多个网关用逗号分隔) gateway: ids: gateway1,gateway2 # 定时任务配置 push: cron: "0 */10 * * * ?" # 每10分钟执行一次 # TDengine配置 tdengine: enabled: true url: jdbc:TAOS://localhost:6030/ user: root password: taosdata super-table: super_715_332 ``` ### 数据库配置 服务需要访问MySQL数据库查询设备信息,配置在Nacos配置中心的共享配置中。 ## 使用说明 ### 1. 网关配置 在配置文件中设置要推送数据的网关ID列表,多个网关用逗号分隔: ```yaml energy: gateway: ids: gateway1,gateway2 ``` ### 2. 启动服务 启动服务后,定时任务会自动执行,每10分钟为每个配置的网关生成并推送XML报文。 ### 3. 手动推送 也可以通过API接口手动触发推送: ```java @Autowired private EnergyDataService energyDataService; // 推送指定网关的数据 energyDataService.generateAndPushEnergyData("gatewayId"); ``` ## 数据流程 1. 根据网关ID查询网关设备信息(`dmp_device`表,`category_type=2`) 2. 根据网关UUID查询所有子设备(`dmp_device`表,`gateway_uuid`匹配,`category_type=3`) 3. 从TDengine时序数据库查询每个设备的最新数据(`super_715_332`超级表) 4. 构建XML报文(包含分项数据和仪表数据) 5. 建立TCP连接并进行身份认证 6. 使用AES加密XML数据 7. 发送加密后的数据包 8. 接收服务端响应 ## 协议说明 ### 网络层数据包格式 - Head: 2字节,固定值0x1F1F - Type: 1字节,消息类型(0x01=身份认证,0x02=心跳,0x03=能耗数据) - Length: 4字节,Data长度(网络字节序) - Data: 变长,XML数据(UTF-8编码,能耗数据需AES加密) ### 身份认证流程 1. 客户端发送身份认证请求 2. 服务端返回随机序列 3. 客户端计算MD5(密钥+随机序列)并发送 4. 服务端验证MD5并返回认证结果 ### 数据加密 - 算法:AES - 模式:CBC - 填充:PKCS7/PKCS5 - 密钥:128bit,与认证密钥相同 - 向量:与密钥相同 ## 注意事项 1. 确保TDengine数据源配置正确 2. 确保网关ID在数据库中存在且为网关设备(`category_type=2`) 3. 确保网关下有电表子设备(`category_type=3`) 4. 确保TDengine超级表中存在对应设备的数据 5. 网络连接异常时会自动重连