一种家庭电力参数传输通道的设计
扫描二维码
随时随地手机看文章
引 言
随着 2013年我国《中国电力大数据发展白皮书》的发布 [1], 标志着我国正式将大数据纳入国家战略,并由此进入大数据时代。电力大数据旨在通过获取用户的日常电力数据,使用数据分析与数据挖掘算法分析用户的用电习惯与用电规律,对电力系统的状态进行有效评估与预测,为电力系统决策提供依据 [2]。
电力大数据的基础是通过智能电网及相关技术获取的普通用户的基本电力参数。为方便普通家庭获取本地电力数据, 为家庭能量管理系统的实现与应用打下基础,此举对于设计便捷、实用、智能的家庭电力参数传输通道具有现实意义[3]。
1 基本平台的搭建
为了对传输通道进行测试与试验,首先需要搭建基本平台,其基本功能是获取本地电力参数,并将电力参数传输到远程公有云后台系统(后简称远程系统)中进行存储。本地获取电力参数的方式有很多,如通过智能插座获取单个电器的使用情况,通过各类采集模块对电力参数进行测量,通过智能电表及其对应的DL/T645-2007 通讯规约协议读取本地电力数据。现选用智能电表进行电力参数获取,原因如下:
(1) 市面上常见的智能插座常使用手机软件进行控制, 主要用于普通用户对个别电器用电计划的控制,对于嵌入式系统的支持相对较弱。使用蓝牙开发则开发成本相对较高。
(2) 虽然各类采集模块采集到的数据比较精确,但其管理系统复杂、成本较高,对普通家庭的侵入性非常高,因此不适用于普通家庭。
(3) 智能电表随着智能电网的发展,在普通家庭中的普及度非常高,且数据读取过程十分方便,普通嵌入式系统即可满足需求,开发成本低。
通过智能电表获取电力参数后,需要对无线传输方式进行选择。考虑到普通家庭中路由器的普及程度高,因此选用WiFi 作为数据传输方式,将本地电力参数发送到远程系统中。远程系统与本地嵌入式系统(后简称本地系统)建立长连接, 读取本地系统发送的数据并解析后存入数据库中,作为电力大数据应用的原始数据。
现选用DDZY791 型单相费控电能表,通过RS 485 总线与以STM32F1 为核心的嵌入式系统搭建有线连接,定时读取数据,之后通过ATK-ESP8266 WiFi 模块与本地路由器连接, 建立与部署在腾讯云的后台系统的长连接,实现数据交互。为了更好的对本地系统的异常情况进行响应、提高后台系统的性能,后台系统使用基于Java NIO 的Netty 框架实现[4]。
2 传输策略的制定
2.1 传输过程中存在的问题
详细考虑基本功能平台在实际使用时遇到的问题是制定传输策略的基础,但可能存在如下问题:
(1) WiFi传输的安全性相对较低,因此,在远程系统的传输通道搭建完成之后与正式进行数据传输之前,远程系统应对数据传输的对象进行身份验证。
(2) 虽然 ATK-ESP8266WiFi模块与远程系统的 Java Socket 接口中都已经对 TCP进行了封装, 且两者间建立了TCP长连接,但此举并不能保证双方接收的数据都是合法数据。有两种情况需要考虑,即远程系统作为互联网开放的端口, 会不断被各类网络爬虫扫描,接收到各类HTTP数据;无论是本地系统还是远程系统,都可能遭遇网络拥堵的情况,收到不完整的数据或多条数据。
(3) 在传输过程中可能存在一方非正常断线,因此另一方需及时响应、释放相应资源、提示用户。此外,一方非正常断线时,可能导致重要指令丢失的情况出现。
2.2 身份验证策略制定
在传输过程中,仅需令远程系统对本地系统进行身份鉴别,无需嵌入式系统对远程系统进行身份验证。因此可以使用单项认证协议来制定用户身份验证策略[5]。身份验证策略主要过程如下:
(1) 本地系统与远程系统共享一个由随机字符组成的密钥。
(2) 本地系统记录某一个时间点,并使用密钥对时间点信息、用户信息进行单向散列算法,得到验证码。
(3) 本地系统将记录的时间点、用户信息、验证码发送到远程系统。
(4) 远程系统根据相同单向散列算法,使用密钥对时间点、用户信息加密,查看加密结果是否与收到的验证码信息相同。
(5) 若两个加密结果相同,则用户验证成功;若加密结果不同,则用户验证失败,将结果返还本地系统。
2.3 非法数据应对策略制定
根据以上分析,非法数据的类型有完全非法数据(如网络爬虫数据)、不完整的合法数据(网络阻塞时可能发生)与多条完整的合法数据(网络阻塞时可能发生)。非法指令可以通过指令格式的制定轻易辨别,因此无需过多介绍。接收到不完整与多条完整数据则是Socket 编程中常见的问题。此类问题的主要解决方案如下:
(1) 创建接收数据缓存,在每次获取数据后,先将数据与缓存中的剩余数据进行拼接,从前向后进行指令解析;
(2) 获得第一条正常指令的起始位置后,丢弃起始位置前的数据;
(3) 当缓存中的剩余数据不能作为一条完整指令时则停止解析,并将剩余指令保存在缓存中,等待与后续接收到的数据进行拼接。
2.4 非正常断线应对策略制定
非正常断线带来的主要问题在于若一方断线后,另一方没有及时响应,那么另一方将可能不断地传输数据,浪费资源, 甚至导致指令丢失。可采用心跳包进行定期验证方法解决该问题,其具体过程如下:
(1) 两方相互定时向对方发送心跳包数据。
(2) 如果其中一方在一段时间内没有接收到来自对方的心跳包,那么表明两者间的通信断开或本地系统所在的网络断开,抑或是远程系统的服务器宕机。
(3) 若没有接收到对方数据,则本地系统应定时尝试与远程系统连接。远程系统则释放本地系统的资源,等待对方再次建立连接。
本系统特有的情况是,本地系统自身要定时向远程系统发送本地电力参数,故该指令可作为心跳包使用。但远程系统没有类似功能,因此应设计心跳包,定期向本地系统发送数据。
在非正常断线中,还存在一些极限情况,即本地管理系统由于网络波动重启,但重启之后又再次成功连接到远程服务器 ;在本地管理系统重启期间,远程系统向本地系统发送了指令,但本地系统并未接收,导致指令丢失。对于指令丢失问题,可借鉴 TCP 连接中的响应机制与超时重传机制,即接收方在成功接收后应返回一条响应指令给发送方,表明已收到指令;若数据发送方在一定时间内没收到指令,则应重传。
3 传输指令的设计
3.1 指令类型
根据上文提出的问题,指令类型可以分为以下几类:
(1) 普通数据传输指令(DATA):该指令用于传输数据, 若丢失对系统运行没有影响,则接收方无需返回响应。
(2) 请求指令(REQ):该指令用于请求获取对方某参数。
(3) 控制指令(CTRL):用于发送方请求接收方的某项数据,或改变接收方的运行状态。这类指令对系统的运行有很大影响,接收方成功接收后,需要返回响应指令。
(4) 响应指令(RESP):用于响应控制、请求指令。
3.2 指令格式
为了减少开发人员的学习成本,简化指令,本次设计使用基于字符的指令。指令的起始与结束都有一个换行符。指令的基本格式包括 2 个部分,每部分通过空格分割。指令基本格式如图 1 所示。
指令类型包括图 1指令基本格式 DATA,REQ,CTRL与RESP。参数类型用于说明需要传输、控制、响应的参数类型。
若本地系统向远程系统传输的当前电压为 220.2,则指令(省略首尾换行符)为DATA VOLTAGE 220.2。若远程系统向本地系统请求获取当前电能表示数,则指令为(省略首尾换行符)REQ ENERGY。本地电能表示数为1523.63 kW · h,则响应指令为(省略首尾换行符)RESP ENERGY 1523.63。
4 测试方法
4.1 身份验证测试
假设本地系统与远程系统共享的密钥为key,则使用本地系统电表的电表号作为用户id(假设本次测试使用的电表号为123456789),记录系统当前时间(假设记录为 201612211530),将以上三个字符串拼接成一个字符串,使用空格分割。将拼接完成的字符串使用 32 位 MD5 算法编码,结果为 1DF8DEB 20161C8045F3667A8B95F44FA。编码完成后,本地系统向远程系统发送身份验证 CTRL 请求,参数类型为IDENTITY,参数内容为 123456789+201612211530+1DF8DEB20161C8045F36 67A8B95F44FA。
远程系统获取该指令后,通过 + 对数据内容进行分割, 获取用户id 与时间戳,并根据本地存储的密钥,重新构建信息字符串,并进行MD5 编码,查看结果是否与获取的编码结果相同,若相同则返回指令RESP IDENTITY SUCCESS。本地收到确认数据后开始传输本地电力参数。
4.2 非法数据测试
(1) 分别对远程系统与本地系统进行编程,创建数据接收缓存。每次接收到数据后就与原有数据进行拼接,将拼接完成的数据通过换行符进行分割。依次对每行数据通过空格进行分割,查询分割结果是否与上述指令格式相符,若不符合则抛弃。若最后一行数据不以换行符结束,则将数据保存在接收缓存中,等待下一次数据接收。
(2) 对远程系统的测试可以通过JavaSocket模拟本地系统来传输数据与异常指令。远程系统在日志中打印所有正常指令,接收完所有数据后查看日志,比对是否与期望的指令相同。
(3) 对本地系统的测试,可以令远程系统发送各类异常指令,并通过串口将解析完成的数据传送至电脑或液晶屏上显示,查看解析完成的数据是否与期望相符。
4.3 非正常断测试
对于模拟远程系统的宕机,可以通过强行关闭服务器或关闭远程系统后台程序进程来实现。进行相关操作后,查看本地系统是否进行重启即可测试本地系统的工作情况。
可通过断开本地嵌入式系统电源来模拟本地系统连接断开。关闭电源后,可通过查看远程系统当前保持的长连接数量来判断是否释放了相应资源。
5 结 语
目前,电力大数据还处于起步阶段,各类相关技术与应用还不成熟。本文为给电力大数据提供第一手数据,将电力大数据带入普通家庭而提出了一种考虑家庭实际的电力参数传输通道,经测试,能实时获取数据,并能应对常见异常情况。