Example #1
0
    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
Example #2
0
    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