def protocol_handler(self, datas): need_ASP_response = False need_default_response = False rsp_datas = { 'control': datas['control'], 'seq': datas['seq'], 'addr': datas['addr'], 'cmd': b'\x0B' + datas['cmd'][1:], 'reserve': datas['reserve'], 'data': b'\x81', } if bit_get(datas['control'], 7): self.LOG.debug('ACK msg!') return else: self.LOG.info("recv msg: " + self.convert_to_dictstr(datas)) self.send_msg(self.get_default_response(datas)) self.set_seq(datas['seq']) self.addr = datas['addr'] self.cmd = datas['cmd'] req_cmd_type = datas['cmd'][0:0 + 1] req_cmd_domain = datas['cmd'][1:1 + 2] req_cmd_word = datas['cmd'][3:3 + 2] if datas['cmd'][:1] == b'\x40': if datas['cmd'][1:] == b'\x36\x00\x00\x00': rsp_data = self.get_cmd('Device Announce') if rsp_data: rsp_datas['control'] = datas['control'] rsp_datas['cmd'] = rsp_data['cmd'] rsp_datas['data'] = rsp_data['data'] else: pass elif datas['cmd'][1:] == b'\x05\x00\x00\x00': self.Endpoint = b'\x01' rsp_data = self.get_cmd('Active Endpoint Response') if rsp_data: rsp_datas['cmd'] = rsp_data['cmd'] rsp_datas['data'] = rsp_data['data'] else: pass elif datas['cmd'][1:] == b'\x34\x00\x01\x00': self.sdk_obj.set_work_status(False) rsp_data = self.get_cmd('Leave response') if rsp_data: rsp_datas['cmd'] = rsp_data['cmd'] rsp_datas['data'] = rsp_data['data'] else: pass elif datas['cmd'][1:] == b'\x21\x00\x00\x00': rsp_data = self.get_cmd('Bind response') if rsp_data: rsp_datas['cmd'] = rsp_data['cmd'] rsp_datas['data'] = rsp_data['data'] else: pass else: self.LOG.error( protocol_data_printB(datas['cmd'][1:], title='Unknow cmd:')) elif datas['cmd'][:1] == b'\x41': if datas['cmd'][1:1 + 2] == b'\x06\x00': if datas['cmd'][3:3 + 2] == b'\x01\x00': self.set_item('_Switch', b'\x01') elif datas['cmd'][3:3 + 2] == b'\x00\x00': self.set_item('_Switch', b'\x00') else: self.LOG.error( protocol_data_printB(datas['cmd'][3:3 + 2], title='Unknow cmd:')) else: self.LOG.error( protocol_data_printB(datas['cmd'][1:1 + 2], title='Unknow cmd:')) return elif datas['cmd'][:1] == b'\x00': rsp_data = self.get_cmd('Read attribute response') if rsp_data: if datas['cmd'][1:1 + 2] == b'\x00\x00': rsp_datas['cmd'] = rsp_data[b'\x00\x00']['cmd'] rsp_datas['data'] = rsp_data[b'\x00\x00']['data'] elif datas['cmd'][1:1 + 2] == b'\x06\x00': rsp_datas['cmd'] = rsp_data[b'\x06\x00']['cmd'] rsp_datas['data'] = rsp_data[b'\x06\x00']['data'] else: self.LOG.error("F**k Read attribute response") rsp_datas['cmd'] = rsp_data['default']['cmd'] rsp_datas['data'] = rsp_data['default']['data'] else: pass elif datas['cmd'][:1] == b'\x06': self.sdk_obj.set_work_status(False) rsp_data = self.get_cmd('Configure reporting response') if rsp_data: if datas['cmd'][1:1 + 2] == b'\x06\x00': rsp_datas['cmd'] = rsp_data[b'\x06\x00']['cmd'] rsp_datas['data'] = rsp_data[b'\x06\x00']['data'] else: self.LOG.error("F**k Configure reporting response") rsp_datas['cmd'] = rsp_data['default']['cmd'] rsp_datas['data'] = rsp_data['default']['data'] else: pass else: self.LOG.error("What is the f**k msg?") return self.LOG.yinfo("send msg: " + self.convert_to_dictstr(rsp_datas)) return rsp_datas
def protocol_handler(self, datas): need_ASP_response = False need_default_response = False rsp_datas = { 'control': datas['control'], 'seq': datas['seq'], 'addr': datas['addr'], 'cmd': b'\x0B' + datas['cmd'][1:], 'reserve': datas['reserve'], 'data': b'\x81', } if bit_get(datas['control'], 7): self.LOG.debug('ACK msg!') return else: self.LOG.info("recv msg: " + self.convert_to_dictstr(datas)) self.send_msg(self.get_default_response(datas)) self.set_seq(datas['seq']) self.addr = datas['addr'] self.cmd = datas['cmd'] req_cmd_type = datas['cmd'][0:0 + 1] req_cmd_domain = datas['cmd'][1:1 + 2] req_cmd_word = datas['cmd'][3:3 + 2] if datas['cmd'][:1] == b'\x40': if datas['cmd'][1:] == b'\x36\x00\x00\x00': rsp_data = self.get_cmd('Device Announce') if rsp_data: rsp_datas['control'] = datas['control'] rsp_datas['cmd'] = rsp_data['cmd'] rsp_datas['data'] = rsp_data['data'] else: pass elif datas['cmd'][1:] == b'\x05\x00\x00\x00': self.Endpoint = b'\x01' rsp_data = self.get_cmd('Active Endpoint Response') #self.set_item('Short_id', datas['data']) if rsp_data: rsp_datas['cmd'] = rsp_data['cmd'] rsp_datas['data'] = rsp_data['data'] else: pass elif datas['cmd'][1:] == b'\x34\x00\x01\x00': self.sdk_obj.set_work_status(False) rsp_data = self.get_cmd('Leave response') if rsp_data: rsp_datas['cmd'] = rsp_data['cmd'] rsp_datas['data'] = rsp_data['data'] else: pass elif datas['cmd'][1:] == b'\x21\x00\x00\x00': #self.set_item('mac', datas['data'][0:0 + 8]) #self.set_item('endpoint', datas['data'][8:8 + 1]) #self.set_item('Short_id', datas['data'][9:9 + 2]) rsp_data = self.get_cmd('Bind response') if rsp_data: rsp_datas['cmd'] = rsp_data['cmd'] rsp_datas['data'] = rsp_data['data'] else: pass else: self.LOG.error( protocol_data_printB(datas['cmd'][1:], title='Unknow cmd:')) elif datas['cmd'][:1] == b'\x41': if datas['cmd'][1:1 + 2] == b'\x06\x00': if datas['cmd'][3:3 + 2] == b'\x00\x00': self.set_item('_Switch', b'\x00') elif datas['cmd'][3:3 + 2] == b'\x01\x00': self.set_item('_Switch', b'\x01') else: self.set_item('_Switch', b'\x02') elif datas['cmd'][1:1 + 2] == b'\x00\x03': if datas['cmd'][3:3 + 2] == b'\x06\x00': self.set_item('_Hue', datas['data'][0:0 + 1]) self.set_item('Saturation', datas['data'][1:1 + 1]) elif datas['cmd'][3:3 + 2] == b'\x07\x00': self.set_item('_Color_X', datas['data'][0:0 + 2]) self.set_item('_Color_Y', datas['data'][2:2 + 2]) elif datas['cmd'][3:3 + 2] == b'\x0a\x00': self.set_item('_Color_Temperature', datas['data'][0:0 + 2]) else: self.LOG.error( protocol_data_printB(datas['cmd'][3:3 + 2], title='Unknow cmd:')) elif datas['cmd'][1:1 + 2] == b'\x08\x00': self.set_item('_Level', datas['data'][0:0 + 1]) elif datas['cmd'][1:1 + 2] == b'\x02\x01': if datas['cmd'][3:3 + 2] == b'\x00\x00': self.set_item('_Window_covering', datas['cmd'][3:3 + 2]) elif datas['cmd'][3:3 + 2] == b'\x01\x00': self.set_item('_Window_covering', datas['cmd'][3:3 + 2]) elif datas['cmd'][3:3 + 2] == b'\x02\x00': self.set_item('_Window_covering', datas['cmd'][3:3 + 2]) elif datas['cmd'][3:3 + 2] == b'\x05\x00': self.set_item('_Window_covering', datas['cmd'][3:3 + 2]) self.set_item('Percentage_Lift_Value', datas['data'][0:0 + 1]) else: self.LOG.error( protocol_data_printB(datas['cmd'][3:3 + 2], title='Unknow cmd:')) else: self.LOG.error( protocol_data_printB(datas['cmd'][1:1 + 2], title='Unknow cmd:')) return elif datas['cmd'][:1] == b'\x00': rsp_data = self.get_cmd('Read attribute response') if rsp_data: if datas['cmd'][1:1 + 2] == b'\x00\x00': rsp_datas['cmd'] = rsp_data[b'\x00\x00']['cmd'] rsp_datas['data'] = rsp_data[b'\x00\x00']['data'] elif datas['cmd'][1:1 + 2] == b'\x06\x00': rsp_datas['cmd'] = rsp_data[b'\x06\x00']['cmd'] rsp_datas['data'] = rsp_data[b'\x06\x00']['data'] elif datas['cmd'][1:1 + 2] == b'\x08\x00': rsp_datas['cmd'] = rsp_data[b'\x08\x00']['cmd'] rsp_datas['data'] = rsp_data[b'\x08\x00']['data'] #add by -zx for cmd:00 00 03 03 00 and 00 00 03 04 00 elif datas['cmd'][1:1 + 2] == b'\x00\x03': rsp_datas['cmd'] = rsp_data[b'\x00\x03']['cmd'] rsp_datas['data'] = rsp_data[b'\x00\x03']['data'] else: self.LOG.error("F**k Read attribute response") rsp_datas['cmd'] = rsp_data['default']['cmd'] rsp_datas['data'] = rsp_data['default']['data'] else: pass elif datas['cmd'][:1] == b'\x06': self.sdk_obj.set_work_status(False) rsp_data = self.get_cmd('Configure reporting response') if rsp_data: if datas['cmd'][1:1 + 2] == b'\x06\x00': rsp_datas['cmd'] = rsp_data[b'\x06\x00']['cmd'] rsp_datas['data'] = rsp_data[b'\x06\x00']['data'] elif datas['cmd'][1:1 + 2] == b'\x08\x00': rsp_datas['cmd'] = rsp_data[b'\x08\x00']['cmd'] rsp_datas['data'] = rsp_data[b'\x08\x00']['data'] elif datas['cmd'][1:1 + 2] == b'\x00\x03': rsp_datas['cmd'] = rsp_data[b'\x00\x03']['cmd'] rsp_datas['data'] = rsp_data[b'\x00\x03']['data'] else: rsp_datas['cmd'] = rsp_data['default']['cmd'] rsp_datas['data'] = rsp_data['default']['data'] else: pass else: self.LOG.error("What is the f**k msg?") return self.LOG.yinfo("send msg: " + self.convert_to_dictstr(rsp_datas)) return rsp_datas