Implement optional light variable to reverse color temp

This commit is contained in:
Louis
2021-12-11 21:54:57 +11:00
committed by rospogrigio
parent 76b86eb6e1
commit a5245c79f7
2 changed files with 18 additions and 5 deletions

View File

@@ -16,6 +16,7 @@ CONF_COLOR = "color"
CONF_COLOR_MODE = "color_mode" CONF_COLOR_MODE = "color_mode"
CONF_COLOR_TEMP_MIN_KELVIN = "color_temp_min_kelvin" CONF_COLOR_TEMP_MIN_KELVIN = "color_temp_min_kelvin"
CONF_COLOR_TEMP_MAX_KELVIN = "color_temp_max_kelvin" CONF_COLOR_TEMP_MAX_KELVIN = "color_temp_max_kelvin"
CONF_COLOR_TEMP_REVERSE = "color_temp_reverse"
CONF_MUSIC_MODE = "music_mode" CONF_MUSIC_MODE = "music_mode"
# switch # switch

View File

@@ -27,6 +27,7 @@ from .const import (
CONF_COLOR_MODE, CONF_COLOR_MODE,
CONF_COLOR_TEMP_MAX_KELVIN, CONF_COLOR_TEMP_MAX_KELVIN,
CONF_COLOR_TEMP_MIN_KELVIN, CONF_COLOR_TEMP_MIN_KELVIN,
CONF_COLOR_TEMP_REVERSE,
CONF_MUSIC_MODE, CONF_MUSIC_MODE,
) )
@@ -35,6 +36,7 @@ _LOGGER = logging.getLogger(__name__)
MIRED_TO_KELVIN_CONST = 1000000 MIRED_TO_KELVIN_CONST = 1000000
DEFAULT_MIN_KELVIN = 2700 # MIRED 370 DEFAULT_MIN_KELVIN = 2700 # MIRED 370
DEFAULT_MAX_KELVIN = 6500 # MIRED 153 DEFAULT_MAX_KELVIN = 6500 # MIRED 153
DEFAULT_COLOR_TEMP_REVERSE = False
DEFAULT_LOWER_BRIGHTNESS = 29 DEFAULT_LOWER_BRIGHTNESS = 29
DEFAULT_UPPER_BRIGHTNESS = 1000 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.Optional(CONF_COLOR_TEMP_MAX_KELVIN, default=DEFAULT_MAX_KELVIN): vol.All(
vol.Coerce(int), vol.Range(min=1500, max=8000) 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_SCENE): vol.In(dps),
vol.Optional( vol.Optional(
CONF_MUSIC_MODE, default=False, description={"suggested_value": False} CONF_MUSIC_MODE, default=False, description={"suggested_value": False}
@@ -154,6 +159,9 @@ class LocaltuyaLight(LocalTuyaEntity, LightEntity):
MIRED_TO_KELVIN_CONST MIRED_TO_KELVIN_CONST
/ self._config.get(CONF_COLOR_TEMP_MAX_KELVIN, DEFAULT_MAX_KELVIN) / 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._hs = None
self._effect = None self._effect = None
self._effect_list = [] self._effect_list = []
@@ -199,13 +207,15 @@ class LocaltuyaLight(LocalTuyaEntity, LightEntity):
def color_temp(self): def color_temp(self):
"""Return the color_temp of the light.""" """Return the color_temp of the light."""
if self.has_config(CONF_COLOR_TEMP) and self.is_white_mode: 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._max_mired - self._min_mired) / self._upper_color_temp) ((self._max_mired - self._min_mired) / self._upper_color_temp)
* self._color_temp * color_temp_value
) )
) )
return color_temp_scaled
return None return None
@property @property
@@ -364,14 +374,16 @@ class LocaltuyaLight(LocalTuyaEntity, LightEntity):
if ATTR_COLOR_TEMP in kwargs and (features & SUPPORT_COLOR_TEMP): if ATTR_COLOR_TEMP in kwargs and (features & SUPPORT_COLOR_TEMP):
if brightness is None: if brightness is None:
brightness = self._brightness 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._upper_color_temp / (self._max_mired - self._min_mired)) - (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_COLOR_MODE)] = MODE_WHITE
states[self._config.get(CONF_BRIGHTNESS)] = brightness 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) await self._device.set_dps(states)
async def async_turn_off(self, **kwargs): async def async_turn_off(self, **kwargs):