mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-10-21 06:48:05 +00:00
Fix bug that changed brightness at each HSV update (#124)
* Fix bug that changed brightness at each hsv update The HSV setter should accept a percentage for the brightness value but actually assumed the brightness to be in absolute values between 1 and 255. This resulted in brightness reductions at each HSV update, in steps of 100% -> 100/255=39% -> 39/255=15% -> ... (see also https://github.com/home-assistant/home-assistant/issues/15582, where I originally reported this bug). * Modify HSV property to return brightness in percent Switch from reported brightness values of 1..255 to percentage values, for consistency with the apidoc and 8761dd8. * Add checks and tests for the hsv setter - make sure that new (hue, saturation, brightness) values are within their valid ranges (0..255, 0..100, 0..100) and raise SmartDeviceException if they are not - add test function for the hsv setter
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from pyHS100 import SmartDevice
|
||||
from pyHS100 import SmartDevice, SmartDeviceException
|
||||
import re
|
||||
from typing import Any, Dict, Optional, Tuple
|
||||
|
||||
@@ -124,11 +124,11 @@ class SmartBulb(SmartDevice):
|
||||
if not self.is_on:
|
||||
hue = light_state['dft_on_state']['hue']
|
||||
saturation = light_state['dft_on_state']['saturation']
|
||||
value = int(light_state['dft_on_state']['brightness'] * 255 / 100)
|
||||
value = light_state['dft_on_state']['brightness']
|
||||
else:
|
||||
hue = light_state['hue']
|
||||
saturation = light_state['saturation']
|
||||
value = int(light_state['brightness'] * 255 / 100)
|
||||
value = light_state['brightness']
|
||||
|
||||
return hue, saturation, value
|
||||
|
||||
@@ -142,10 +142,25 @@ class SmartBulb(SmartDevice):
|
||||
if not self.is_color:
|
||||
return None
|
||||
|
||||
if not isinstance(state[0], int) or not (0 <= state[0] <= 255):
|
||||
raise SmartDeviceException(
|
||||
'Invalid hue value: {} '
|
||||
'(valid range: 0-255)'.format(state[0]))
|
||||
|
||||
if not isinstance(state[1], int) or not (0 <= state[1] <= 100):
|
||||
raise SmartDeviceException(
|
||||
'Invalid saturation value: {} '
|
||||
'(valid range: 0-100%)'.format(state[1]))
|
||||
|
||||
if not isinstance(state[2], int) or not (0 <= state[2] <= 100):
|
||||
raise SmartDeviceException(
|
||||
'Invalid brightness value: {} '
|
||||
'(valid range: 0-100%)'.format(state[2]))
|
||||
|
||||
light_state = {
|
||||
"hue": state[0],
|
||||
"saturation": state[1],
|
||||
"brightness": int(state[2] * 100 / 255),
|
||||
"brightness": state[2],
|
||||
"color_temp": 0
|
||||
}
|
||||
self.set_light_state(light_state)
|
||||
|
Reference in New Issue
Block a user