def send_once(self): try: for client in self.conn_to_addr: if self.clients[self.conn_to_addr[client]]['queue_out'].empty(): pass else: data = self.clients[self.conn_to_addr[client] ]['queue_out'].get() if isinstance(data, type(b'')): tmp_data = data else: tmp_data = data.encode('utf-8') if self.debug: if self.printB: self.LOG.yinfo(protocol_data_printB( tmp_data, title="Send data to " + self.conn_to_addr[client][0] + ":")) else: self.LOG.yinfo( "Send data to " + self.conn_to_addr[client][0] + ": " + tmp_data.decode('utf-8')) client.send(tmp_data) except Exception as e: self.LOG.error( self.conn_to_addr[client][0] + ' closed! [%s]' % (str(e))) self.clients[self.conn_to_addr[client]]['conn'].close() self.inputs.remove(client) del self.clients[self.conn_to_addr[client]] del self.conn_to_addr[client]
def recv_once(self, timeout=None): try: if not self.get_connected(): return data = '' readable, writable, exceptional = select.select( self.inputs, [], [], timeout) # When timeout reached , select return three empty lists if not (readable): pass else: data = self.client.recv(BUFF_SIZE) if data: if isinstance(data, type(b'')): tmp_data = data else: tmp_data = data.encode('utf-8') self.LOG.debug(protocol_data_printB( tmp_data, title="client get data:")) else: self.LOG.error("Server maybe has closed!") self.client.close() self.inputs.remove(self.client) self.set_connected(False) return data except socket.error: self.LOG.error("socket error, don't know why.") self.client.close() self.inputs.remove(self.client) self.set_connected(False)
def send_once(self, data=None): try: if not self.get_connected(): return if isinstance(data, type(b'')): tmp_data = data else: tmp_data = data.encode('utf-8') if self.debug: if self.printB: self.LOG.yinfo(protocol_data_printB( tmp_data, title="client send date:")) else: self.LOG.yinfo("client send data: %s" % (tmp_data.decode('utf-8'))) self.client.send(tmp_data) except Exception as e: self.LOG.error( "send data fail, Server maybe has closed![%s]" % (str(e))) self.client.close() self.inputs.remove(self.client) self.set_connected(False)
def convert_to_dictstr(self, src): ret_str = '' ret_str += '\n{\n' for item in src: ret_str += protocol_data_printB(src[item], title=" %s," % (item)) ret_str += '\n' ret_str += '}' return ret_str
def data_received(self, data): self.queue_in.put_nowait(data) self.LOG.debug(protocol_data_printB(data, title="client get data:")) command = self.get_cmd_from_pkt(data) self.LOG.debug("RECV_CMD:{}".format(command)) if command and b'"Result":' in data: # 收到的带有回复的才去计算时延,否则计算时延无意义 self.init_msgst_dict(command) self.msgst[command]['time_info'].recv_update() self.LOG.debug("RECV:{}".format(data.__repr__()))
async def send_data_once(self, data=b''): if data: self.queue_out.put_nowait(data) if self.queue_out.empty(): pass else: data = await self.queue_out.get() self.transport.write(data) self.LOG.info(protocol_data_printB(data, title="client send data:")) self.LOG.info(repr(data))
def protocol_handler(self, msg): ack = False if msg[0:4] == self.prefixHead: #目前貌似木有ACK ack = False self.LOG.info("recv msg: " + common_APIs.protocol_data_printB(msg)) rsp_msg: MessageType = self.sim_obj.protocol_handler(msg, ack) if rsp_msg: final_rsp_msg = self.msg_build( rsp_msg) #rsp_msg.buildRspMessage() else: final_rsp_msg = 'No_need_send' return final_rsp_msg else: self.LOG.warn('Unknow msg: %s!' % (msg)) return "No_need_send"
async def send_data_loop(self): while self.getStopConition() == False: if self.queue_out.empty(): pass else: data = await self.queue_out.get() command = self.get_cmd_from_pkt(data) self.LOG.debug("SEND_CMD:{}".format(command)) if command and b'"Result":' not in data: # 发送ACK包的时候不需要计算时延,也不需要重置发送时间 self.init_msgst_dict(command) self.msgst[command]['time_info'].send_update() # print("send:{}".format(data)) self.transport.write(data) self.LOG.debug(protocol_data_printB(data, title="client send data:")) self.LOG.debug("SEND:{}".format(repr(data))) await asyncio.sleep(self.procInv)
def schedule_loop(self): while self.need_stop == False: if self.queue_in.empty(): continue else: ori_data = self.left_data + self.queue_in.get() while len(ori_data) < self.min_length: ori_data += self.queue_in.get() data_list, self.left_data = self.protocol_data_washer(ori_data) if data_list: for request_msg in data_list: response_msg = self.protocol_handler(request_msg) if response_msg == 'No_need_send': pass elif response_msg: self.queue_out.put(response_msg) else: self.LOG.error(protocol_data_printB( request_msg, title='%s: got invalid data:' % (self.name))) else: continue
async def schedule(self): if self.queue_in.empty(): pass else: ori_data = self.left_data + self.queue_in.get_nowait() while len(ori_data) < self.min_length: ori_data += self.queue_in.get_nowait() data_list, self.left_data = self.protocol_data_washer(ori_data) if data_list: for request_msg in data_list: response_msg = self.protocol_handler(request_msg) if response_msg == 'No_need_send': pass elif response_msg: self.queue_out.put_nowait(response_msg) else: self.LOG.error( protocol_data_printB( request_msg, title='%s: got invalid data:' % (self.name))) else: self.LOG.warn('whwer is go?') pass
async def schedule(self): while self.getStopConition() == False: if self.queue_in.empty(): pass else: ori_data = self.left_data + self.queue_in.get_nowait() while len(ori_data) < self.min_length: ori_data += self.queue_in.get_nowait() data_list, self.left_data = self.protocol_data_washer(ori_data) if data_list: for request_msg in data_list: # print("rsv:{}".format(request_msg)) # self.LOG.info("rsv:{}".format(request_msg)) response_msg = self.protocol_handler(request_msg) if response_msg == 'No_need_send': pass elif response_msg: self.queue_out.put_nowait(response_msg) else: self.LOG.error(protocol_data_printB( request_msg, title='%s: got invalid data:' % (self.name))) else: self.LOG.warn('whwer is go?') await asyncio.sleep(self.procInv)
def run_forever(self, *arg): BUFF_SIZE = 1024 timeout = 1 try: while True: self.LOG.debug( "Waiting for next event, now has active clients: %d" % (len(self.clients))) readable, writable, exceptional = select.select( self.inputs, [], [], timeout) for conn in readable: if conn == self.server: try: connection, client_address = self.server.accept() connection.setblocking(0) self.LOG.info( "Get connection from: " + client_address[0]) self.clients[client_address] = { 'conn': connection, 'queue_in': Queue.Queue(), 'queue_out': Queue.Queue(), } self.inputs.append(connection) self.conn_to_addr[connection] = client_address except Exception as e: self.LOG.error("Get connection %s falied![%s]" % ( client_address[0], e)) pass else: try: data = conn.recv(BUFF_SIZE) if data: self.clients[self.conn_to_addr[conn] ]['queue_in'].put(data) dmsg = b'\x48\x44\x58\x4d\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x30\x01\x00\x00\x00\x01\x00\x00\x00\x29\x00\x00\x8f\x20\x7b\x22\x52\x65\x73\x75\x6c\x74\x22\x3a\x30\x2c\x22\x43\x6f\x6d\x6d\x61\x6e\x64\x22\x3a\x22\x43\x4f\x4d\x5f\x44\x45\x56\x5f\x52\x45\x47\x49\x53\x54\x45\x52\x22\x7d' self.clients[self.conn_to_addr[conn] ]['queue_out'].put(dmsg) if isinstance(data, type(b'')): tmp_data = data else: tmp_data = data.encode('utf-8') self.LOG.info(protocol_data_printB( tmp_data, title="Get data from " + self.conn_to_addr[conn][0] + ":")) else: # Interpret empty result as closed connection self.LOG.error( self.conn_to_addr[conn][0] + ' closed!') self.clients[self.conn_to_addr[conn] ]['conn'].close() self.inputs.remove(conn) del self.clients[self.conn_to_addr[conn]] del self.conn_to_addr[conn] except socket.error: self.LOG.error("Get data from %s falied!" % (self.conn_to_addr[conn][0])) self.clients[self.conn_to_addr[conn] ]['conn'].close() self.inputs.remove(conn) del self.clients[self.conn_to_addr[conn]] del self.conn_to_addr[conn] if self.singlethread: self.send_once() except KeyboardInterrupt: self.LOG.info( 'KeyboardInterrupt, now to close all clinets and server!') for client in self.clients: self.clients[client]['conn'].close() self.server.close() except Exception as e: self.LOG.error(str(e)) for client in self.clients: self.clients[client]['conn'].close() self.server.close() finally: self.LOG.info("socket server end!") sys.exit(0)
def recv_data(self): datas = self.connection.readall() if datas: self.LOG.info( protocol_data_printB(datas, title=self.port + " recv data:")) return datas
def send_data(self, data): self.LOG.yinfo( protocol_data_printB(data, title=self.port + " send data:")) return self.connection.write(data)
def protocol_handler(self, msg): # 查询 if msg[10:12] == b'\x4d\x01': self.LOG.debug("查询命令".decode('utf-8').encode( sys.getfilesystemencoding())) # too much such msg, ignore it return self.msg_build() pass # 开机 elif msg[10:12] == b'\x4d\x02': self.LOG.warn("开机".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_set_bit(0) return self.msg_build() # 关机 elif msg[10:12] == b'\x4d\x03': self.LOG.warn("关机".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_clear_bit(0) return self.msg_build() # 电加热 无 elif msg[10:12] == b'\x4d\x04': self.LOG.warn("电加热 无".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_clear_bit(1) return self.msg_build() # 电加热 有 elif msg[10:12] == b'\x4d\x05': self.LOG.warn("电加热 有".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_set_bit(1) return self.msg_build() # 健康 无 elif msg[10:12] == b'\x4d\x08': self.LOG.warn("健康 无".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_clear_bit(3) return self.msg_build() # 健康 有 elif msg[10:12] == b'\x4d\x09': self.LOG.warn("健康 有".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_set_bit(3) return self.msg_build() # 设定温度 elif msg[10:12] == b'\x5d\x01': self.TEMP_set(msg[12:14], ifprint=1) return self.msg_build() # 电子锁 无 elif msg[10:12] == b'\x4d\x18': self.LOG.warn("电子锁 无".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_clear_bit(15) return self.msg_build() # 电子锁 有 elif msg[10:12] == b'\x4d\x19': self.LOG.warn("电子锁 有".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_set_bit(15) return self.msg_build() # 换新风 无 elif msg[10:12] == b'\x4d\x1e': self.LOG.warn("换新风 无".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDB_clear_bit(0) return self.msg_build() # 换新风 有 elif msg[10:12] == b'\x4d\x1f': self.LOG.warn("换新风 有".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDB_set_bit(0) return self.msg_build() # 加湿 无 elif msg[10:12] == b'\x4d\x1c': self.LOG.warn("加湿 无".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_clear_bit(6) return self.msg_build() # 加湿 有 elif msg[10:12] == b'\x4d\x1d': self.LOG.warn("加湿 有".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_set_bit(6) return self.msg_build() # 上下摆风 elif msg[10:12] == b'\x4d\x22': if msg[12:14] == b'\x00\x01': self.LOG.warn("上下摆风 有".decode('utf-8').encode( sys.getfilesystemencoding())) else: self.LOG.warn("上下摆风 无".decode('utf-8').encode( sys.getfilesystemencoding())) self.SOLLDH_set(UD_data=msg[12:14]) return self.msg_build() # 左右摆风 elif msg[10:12] == b'\x4d\x23': if msg[12:14] == b'\x00\x01': self.LOG.warn("左右摆风 有".decode('utf-8').encode( sys.getfilesystemencoding())) else: self.LOG.warn("左右摆风 无".decode('utf-8').encode( sys.getfilesystemencoding())) self.SOLLDH_set(LR_data=msg[12:14]) return self.msg_build() # 上下左右摆风 elif msg[10:12] == b'\x4d\x24': if msg[12:14] == b'\x00\x01': self.LOG.warn("全摆风 有".decode('utf-8').encode( sys.getfilesystemencoding())) else: self.LOG.warn("全摆风 无".decode('utf-8').encode( sys.getfilesystemencoding())) self.SOLLDH_set(UD_data=msg[12:14], LR_data=msg[12:14]) return self.msg_build() # 自清洁 无 # elif msg[10:12] == b'\x4d\x1c': # self.LOG.warn("自清洁 无".decode('utf-8').encode(sys.getfilesystemencoding())) # self.WORDA_clear_bit(6) # return self.msg_build() # 自清洁 有 elif msg[10:12] == b'\x4d\x26': self.LOG.warn("自清洁 有".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_set_bit(2) return self.msg_build() # 感人功能 无 elif msg[10:12] == b'\x4d\x28': self.LOG.warn("感人功能 无".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_clear_bit(12) return self.msg_build() # 感人功能 有 elif msg[10:12] == b'\x4d\x27': self.LOG.warn("感人功能 有".decode('utf-8').encode( sys.getfilesystemencoding())) self.WORDA_set_bit(12) return self.msg_build() # 风速 elif msg[10:12] == b'\x5d\x07': self.WIND_set(msg[12:14], ifprint=1) return self.msg_build() # 模式 elif msg[10:12] == b'\x5d\x08': self.MODE_set(msg[12:14], ifprint=1) return self.msg_build() # 健康除湿湿度 elif msg[10:12] == b'\x4d\x0d': self.HUMSD_set(msg[12:14], ifprint=1) return self.msg_build() # 组控制命令 # TODO, 模块暂时不支持 # others else: self.LOG.error(protocol_data_printB(msg, title='%s: invalid data:')) return self.msg_build()
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
def recv_data(self): datas = self.connection.recv_once() if datas: self.LOG.debug(protocol_data_printB(datas, " recv data:")) return datas
def send_data(self, data): self.LOG.debug(protocol_data_printB(data, " send data:")) return self.connection.send_once(data)
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
self.set_connection_state('online') self.LOG.info('Setup connection success!') return True else: self.LOG.warn(self.port + " can't open!") self.LOG.error('Setup connection failed!') return False def connection_close(self): if self.connection.close(): self.connection = None self.set_connection_state('offline') else: self.LOG.error('Close connection failed!') def send_data(self, data): self.LOG.yinfo( protocol_data_printB(data, title=self.port + " send data:")) return self.connection.write(data) def recv_data(self): datas = self.connection.readall() if datas: self.LOG.info( protocol_data_printB(datas, title=self.port + " recv data:")) return datas if __name__ == '__main__': print(protocol_data_printB(msg, title='see see'))