Port unmerged fixes from tuya_v2 (#57624)

This commit is contained in:
Peter A. Bigot 2021-10-14 15:14:48 -05:00 committed by GitHub
parent cef34356e2
commit d6d6929e2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -114,7 +114,8 @@ class TuyaLightEntity(TuyaEntity, LightEntity):
def turn_on(self, **kwargs: Any) -> None:
"""Turn on or control the light."""
commands = []
_LOGGER.debug("light kwargs-> %s", kwargs)
work_mode = self._work_mode()
_LOGGER.debug("light kwargs-> %s; work_mode %s", kwargs, work_mode)
if (
DPCode.LIGHT in self.tuya_device.status
@ -124,27 +125,11 @@ class TuyaLightEntity(TuyaEntity, LightEntity):
else:
commands += [{"code": DPCode.SWITCH_LED, "value": True}]
if ATTR_BRIGHTNESS in kwargs:
if self._work_mode().startswith(WORK_MODE_COLOUR):
colour_data = self._get_hsv()
v_range = self._tuya_hsv_v_range()
colour_data["v"] = int(
self.remap(kwargs[ATTR_BRIGHTNESS], 0, 255, v_range[0], v_range[1])
)
commands += [
{"code": self.dp_code_colour, "value": json.dumps(colour_data)}
]
else:
new_range = self._tuya_brightness_range()
tuya_brightness = int(
self.remap(
kwargs[ATTR_BRIGHTNESS], 0, 255, new_range[0], new_range[1]
)
)
commands += [{"code": self.dp_code_bright, "value": tuya_brightness}]
colour_data = self._get_hsv()
v_range = self._tuya_hsv_v_range()
send_colour_data = False
if ATTR_HS_COLOR in kwargs:
colour_data = self._get_hsv()
# hsv h
colour_data["h"] = int(kwargs[ATTR_HS_COLOR][0])
# hsv s
@ -161,16 +146,16 @@ class TuyaLightEntity(TuyaEntity, LightEntity):
)
# hsv v
ha_v = self.brightness
v_range = self._tuya_hsv_v_range()
colour_data["v"] = int(self.remap(ha_v, 0, 255, v_range[0], v_range[1]))
commands += [
{"code": self.dp_code_colour, "value": json.dumps(colour_data)}
]
if self.tuya_device.status[DPCode.WORK_MODE] != "colour":
commands += [{"code": DPCode.WORK_MODE, "value": "colour"}]
if work_mode != WORK_MODE_COLOUR:
work_mode = WORK_MODE_COLOUR
commands += [{"code": DPCode.WORK_MODE, "value": work_mode}]
if ATTR_COLOR_TEMP in kwargs:
elif ATTR_COLOR_TEMP in kwargs:
# temp color
new_range = self._tuya_temp_range()
color_temp = self.remap(
@ -190,8 +175,29 @@ class TuyaLightEntity(TuyaEntity, LightEntity):
)
commands += [{"code": self.dp_code_bright, "value": int(tuya_brightness)}]
if self.tuya_device.status[DPCode.WORK_MODE] != "white":
commands += [{"code": DPCode.WORK_MODE, "value": "white"}]
if work_mode != WORK_MODE_WHITE:
work_mode = WORK_MODE_WHITE
commands += [{"code": DPCode.WORK_MODE, "value": WORK_MODE_WHITE}]
if ATTR_BRIGHTNESS in kwargs:
if work_mode == WORK_MODE_COLOUR:
colour_data["v"] = int(
self.remap(kwargs[ATTR_BRIGHTNESS], 0, 255, v_range[0], v_range[1])
)
send_colour_data = True
elif work_mode == WORK_MODE_WHITE:
new_range = self._tuya_brightness_range()
tuya_brightness = int(
self.remap(
kwargs[ATTR_BRIGHTNESS], 0, 255, new_range[0], new_range[1]
)
)
commands += [{"code": self.dp_code_bright, "value": tuya_brightness}]
if send_colour_data:
commands += [
{"code": self.dp_code_colour, "value": json.dumps(colour_data)}
]
self._send_command(commands)
@ -232,6 +238,14 @@ class TuyaLightEntity(TuyaEntity, LightEntity):
bright_value = json.loads(bright_item.values)
return bright_value.get("min", 0), bright_value.get("max", 255)
@property
def color_mode(self) -> str:
"""Return the color_mode of the light."""
work_mode = self._work_mode()
if work_mode == WORK_MODE_WHITE:
return COLOR_MODE_COLOR_TEMP
return COLOR_MODE_HS
@property
def hs_color(self) -> tuple[float, float] | None:
"""Return the hs_color of the light."""
@ -320,6 +334,12 @@ class TuyaLightEntity(TuyaEntity, LightEntity):
return self.tuya_device.status.get(DPCode.WORK_MODE, "")
def _get_hsv(self) -> dict[str, int]:
if (
self.dp_code_colour not in self.tuya_device.status
or len(self.tuya_device.status[self.dp_code_colour]) == 0
):
return {"h": 0, "s": 0, "v": 0}
return json.loads(self.tuya_device.status[self.dp_code_colour])
@property