Index: __init__.py ================================================================== --- __init__.py +++ __init__.py @@ -334,12 +334,21 @@ # Compute message message = self._compute_button_message(button_info) # Transmit - self._debug("Sending {}={} n={} times with a {}s delay".format(button_info, message, self._config['retries'], self._config['delay'])) - self._radio.multi_transmit(message, self._config['channels'], self._config['retries'], self._config['delay']) + if 'delay' in button_info: + delay = button_info['delay'] + else: + delay = self._config['delay'] + if 'retries' in button_info: + retries = button_info['retries'] + else: + retries = self._config['retries'] + + self._debug("Sending {}={} n={} times with a {}s delay".format(button_info, message, retries, delay)) + self._radio.multi_transmit(message, self._config['channels'], retries, delay) return True def _set_brightness(self, brightness, zone = None): if zone is None: @@ -402,18 +411,16 @@ def _step_brightness(self, brightness, brightness_min, brightness_max, zone = None): # Select the appropriate zone before sending the steps # to ensure they reach the correct bulbs self.on(zone) - time.sleep(0.1) return self._step_value(brightness, brightness_min, brightness_max, 'brightness', zone) def _step_temperature(self, temperature, temperature_min, temperature_max, zone = None): # Select the appropriate zone before sending the steps # to ensure they reach the correct bulbs self.on(zone) - time.sleep(0.1) return self._step_value(temperature, temperature_min, temperature_max, 'temperature', zone) def _rgb_to_hue(self, r, g, b): r = r / 255.0 g = g / 255.0 @@ -459,13 +466,10 @@ self._debug("RGB = \x1b[38;2;%i;%i;%im%06x\x1b[0m; Hue = %s; Color = %i" % (r, g, b, rgb, str(h * 360), color)) return color - def rgb_to_color(self, rgb): - return self._rgb_to_color(rgb) - def raw_send_button(self, button_info): return self._send_button(button_info) def raw_read_button(self): channel = self._config['channels'][0] @@ -518,11 +522,10 @@ if 'has_color' not in self._config['features']: return False # Turn on the appropriate zone to select it self.on(zone) - time.sleep(0.1) # Press the button return self._send_button({'button': 'set_color', 'color': value}) def set_temperature(self, kelvins, zone = None): @@ -553,20 +556,34 @@ else: message = { 'button': 'zone_on', 'zone': zone } + + # Increase retries and delay for on/off to ensure + # that these important messages are delivered + message['retries'] = 15 + message['delay'] = 0.2 + return self._send_button(message) def off(self, zone = None): if zone is None: - message = {'button': 'off'} + message = { + 'button': 'off', + } else: message = { 'button': 'zone_off', 'zone': zone } + + # Increase retries and delay for on/off to ensure + # that these important messages are delivered + message['retries'] = 15 + message['delay'] = 0.2 + return self._send_button(message) def max_brightness(self, zone = None): if 'has_max_brightness' not in self._config['features']: return self.set_brightness(255, zone)