예제 #1
0
    def permit_joining(self, interval=0x0f):
        msg_type = 0x0049
        msg_type_list = utils.convert_int16_msb_lsb_list(msg_type)
        msg_type_msb = msg_type_list['msb']
        msg_type_lsb = msg_type_list['lsb']

        target_short_address = 0x0
        target_short_address_list = utils.convert_int16_msb_lsb_list(
            target_short_address)
        target_short_address_msb = target_short_address_list['msb']
        target_short_address_lsb = target_short_address_list['lsb']

        tcsignificance = 0x0

        content = [
            target_short_address_msb, target_short_address_lsb, interval,
            tcsignificance
        ]

        length = utils.convert_int16_msb_lsb_list(len(content))
        length_msb = length['msb']
        length_lsb = length['lsb']

        checksum = utils.get_checksum(msg_type_msb=msg_type_msb,
                                      msg_type_lsb=msg_type_lsb,
                                      length_msb=length_msb,
                                      length_lsb=length_lsb,
                                      data=content)

        data = [msg_type_msb, msg_type_lsb, length_msb, length_lsb, checksum
                ] + content

        bytes_to_send = utils.create_byte_stream_to_send(data_bytes=data)
        self.device.write(bytes_to_send)
        print("permit joining: ", bytes_to_send)
예제 #2
0
파일: light.py 프로젝트: lab11/permalight
 def toggle(self, print_return=False, seconds_before_next_command=2):
     utils.wait_for_prev(self.last_controlled_time,
                         self.delay_between_commands)
     self.state = not self.state
     data = self.get_on_off_toggle_data(command=0x02)
     bytes_to_send = utils.create_byte_stream_to_send(data_bytes=data)
     self.device.write(bytes_to_send)
     self.last_controlled_time = time.time()
     rsp = [self.synchronous_read()]
     if print_return:
         print(rsp)
     self.device.close()
     self.device.open()
     self.device.reset_input_buffer()
     self.device.reset_output_buffer()
예제 #3
0
    def add_groups(self,
                   light_address,
                   light_ep,
                   group_address,
                   group_name_length=0x10,
                   group_name_max_length=0x1,
                   group_name=0x61):
        msg_type = 0x0060
        msg_type_list = utils.convert_int16_msb_lsb_list(msg_type)
        msg_type_msb = msg_type_list['msb']
        msg_type_lsb = msg_type_list['lsb']

        address_mode = 0x02
        destn_list = utils.convert_int16_msb_lsb_list(light_address)
        destn_msb = destn_list['msb']
        destn_lsb = destn_list['lsb']

        source_ep = 0x01

        group_address_list = utils.convert_int16_msb_lsb_list(group_address)
        group_address_msb = group_address_list['msb']
        group_address_lsb = group_address_list['lsb']

        content = [
            address_mode, destn_msb, destn_lsb, source_ep, light_ep,
            group_address_msb, group_address_lsb, group_name_length,
            group_name_max_length, group_name
        ]
        length = utils.convert_int16_msb_lsb_list(len(content))
        length_msb = length['msb']
        length_lsb = length['lsb']

        checksum = utils.get_checksum(msg_type_msb=msg_type_msb,
                                      msg_type_lsb=msg_type_lsb,
                                      length_msb=length_msb,
                                      length_lsb=length_lsb,
                                      data=content)

        data = [msg_type_msb, msg_type_lsb, length_msb, length_lsb, checksum
                ] + content
        bytes_to_send = utils.create_byte_stream_to_send(data_bytes=data)
        self.device.write(bytes_to_send)
        print(bytes_to_send)
예제 #4
0
파일: light.py 프로젝트: lab11/permalight
    def set_level(self,
                  level,
                  transition_time=1,
                  with_on_off=True,
                  print_return=False,
                  seconds_before_next_command=2):

        utils.wait_for_prev(self.last_controlled_time,
                            self.delay_between_commands)
        self.level = level
        msg_type = 0x0081
        msg_type_list = utils.convert_int16_msb_lsb_list(msg_type)
        msg_type_msb = msg_type_list['msb']
        msg_type_lsb = msg_type_list['lsb']

        address_mode = self.address_mode
        destn_list = utils.convert_int16_msb_lsb_list(self.address)
        destn_msb = destn_list['msb']
        destn_lsb = destn_list['lsb']

        source_ep = 0x01

        on_off = int(with_on_off)
        if int(level / 100) * 0xFF > 0xFF or level < 0x0:
            print("out of bounds level : %d. 0x0<=level<=0xff" % level)
            return -1

        transition_time_list = utils.convert_int16_msb_lsb_list(
            transition_time)
        transition_time_msb = transition_time_list['msb']
        transition_time_lsb = transition_time_list['lsb']

        content = [
            address_mode, destn_msb, destn_lsb, source_ep, self.endpoint,
            on_off,
            int(level / 100 * 0xFF), transition_time_msb, transition_time_lsb
        ]

        length = utils.convert_int16_msb_lsb_list(len(content))
        length_msb = length['msb']
        length_lsb = length['lsb']

        checksum = utils.get_checksum(msg_type_msb=msg_type_msb,
                                      msg_type_lsb=msg_type_lsb,
                                      length_msb=length_msb,
                                      length_lsb=length_lsb,
                                      data=content)

        data = [msg_type_msb, msg_type_lsb, length_msb, length_lsb, checksum
                ] + content
        bytes_to_send = utils.create_byte_stream_to_send(data_bytes=data)
        self.device.write(bytes_to_send)
        self.last_controlled_time = time.time()

        rsp = [self.synchronous_read()]
        if print_return:
            print(rsp)

        self.device.close()
        self.device.open()
        self.device.reset_input_buffer()
        self.device.reset_output_buffer()