Fix ozw color temp (#38012)

* Fix color temp math

* Ran black --fast

* Update test_light.py

* tweaking mireds

* updating comments

* fixing test_light to match standards

* fixing comments, need coffee
pull/38030/head
Patrick 2020-07-20 13:35:30 -05:00 committed by GitHub
parent dd459a7855
commit 19870ea867
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 5 deletions

View File

@ -30,8 +30,8 @@ COLOR_CHANNEL_COLD_WHITE = 0x02
COLOR_CHANNEL_RED = 0x04
COLOR_CHANNEL_GREEN = 0x08
COLOR_CHANNEL_BLUE = 0x10
TEMP_COLOR_MAX = 500 # mireds (inverted)
TEMP_COLOR_MIN = 154
TEMP_COLOR_MAX = 500 # mired equivalent to 2000K
TEMP_COLOR_MIN = 154 # mired equivalent to 6500K
TEMP_COLOR_DIFF = TEMP_COLOR_MAX - TEMP_COLOR_MIN
@ -193,10 +193,15 @@ class ZwaveLight(ZWaveDeviceEntity, LightEntity):
rgbw = f"#00000000{white:02x}"
elif color_temp is not None:
cold = round((TEMP_COLOR_MAX - round(color_temp)) / TEMP_COLOR_DIFF * 255)
# Limit color temp to min/max values
cold = max(
0,
min(
255,
round((TEMP_COLOR_MAX - round(color_temp)) / TEMP_COLOR_DIFF * 255),
),
)
warm = 255 - cold
if warm < 0:
warm = 0
rgbw = f"#000000{warm:02x}{cold:02x}"
if rgbw and self.values.color:

View File

@ -316,6 +316,39 @@ async def test_light(hass, light_data, light_msg, light_rgb_msg, sent_messages):
assert state.state == "on"
assert state.attributes["color_temp"] == 465
# Test setting invalid color temp
new_color = 120
await hass.services.async_call(
"light",
"turn_on",
{"entity_id": "light.led_bulb_6_multi_colour_level", "color_temp": new_color},
blocking=True,
)
assert len(sent_messages) == 19
msg = sent_messages[-1]
assert msg["topic"] == "OpenZWave/1/command/setvalue/"
assert msg["payload"] == {"Value": 255, "ValueIDKey": 659128337}
msg = sent_messages[-2]
assert msg["topic"] == "OpenZWave/1/command/setvalue/"
assert msg["payload"] == {"Value": "#00000000ff", "ValueIDKey": 659341335}
# Feedback on state
light_msg.decode()
light_msg.payload["Value"] = byte_to_zwave_brightness(255)
light_msg.encode()
light_rgb_msg.decode()
light_rgb_msg.payload["Value"] = "#00000000ff"
light_rgb_msg.encode()
receive_message(light_msg)
receive_message(light_rgb_msg)
await hass.async_block_till_done()
state = hass.states.get("light.led_bulb_6_multi_colour_level")
assert state is not None
assert state.state == "on"
assert state.attributes["color_temp"] == 154
async def test_no_rgb_light(hass, light_no_rgb_data, light_no_rgb_msg, sent_messages):
"""Test setting up config entry."""