利用Python简单实现环保212协议数据解码为字典结果【HJ212_2017协议的拆包解码】

1、直接上代码

#!/usr/bin/python3

def decode(data):
    DIC_DATA={
     }
    DIC_DATA['HEAD']=data[0:2]
    DIC_DATA['LENGTH']=data[2:6]
    DIC_DATA['CRC']=data[-6:-2]
    
    DIC_DATA['DATA']={
     }
    DIC_DATA['DATA']['CP']={
     }    
    
    _d0=data[6:-6].split('&&')
    
    _d1=_d0[0][0:-4].split(';')    
    for _d2 in _d1:
        _d3=_d2.split('=')        
        DIC_DATA['DATA'][_d3[0]]=_d3[1]   

    _d4=_d0[1].split(';')
    for _d5 in _d4:
        _d6=_d5.split('=')        
        DIC_DATA['DATA']['CP'][_d6[0]]=_d6[1]

    _data=STR_HJ212_2017[6:-4]    

    if(int(DIC_HJ212_2017['LENGTH'])==len(_data)):
    	print('数据长度验证通过')

    else:
    	print('数据长度验证未通过')  


    if(DIC_HJ212_2017['CRC']==str(crc16(_data)).zfill(4).upper()):
        print('CRC校验通过')  
    else:
        print('CRC校验未通过') 

    #print(DIC_DATA)  调试输出 结构为双层字典,类似JAVA对象  
    return DIC_DATA


#自我测试    
if __name__ == "__main__":
    data='##0343QN=20200826094652892;ST=22;CN=2011;PW=852013;MN=010000A8900016F000169DC0;Flag=4;CP=&&DataTime=20200826094652;A1001-Rtd=65436;A1001-Rtd=65336;A1001-Rtd=65236;A1001-Rtd=28926;A1001-Rtd=3326;A1001-Rtd=8000;A1001-Rtd=8000;A1001-Rtd=8000;A1001-Rtd=8000;A1001-Rtd=8000;A1001-Rtd=16415;A1001-Rtd=16415;A1001-Rtd=16415;A1001-Rtd=16415;A1001-Rtd=3326&&A441\r\n'
    print('时间='+decode(data)['DATA']['CP']['DataTime'])
    print('数据='+decode(data)['DATA']['CP']['A1001-Rtd'])

2、运行调试

解码出的字典,结构类似JAVA对象,按结构取值即可
利用Python简单实现环保212协议数据解码为字典结果【HJ212_2017协议的拆包解码】_第1张图片
利用Python简单实现环保212协议数据解码为字典结果【HJ212_2017协议的拆包解码】_第2张图片

你可能感兴趣的:(HJ212-2017,环保212协议,python,网络协议)