def test_color_hsv_to_RGB(): """Test color_hsv_to_RGB.""" assert color_util.color_hsv_to_RGB(0, 0, 0) == (0, 0, 0) assert color_util.color_hsv_to_RGB(0, 0, 100) == (255, 255, 255) assert color_util.color_hsv_to_RGB(240, 100, 100) == (0, 0, 255) assert color_util.color_hsv_to_RGB(120, 100, 100) == (0, 255, 0) assert color_util.color_hsv_to_RGB(0, 100, 100) == (255, 0, 0)
def turn_on(self, **kwargs): """Turn the specified light on.""" self._state = True self._bulb.on() hs_color = kwargs.get(ATTR_HS_COLOR) white = kwargs.get(ATTR_WHITE_VALUE) brightness = kwargs.get(ATTR_BRIGHTNESS) if white is not None: self._white = white self._hs_color = (0, 0) if hs_color is not None: self._white = 0 self._hs_color = hs_color if brightness is not None: self._white = 0 self._brightness = brightness if self._white != 0: self.set_white(self._white) else: rgb = color_util.color_hsv_to_RGB(self._hs_color[0], self._hs_color[1], self._brightness / 255 * 100) self.set_rgb(*rgb)
def turn_on(self, **kwargs): """Turn the specified light on.""" brightness = kwargs.get(ATTR_BRIGHTNESS) colortemp = kwargs.get(ATTR_COLOR_TEMP) # pylint: disable=invalid-name hs = kwargs.get(ATTR_HS_COLOR) if brightness is not None: brightness = int(brightness * 100 / 255) else: if self._brightness is None: self._brightness = 100 brightness = self._brightness if colortemp is not None: self._colormode = False temp_in_k = mired_to_kelvin(colortemp) relative_temp = temp_in_k - EUFY_MIN_KELVIN temp = int(relative_temp * 100 / (EUFY_MAX_KELVIN - EUFY_MIN_KELVIN)) else: temp = None if hs is not None: rgb = color_util.color_hsv_to_RGB(hs[0], hs[1], brightness / 255 * 100) self._colormode = True elif self._colormode: rgb = color_util.color_hsv_to_RGB(self._hs[0], self._hs[1], brightness / 255 * 100) else: rgb = None try: self._bulb.set_state(power=True, brightness=brightness, temperature=temp, colors=rgb) except BrokenPipeError: self._bulb.connect() self._bulb.set_state(power=True, brightness=brightness, temperature=temp, colors=rgb)
async def async_turn_on(self, **kwargs): """Instruct the light to turn on.""" if ATTR_BRIGHTNESS in kwargs or ATTR_HS_COLOR in kwargs: default_hs = (0, 0) if self._hs_color is None else self._hs_color hue_sat = kwargs.get(ATTR_HS_COLOR, default_hs) default_brightness = 255 if self._brightness is None else self._brightness brightness = kwargs.get(ATTR_BRIGHTNESS, default_brightness) rgb = color_util.color_hsv_to_RGB(*hue_sat, brightness / 255 * 100) await self._light.set_color(*rgb) else: await self._light.turn_on()
def turn_on(self, **kwargs): """Turn the device on.""" if ATTR_HS_COLOR in kwargs: self._hs_color = kwargs[ATTR_HS_COLOR] if ATTR_BRIGHTNESS in kwargs: self._brightness = kwargs[ATTR_BRIGHTNESS] else: self._brightness = 255 rgb_color = color_util.color_hsv_to_RGB(self._hs_color[0], self._hs_color[1], self._brightness / 255 * 100) self._stick.set_color(red=rgb_color[0], green=rgb_color[1], blue=rgb_color[2])
def turn_on(self, **kwargs): """Instruct the light to turn on.""" piglow.clear() if ATTR_BRIGHTNESS in kwargs: self._brightness = kwargs[ATTR_BRIGHTNESS] if ATTR_HS_COLOR in kwargs: self._hs_color = kwargs[ATTR_HS_COLOR] rgb = color_util.color_hsv_to_RGB( self._hs_color[0], self._hs_color[1], self._brightness / 255 * 100 ) piglow.red(rgb[0]) piglow.green(rgb[1]) piglow.blue(rgb[2]) piglow.show() self._is_on = True self.schedule_update_op_state()
async def async_turn_on(self, **kwargs): """Instruct the light to turn on.""" default_hs = (0, 0) if self._hs_color is None else self._hs_color hue_sat = kwargs.get(ATTR_HS_COLOR, default_hs) default_brightness = 0 if self._brightness is None else self._brightness brightness = kwargs.get(ATTR_BRIGHTNESS, default_brightness) default_white_value = 255 if self._white_value is None else self._white_value white_value = kwargs.get(ATTR_WHITE_VALUE, default_white_value) if brightness == 0 and white_value == 0 and not kwargs: # If the light would be off, and no additional parameters were # passed, just turn the light on full brightness. brightness = 255 white_value = 255 rgb = color_util.color_hsv_to_RGB(*hue_sat, brightness / 255 * 100) await self._light.set_color(*rgb, white_value)
async def async_turn_on(self, **kwargs): """Turn the light on.""" hs_color = kwargs.get(ATTR_HS_COLOR, self._hs_color) brightness = kwargs.get(ATTR_BRIGHTNESS, self._brightness) effect = kwargs.get(ATTR_EFFECT) if effect is not None: colors = await self._api.set_pattern_by_id(self._channel, effect) rgb = color_int_to_rgb(colors[0]) hsv = color_util.color_RGB_to_hsv(*rgb) hs_color = hsv[:2] brightness = hsv[2] / 100 * 255 else: rgb = color_util.color_hsv_to_RGB(*hs_color, brightness / 255 * 100) colors = [color_rgb_to_int(*rgb)] await self._api.set_pattern(self._channel, colors) self._hs_color = hs_color self._brightness = brightness self._effect = effect
async def async_turn_on(self, **kwargs): """Switch the light on, change brightness, change color.""" if self._ambient: _LOGGER.debug("Switching ambient light on for: %s", self.name) try: await self.opp.async_add_executor_job( self.device.appliance.set_setting, self._key, True) except HomeConnectError as err: _LOGGER.error( "Error while trying to turn on ambient light: %s", err) return if ATTR_BRIGHTNESS in kwargs or ATTR_HS_COLOR in kwargs: try: await self.opp.async_add_executor_job( self.device.appliance.set_setting, self._color_key, BSH_AMBIENT_LIGHT_COLOR_CUSTOM_COLOR, ) except HomeConnectError as err: _LOGGER.error( "Error while trying selecting customcolor: %s", err) if self._brightness is not None: brightness = 10 + ceil(self._brightness / 255 * 90) if ATTR_BRIGHTNESS in kwargs: brightness = 10 + ceil( kwargs[ATTR_BRIGHTNESS] / 255 * 90) hs_color = kwargs.get(ATTR_HS_COLOR, self._hs_color) if hs_color is not None: rgb = color_util.color_hsv_to_RGB( *hs_color, brightness) hex_val = color_util.color_rgb_to_hex( rgb[0], rgb[1], rgb[2]) try: await self.opp.async_add_executor_job( self.device.appliance.set_setting, self._custom_color_key, f"#{hex_val}", ) except HomeConnectError as err: _LOGGER.error( "Error while trying setting the color: %s", err) elif ATTR_BRIGHTNESS in kwargs: _LOGGER.debug("Changing brightness for: %s", self.name) brightness = 10 + ceil(kwargs[ATTR_BRIGHTNESS] / 255 * 90) try: await self.opp.async_add_executor_job( self.device.appliance.set_setting, self._brightness_key, brightness) except HomeConnectError as err: _LOGGER.error("Error while trying set the brightness: %s", err) else: _LOGGER.debug("Switching light on for: %s", self.name) try: await self.opp.async_add_executor_job( self.device.appliance.set_setting, self._key, True) except HomeConnectError as err: _LOGGER.error("Error while trying to turn on light: %s", err) self.async_entity_update()
async def async_turn_on(self, **kwargs): """Turn the device on. This method is a coroutine. """ should_update = False message = {"state": "ON"} if ATTR_HS_COLOR in kwargs and (self._config[CONF_HS] or self._config[CONF_RGB] or self._config[CONF_XY]): hs_color = kwargs[ATTR_HS_COLOR] message["color"] = {} if self._config[CONF_RGB]: # If there's a brightness topic set, we don't want to scale the # RGB values given using the brightness. if self._brightness is not None: brightness = 255 else: brightness = kwargs.get( ATTR_BRIGHTNESS, self._brightness if self._brightness else 255) rgb = color_util.color_hsv_to_RGB(hs_color[0], hs_color[1], brightness / 255 * 100) message["color"]["r"] = rgb[0] message["color"]["g"] = rgb[1] message["color"]["b"] = rgb[2] if self._config[CONF_XY]: xy_color = color_util.color_hs_to_xy(*kwargs[ATTR_HS_COLOR]) message["color"]["x"] = xy_color[0] message["color"]["y"] = xy_color[1] if self._config[CONF_HS]: message["color"]["h"] = hs_color[0] message["color"]["s"] = hs_color[1] if self._optimistic: self._hs = kwargs[ATTR_HS_COLOR] should_update = True if ATTR_FLASH in kwargs: flash = kwargs.get(ATTR_FLASH) if flash == FLASH_LONG: message["flash"] = self._flash_times[CONF_FLASH_TIME_LONG] elif flash == FLASH_SHORT: message["flash"] = self._flash_times[CONF_FLASH_TIME_SHORT] if ATTR_TRANSITION in kwargs: message["transition"] = kwargs[ATTR_TRANSITION] if ATTR_BRIGHTNESS in kwargs and self._brightness is not None: message["brightness"] = int(kwargs[ATTR_BRIGHTNESS] / float(DEFAULT_BRIGHTNESS_SCALE) * self._config[CONF_BRIGHTNESS_SCALE]) if self._optimistic: self._brightness = kwargs[ATTR_BRIGHTNESS] should_update = True if ATTR_COLOR_TEMP in kwargs: message["color_temp"] = int(kwargs[ATTR_COLOR_TEMP]) if self._optimistic: self._color_temp = kwargs[ATTR_COLOR_TEMP] should_update = True if ATTR_EFFECT in kwargs: message["effect"] = kwargs[ATTR_EFFECT] if self._optimistic: self._effect = kwargs[ATTR_EFFECT] should_update = True if ATTR_WHITE_VALUE in kwargs: message["white_value"] = int(kwargs[ATTR_WHITE_VALUE]) if self._optimistic: self._white_value = kwargs[ATTR_WHITE_VALUE] should_update = True mqtt.async_publish( self.opp, self._topic[CONF_COMMAND_TOPIC], json.dumps(message), self._config[CONF_QOS], self._config[CONF_RETAIN], ) if self._optimistic: # Optimistically assume that the light has changed state. self._state = True should_update = True if should_update: self.async_write_op_state()
async def async_turn_on(self, **kwargs: Any) -> None: """Turn on the light.""" data: dict[str, Any] = { ATTR_ON: True, ATTR_SEGMENT_ID: self._segment, } if ATTR_COLOR_TEMP in kwargs: mireds = color_util.color_temperature_kelvin_to_mired( kwargs[ATTR_COLOR_TEMP]) data[ATTR_COLOR_PRIMARY] = tuple( map(int, color_util.color_temperature_to_rgb(mireds))) if ATTR_HS_COLOR in kwargs: hue, sat = kwargs[ATTR_HS_COLOR] data[ATTR_COLOR_PRIMARY] = color_util.color_hsv_to_RGB( hue, sat, 100) if ATTR_TRANSITION in kwargs: # WLED uses 100ms per unit, so 10 = 1 second. data[ATTR_TRANSITION] = round(kwargs[ATTR_TRANSITION] * 10) if ATTR_BRIGHTNESS in kwargs: data[ATTR_BRIGHTNESS] = kwargs[ATTR_BRIGHTNESS] if ATTR_EFFECT in kwargs: data[ATTR_EFFECT] = kwargs[ATTR_EFFECT] # Support for RGBW strips, adds white value if self._rgbw and any( x in (ATTR_COLOR_TEMP, ATTR_HS_COLOR, ATTR_WHITE_VALUE) for x in kwargs): # WLED cannot just accept a white value, it needs the color. # We use the last know color in case just the white value changes. if all(x not in (ATTR_COLOR_TEMP, ATTR_HS_COLOR) for x in kwargs): hue, sat = self.hs_color data[ATTR_COLOR_PRIMARY] = color_util.color_hsv_to_RGB( hue, sat, 100) # On a RGBW strip, when the color is pure white, disable the RGB LEDs in # WLED by setting RGB to 0,0,0 if data[ATTR_COLOR_PRIMARY] == (255, 255, 255): data[ATTR_COLOR_PRIMARY] = (0, 0, 0) # Add requested or last known white value if ATTR_WHITE_VALUE in kwargs: data[ATTR_COLOR_PRIMARY] += (kwargs[ATTR_WHITE_VALUE], ) else: data[ATTR_COLOR_PRIMARY] += (self.white_value, ) # When only 1 segment is present, switch along the master, and use # the master for power/brightness control. if len(self.coordinator.data.state.segments) == 1: master_data = {ATTR_ON: True} if ATTR_BRIGHTNESS in data: master_data[ATTR_BRIGHTNESS] = data[ATTR_BRIGHTNESS] data[ATTR_BRIGHTNESS] = 255 if ATTR_TRANSITION in data: master_data[ATTR_TRANSITION] = data[ATTR_TRANSITION] del data[ATTR_TRANSITION] await self.coordinator.wled.segment(**data) await self.coordinator.wled.master(**master_data) return await self.coordinator.wled.segment(**data)
async def async_turn_on(self, **kwargs): # noqa: C901 """Turn the device on. This method is a coroutine. """ should_update = False message = {"state": "ON"} if ATTR_HS_COLOR in kwargs and ( self._config[CONF_HS] or self._config[CONF_RGB] or self._config[CONF_XY] ): hs_color = kwargs[ATTR_HS_COLOR] message["color"] = {} if self._config[CONF_RGB]: # If there's a brightness topic set, we don't want to scale the # RGB values given using the brightness. if self._config[CONF_BRIGHTNESS]: brightness = 255 else: brightness = kwargs.get(ATTR_BRIGHTNESS, 255) rgb = color_util.color_hsv_to_RGB( hs_color[0], hs_color[1], brightness / 255 * 100 ) message["color"]["r"] = rgb[0] message["color"]["g"] = rgb[1] message["color"]["b"] = rgb[2] if self._config[CONF_XY]: xy_color = color_util.color_hs_to_xy(*kwargs[ATTR_HS_COLOR]) message["color"]["x"] = xy_color[0] message["color"]["y"] = xy_color[1] if self._config[CONF_HS]: message["color"]["h"] = hs_color[0] message["color"]["s"] = hs_color[1] if self._optimistic: self._hs = kwargs[ATTR_HS_COLOR] should_update = True if ATTR_HS_COLOR in kwargs and self._supports_color_mode(COLOR_MODE_HS): hs_color = kwargs[ATTR_HS_COLOR] message["color"] = {"h": hs_color[0], "s": hs_color[1]} if self._optimistic: self._color_mode = COLOR_MODE_HS self._hs = hs_color should_update = True if ATTR_RGB_COLOR in kwargs and self._supports_color_mode(COLOR_MODE_RGB): rgb = self._scale_rgbxx(kwargs[ATTR_RGB_COLOR], kwargs) message["color"] = {"r": rgb[0], "g": rgb[1], "b": rgb[2]} if self._optimistic: self._color_mode = COLOR_MODE_RGB self._rgb = rgb should_update = True if ATTR_RGBW_COLOR in kwargs and self._supports_color_mode(COLOR_MODE_RGBW): rgb = self._scale_rgbxx(kwargs[ATTR_RGBW_COLOR], kwargs) message["color"] = {"r": rgb[0], "g": rgb[1], "b": rgb[2], "w": rgb[3]} if self._optimistic: self._color_mode = COLOR_MODE_RGBW self._rgbw = rgb should_update = True if ATTR_RGBWW_COLOR in kwargs and self._supports_color_mode(COLOR_MODE_RGBWW): rgb = self._scale_rgbxx(kwargs[ATTR_RGBWW_COLOR], kwargs) message["color"] = { "r": rgb[0], "g": rgb[1], "b": rgb[2], "c": rgb[3], "w": rgb[4], } if self._optimistic: self._color_mode = COLOR_MODE_RGBWW self._rgbww = rgb should_update = True if ATTR_XY_COLOR in kwargs and self._supports_color_mode(COLOR_MODE_XY): xy = kwargs[ATTR_XY_COLOR] # pylint: disable=invalid-name message["color"] = {"x": xy[0], "y": xy[1]} if self._optimistic: self._color_mode = COLOR_MODE_XY self._xy = xy should_update = True self._set_flash_and_transition(message, **kwargs) if ATTR_BRIGHTNESS in kwargs and self._config[CONF_BRIGHTNESS]: brightness_normalized = kwargs[ATTR_BRIGHTNESS] / DEFAULT_BRIGHTNESS_SCALE brightness_scale = self._config[CONF_BRIGHTNESS_SCALE] device_brightness = min( round(brightness_normalized * brightness_scale), brightness_scale ) # Make sure the brightness is not rounded down to 0 device_brightness = max(device_brightness, 1) message["brightness"] = device_brightness if self._optimistic: self._brightness = kwargs[ATTR_BRIGHTNESS] should_update = True if ATTR_COLOR_TEMP in kwargs: message["color_temp"] = int(kwargs[ATTR_COLOR_TEMP]) if self._optimistic: self._color_temp = kwargs[ATTR_COLOR_TEMP] should_update = True if ATTR_EFFECT in kwargs: message["effect"] = kwargs[ATTR_EFFECT] if self._optimistic: self._effect = kwargs[ATTR_EFFECT] should_update = True if ATTR_WHITE_VALUE in kwargs: message["white_value"] = int(kwargs[ATTR_WHITE_VALUE]) if self._optimistic: self._white_value = kwargs[ATTR_WHITE_VALUE] should_update = True mqtt.async_publish( self.opp, self._topic[CONF_COMMAND_TOPIC], json.dumps(message), self._config[CONF_QOS], self._config[CONF_RETAIN], ) if self._optimistic: # Optimistically assume that the light has changed state. self._state = True should_update = True if should_update: self.async_write_op_state()
async def async_turn_on(self, **kwargs): """Turn the entity on. This method is a coroutine. """ values = {"state": True} if self._optimistic: self._state = True if ATTR_BRIGHTNESS in kwargs: values["brightness"] = int(kwargs[ATTR_BRIGHTNESS]) if self._optimistic: self._brightness = kwargs[ATTR_BRIGHTNESS] if ATTR_COLOR_TEMP in kwargs: values["color_temp"] = int(kwargs[ATTR_COLOR_TEMP]) if self._optimistic: self._color_temp = kwargs[ATTR_COLOR_TEMP] if ATTR_HS_COLOR in kwargs: hs_color = kwargs[ATTR_HS_COLOR] # If there's a brightness topic set, we don't want to scale the RGB # values given using the brightness. if self._templates[CONF_BRIGHTNESS_TEMPLATE] is not None: brightness = 255 else: brightness = kwargs.get( ATTR_BRIGHTNESS, self._brightness if self._brightness else 255) rgb = color_util.color_hsv_to_RGB(hs_color[0], hs_color[1], brightness / 255 * 100) values["red"] = rgb[0] values["green"] = rgb[1] values["blue"] = rgb[2] if self._optimistic: self._hs = kwargs[ATTR_HS_COLOR] if ATTR_WHITE_VALUE in kwargs: values["white_value"] = int(kwargs[ATTR_WHITE_VALUE]) if self._optimistic: self._white_value = kwargs[ATTR_WHITE_VALUE] if ATTR_EFFECT in kwargs: values["effect"] = kwargs.get(ATTR_EFFECT) if ATTR_FLASH in kwargs: values["flash"] = kwargs.get(ATTR_FLASH) if ATTR_TRANSITION in kwargs: values["transition"] = int(kwargs[ATTR_TRANSITION]) mqtt.async_publish( self.opp, self._topics[CONF_COMMAND_TOPIC], self._templates[CONF_COMMAND_ON_TEMPLATE].async_render(**values), self._config[CONF_QOS], self._config[CONF_RETAIN], ) if self._optimistic: self.async_write_op_state()