发明内容
鉴于此,为了解决现有的系统网络异常存在的充值失败问题,本发明提供了一种分布式智能电表售电方法和系统。
本发明首先提出一种分布式智能电表售电方法,包括以下步骤:
S1、待充值的智能电表通过路由模块连接任意一个售电网络服务器,若连接成功则进入步骤S2,若所有的售电网络服务器均连接不成功则进入步骤S3;
S2、售电网络服务器的共识模块根据待充值的智能电表的公钥生成充值token,待充值智能电表的共识模块获取该售电网络服务器返回的充值token及充值详情;
S3、待充值的智能电表通过路由模块连接其他任意一个智能电表,若连接成功则向其发送获取充值token请求,进入步骤S4,否则本次充值失败结束流程;
S4、连接成功的智能电表的共识模块从其他智能电表处获取待充值智能电表的所有子公钥,然后合成待充值的智能电表的公钥,并根据公钥生成充值token,将充值token及充值详情返回给待充值的智能电表的共识模块;
S5、待充值的智能电表根据上述任意途径获得充值token后,其密钥模块根据私钥对充值token进行解密并执行充值。
进一步的,待充值的智能电表的共识模块判断获取到的充值token是否有效,判断方法包括:根据获得的充值详情和该智能电表的公钥计算token值,将计算的token值与接收到的充值token进行比较,若一致,则该充值token及详情有效,将放入账单模块的缓存池;若不一致,则丢弃。
进一步的,每个智能电表的公钥都被分解为J个子公钥,J个子公钥被随机存放在J个其他智能电表的密钥模块中,与待充值智能电表连接成功的智能电表向其余智能电表发送获取待充值智能电表子公钥的请求,当某个智能电表的共识模块接收到该请求时,若该智能电表的密钥模块中保存有待充值的智能电表的子公钥,则同意该请求;若该智能电表的密钥模块中未保存待充值的智能电表的子公钥,则转发该请求给其他智能电表。
进一步的,待充值的智能电表接收到充值token及充值详情后存放至账单模块的缓存池中;若待充值的智能电表与售电网络服务器连接,则通过路由模块将充值token及充值详情转发给其他售电网络服务器;若待充值的智能电表与某个智能电表连接,则当连接成功的智能电表生成充值toke后,其共识模块会将该充值token进行转发,转发对象为具有待充值智能电表子公钥的其他智能电表,并由账单模块负责记录。
本发明还提出一种分布式智能电表售电系统,包括M个智能电表及N个售电网络服务器,每个智能电表和每个售电网络服务器均包括路由模块、密钥模块、共识模块和账单模块;
所述路由模块根据路由规则,用于实现M个智能电表之间双向通信,智能电表与任意一个售电网络服务器双向通信,以及N个售电网络服务器之间双向通信;
售电网络服务器的密钥模块用于保存所有智能电表的公钥;
智能电表的密钥模块用于保存本智能电表的私钥,以及在网的部分其他智能电表的子公钥,能够对充值token进行解密,并执行充值;
售电网络服务器的共识模块用于接收充值请求,根据公钥生成充值token,并将充值token返回发送到待充值的智能电表;
智能电表的共识模块用于发送或接收充值请求,用于发送或接收子公钥,根据子公钥合成公钥,根据公钥生成充值token,发送或接收充值token,还能对充值token进行验证;
所述账单模块用于记录充值token和充值详情。
进一步的,当智能电表需要访问售电网络服务器时,路由模块对N个售电网络服务器连接地址进行排序,智能电表能够按照排序依次访问售电网络服务器;当智能电表需要访问其它智能电表时,路由模块对其它M-1个智能电表的连接地址进行排序,智能电表按照排序依次访问其它智能电表,或者直接访问指定的其它智能电表。
进一步的,充值详情包括时间戳、电量、表号、随机数、确认状态;所述确认状态需要售电网络服务器确认,当存在有未确认状态的充值token时,所述账单模块会通过路由模块连接售电网络服务器,进行token状态确认,对于未确认状态的token,账单模块全部保存;对于已确认状态的token,账单模块只保存P个。
进一步的,所述账单模块每隔R分钟将缓存池中的S个充值token及详情打包,并将打包信息通过路由模块转发售电网络服务器,打包信息包括信息头和信息内容,信息头包括:时间戳、打包者、信息内容Hash值、保留值,信息内容包括S笔充值token。
进一步的,所述账单模块接收到其它售电网络服务器的充值打包信息后,能够对打包信息中的每一笔充值token进行判定,判定方法包括:将打包信息中每一笔充值token根据token值从本账单模块缓存池中查找对应的充值详情,与打包信息头一起计算打包Hash值,并与接收到的打包信息Hash进行比较,若一致则进行存储;若不一致则丢弃,不进行存储;若接收的打包信息内容中的某一笔充值token未在本账单模块缓存池中查找到,则挂起该打包信息,等待缓存池中存入该笔充值token。
进一步的,所述账单模块的存储方式采用区块链,打包信息头的保留值采用前一个打包信息的Hash值。
本发明的有益效果在于:支持智能电表在网络异常或者远端售电系统无法访问时,也能够正常获取充值token,并成功执行充值;在本发明中智能电表获取的token无法被篡改、伪造且能够保证完整性,售电系统任何时候均可对充值token进行核账分析,确保售电系统的收益;通过本发明,能够在智能电网中,当由于网络异常或者远程售电系统无法访问时,提升用户使用满意度、系统可靠性。
具体实施方式
以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
图1是本发明的系统结构连接图,参照图1,本发明包括M个智能电表及N个售电网络服务器。
一、智能电表
对于智能电表,能够与售电网络服务器双向通信,也能够与其它智能电表双向通信。与传统的智能电表相比,每个智能电表均包括路由模块、密钥模块、共识模块和账单模块。
所述路由模块,能够排序N个售电网络服务器连接地址,当智能电表需要访问远端售电网络服务器时,能够按排序顺序依次访问。N个连接地址能够定期根据售电网络服务器的要求更新。
所述路由模块,能够排序M个其它智能电表连接地址,当本智能电表需要连接其它智能电表时,能够按排序顺序依次访问。M个连接地址能够定期更新。同时,所述路由模块,也能够按指定的其它智能电表连接地址,连接其它智能电表。
所述路由模块,根据路由规则,能够确保在网的所有智能电表能够相互连接,即一个智能电表能够通过另一个智能电表,访问到第三个智能电表。
智能电表的密钥模块,保存有本智能电表的私钥,能够对充值token进行解密,并执行充值。
所述密钥模块,保存有K个其它智能电表的子公钥。智能电表的公钥,能够被分解成为J个子公钥,只有当J个子公钥都获取完整时,才能合成原始的公钥。即是说,密钥模块保存有其它某个智能电表J分之一的公钥。
所述共识模块,当智能电表需要充值时,首先通过路由模块连接售电网络服务器,若一个售电网络服务器连接成功,进而获取其返回的充值token,发给密钥模块进行解密并充值。若N个售电网络服务器统均无法连接成功,则不再请求售电网络服务器获取充值token。
所述共识模块,当智能电表需要充值时,能够通过路由模块连接其它智能电表,当一个其它智能电表连接成功,进而获取该其它智能电表返回的充值token,发给密钥模块进行解密并充值。若M个其它智能电表均无法连接成功,则本次充值请求失败。
所述共识模块,当接收到其它智能电表获取充值token的请求时,尝试获取该其它智能电表的公钥。具体过程是:向M个其它智能电表获取i/J子公钥(i介于1到J之间)。
所述共识模块,当接收到其它智能电表获取充值token的请求时,当验证完成所述其它智能电表的J个子公钥后,合成所述智能电表的公钥,生成其它智能电表的充值token并返回。
所述共识模块,当接收到其它智能电表获取待充值智能电表的子公钥的请求时,若密钥模块保存有待充值智能电表的子公钥,且满足i/J的要求,则返回该子公钥。若密钥模块未保存待充值智能电表的子公钥,或者不满足i/J的要求,则转发该请求给M个其它智能电表,直到M个其它智能电表获取到待充值智能电表的i/J子公钥后,返回该i/J子公钥。
所述共识模块,当生产其它智能电表的充值token后,会将该token转发给i/J子公钥所在的智能电表。
所述账单模块,能够记录共识模块生成的其它智能电表的充值token。
所述账单模块,也能够记录其它智能电表发送的第三智能电表的充值token。
所述账单模块,对记录的智能电表充值token外,还包含有充值详情:时间戳、电量、表号、随机数、确认状态。其中确认状态需要售电网络服务器确认。对于未确认状态的token,账单模块全部保存;对于已确认状态的token,账单模块只保存P个。
所述账单模块,当存在有未确认状态的充值token时,会通过路由模块连接售电网络服务器,进行token状态确认。
二、售电网络服务器
所述售电网络服务器能够与智能电表双向通信,也能够与其它售电网络服务器双向通信。与传统售电网络服务器相比扩展了:路由模块、密钥模块、共识模块、账单模块。
所述路由模块,能够连接所有在网智能电表,并根据优先算法,生成N个售电网络服务器的地址,定期发送给智能电表。优先算法,可采用智能电表与售电网络服务器的连接速度,速度快优先。
所述路由模块,能够排序Q个其它售电网络服务器连接地址,当本售电网络服务器需要连接其它售电网络服务器时,能够按排序顺序依次访问。Q个连接地址能够定期更新。
所述路由模块,根据路由规则,能够确保在网的所有售电网络服务器能够相互连接,即一个售电售电网络服务器能够通过另一个售电网络服务器,访问到第三个售电网络服务器。
所述密钥模块,保存有所有在网智能电表的公钥。
所述共识模块,当智能电表请求充值token时,能够根据该智能电表的公钥,生成充值token返回,充值token及详情放入账单模块缓存池。并通过路由模块转发给Q个其它售电网络服务器。
所述共识模块,当接收到智能电表上报的未确认充值token时,返回确认状态给智能电表,并通过路由模块转发给Q个其它售电网络服务器。
所述共识模块,当接收到其它售电网络服务器转发的充值token时,若是第一次接收到,则转发给Q个其它售电网络服务器;若不是第一次接收到,则不再转发给其它售电网络服务器。
所述共识模块,能够判定接收充值token是否有效,判定规则是根据充值详情和充值token对应的智能电表公钥,计算token值,若与接收的token值一致,则该充值token及详情有效,将放入账单模块缓存池;若计算后不一致,则丢弃,也不会转发给其它售电网络服务器。
所述账单模块,能够每隔R分钟,将缓存池中的S个充值token及详情打包,并将打包信息通过路由模块转发给Q个其它售电网络服务器,进而在网的所有售电网络服务器同步。打包信息包括信息头和信息内容,信息头包括:时间戳、打包者、信息内容Hash值、保留值,信息内容包括S笔充值token。
所述账单模块,接收到其它售电网络服务器的充值打包信息后,能够对打包信息中的每一笔充值token进行判定。判定规则是:将打包信息中每一笔充值token,根据token值从本账单模块缓存池中查找对应的充值详情,与打包信息头一起计算打包Hash值,并与接收到的打包信息Hash进行比较,若一致则进行存储。若不一致则丢弃,不进行存储。若接收的打包信息内容中的某一笔充值token,未在本账单模块缓存池中查找到,则挂起该打包信息,等待缓存池中存入该笔充值token。
所述账单模块,存储方式可以采用区块链,此时打包信息头的保留值采用前一个打包信息的Hash值。
所述账单模块,能够根据在网的售电网络服务器,协商优先打包权的售电系统。若新入网售电系统,或离网售电系统,或超过T分钟,将重新协商优先打包权。优先打包权的一种计算方法,可以给每个售电网络服务器一个信任权值,并根据每个售电网络服务器对在网智能电表的网络连接速度,进行加权计算得到。
所述账单模块,具备核账功能,能够对任意时间段的充值电量,与智能电表实际使用量进行比较,若智能电表实际使用量,大于充值电量,则告警该智能电表,提示售电系统管理员进行核查。
三、售电方法
图2是本发明方法流程图,参照图2,本发明包括如下步骤:
S1、待充值的智能电表通过路由模块连接任意一个售电网络服务器,若连接成功则进入步骤S2,若所有的售电网络服务器均连接不成功则进入步骤S3;
S2、售电网络服务器的共识模块根据待充值的智能电表的公钥生成充值token,待充值智能电表的共识模块获取该售电网络服务器返回的充值token及充值详情;
S3、待充值的智能电表通过路由模块连接其他任意一个智能电表,若连接成功则向其发送获取充值token请求,进入步骤S4,否则本次充值失败结束流程;
S4、连接成功的智能电表的共识模块从其他智能电表处获取待充值智能电表的所有子公钥,然后合成待充值的智能电表的公钥,并根据公钥生成充值token,将充值token及充值详情返回给待充值的智能电表的共识模块;
S5、待充值的智能电表根据上述任意途径获得充值token后,其密钥模块根据私钥对充值token进行解密并执行充值
以上所举实施例,对本发明的目的、技术方案和优点进行了进一步的详细说明,所应理解的是,以上所举实施例仅为本发明的优选实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内对本发明所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。