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)
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()
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)
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()