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_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
|
||||||
|
@@ -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):
|
||||||
|
Reference in New Issue
Block a user