Implement optional light variable to reverse color temp
This commit is contained in:
@@ -16,6 +16,7 @@ CONF_COLOR = "color"
|
||||
CONF_COLOR_MODE = "color_mode"
|
||||
CONF_COLOR_TEMP_MIN_KELVIN = "color_temp_min_kelvin"
|
||||
CONF_COLOR_TEMP_MAX_KELVIN = "color_temp_max_kelvin"
|
||||
CONF_COLOR_TEMP_REVERSE = "color_temp_reverse"
|
||||
CONF_MUSIC_MODE = "music_mode"
|
||||
|
||||
# switch
|
||||
|
@@ -27,6 +27,7 @@ from .const import (
|
||||
CONF_COLOR_MODE,
|
||||
CONF_COLOR_TEMP_MAX_KELVIN,
|
||||
CONF_COLOR_TEMP_MIN_KELVIN,
|
||||
CONF_COLOR_TEMP_REVERSE,
|
||||
CONF_MUSIC_MODE,
|
||||
)
|
||||
|
||||
@@ -35,6 +36,7 @@ _LOGGER = logging.getLogger(__name__)
|
||||
MIRED_TO_KELVIN_CONST = 1000000
|
||||
DEFAULT_MIN_KELVIN = 2700 # MIRED 370
|
||||
DEFAULT_MAX_KELVIN = 6500 # MIRED 153
|
||||
DEFAULT_COLOR_TEMP_REVERSE = False
|
||||
|
||||
DEFAULT_LOWER_BRIGHTNESS = 29
|
||||
DEFAULT_UPPER_BRIGHTNESS = 1000
|
||||
@@ -117,6 +119,9 @@ def flow_schema(dps):
|
||||
vol.Optional(CONF_COLOR_TEMP_MAX_KELVIN, default=DEFAULT_MAX_KELVIN): vol.All(
|
||||
vol.Coerce(int), vol.Range(min=1500, max=8000)
|
||||
),
|
||||
vol.Optional(
|
||||
CONF_COLOR_TEMP_REVERSE, default=False, description={"suggested_value": False}
|
||||
): bool,
|
||||
vol.Optional(CONF_SCENE): vol.In(dps),
|
||||
vol.Optional(
|
||||
CONF_MUSIC_MODE, default=False, description={"suggested_value": False}
|
||||
@@ -154,6 +159,9 @@ class LocaltuyaLight(LocalTuyaEntity, LightEntity):
|
||||
MIRED_TO_KELVIN_CONST
|
||||
/ self._config.get(CONF_COLOR_TEMP_MAX_KELVIN, DEFAULT_MAX_KELVIN)
|
||||
)
|
||||
self._color_temp_reverse = self._config.get(
|
||||
CONF_COLOR_TEMP_REVERSE, DEFAULT_COLOR_TEMP_REVERSE
|
||||
)
|
||||
self._hs = None
|
||||
self._effect = None
|
||||
self._effect_list = []
|
||||
@@ -199,13 +207,15 @@ class LocaltuyaLight(LocalTuyaEntity, LightEntity):
|
||||
def color_temp(self):
|
||||
"""Return the color_temp of the light."""
|
||||
if self.has_config(CONF_COLOR_TEMP) and self.is_white_mode:
|
||||
return int(
|
||||
color_temp_value = self._upper_color_temp - self._color_temp if self._color_temp_reverse else self._color_temp
|
||||
color_temp_scaled = int(
|
||||
self._max_mired
|
||||
- (
|
||||
((self._max_mired - self._min_mired) / self._upper_color_temp)
|
||||
* self._color_temp
|
||||
* color_temp_value
|
||||
)
|
||||
)
|
||||
return color_temp_scaled
|
||||
return None
|
||||
|
||||
@property
|
||||
@@ -364,14 +374,16 @@ class LocaltuyaLight(LocalTuyaEntity, LightEntity):
|
||||
if ATTR_COLOR_TEMP in kwargs and (features & SUPPORT_COLOR_TEMP):
|
||||
if brightness is None:
|
||||
brightness = self._brightness
|
||||
color_temp = int(
|
||||
|
||||
color_temp_value = (self._max_mired - self._min_mired) - (int(kwargs[ATTR_COLOR_TEMP]) - self._min_mired) if self._color_temp_reverse else (int(kwargs[ATTR_COLOR_TEMP]) - self._min_mired)
|
||||
color_temp_scaled = int(
|
||||
self._upper_color_temp
|
||||
- (self._upper_color_temp / (self._max_mired - self._min_mired))
|
||||
* (int(kwargs[ATTR_COLOR_TEMP]) - self._min_mired)
|
||||
* color_temp_value
|
||||
)
|
||||
states[self._config.get(CONF_COLOR_MODE)] = MODE_WHITE
|
||||
states[self._config.get(CONF_BRIGHTNESS)] = brightness
|
||||
states[self._config.get(CONF_COLOR_TEMP)] = color_temp
|
||||
states[self._config.get(CONF_COLOR_TEMP)] = color_temp_scaled
|
||||
await self._device.set_dps(states)
|
||||
|
||||
async def async_turn_off(self, **kwargs):
|
||||
|
Reference in New Issue
Block a user