mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-01-08 22:07:06 +00:00
Add bulb valid temperature range (#122)
This commit is contained in:
parent
caa01befd7
commit
c6739daacc
@ -153,13 +153,15 @@ def brightness(dev, brightness):
|
|||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@click.argument("temperature", type=click.IntRange(2700, 6500), default=None,
|
@click.argument("temperature", type=click.IntRange(2500, 9000), default=None,
|
||||||
required=False)
|
required=False)
|
||||||
@pass_dev
|
@pass_dev
|
||||||
def temperature(dev, temperature):
|
def temperature(dev, temperature):
|
||||||
"""Get or set color temperature. (Bulb only)"""
|
"""Get or set color temperature. (Bulb only)"""
|
||||||
if temperature is None:
|
if temperature is None:
|
||||||
click.echo("Color temperature: %s" % dev.color_temp)
|
click.echo("Color temperature: %s" % dev.color_temp)
|
||||||
|
if dev.valid_temperature_range != (0, 0):
|
||||||
|
click.echo("(min: %s, max: %s)" % dev.valid_temperature_range)
|
||||||
else:
|
else:
|
||||||
click.echo("Setting color temperature to %s" % temperature)
|
click.echo("Setting color temperature to %s" % temperature)
|
||||||
dev.color_temp = temperature
|
dev.color_temp = temperature
|
||||||
|
@ -1,6 +1,12 @@
|
|||||||
from pyHS100 import SmartDevice
|
from pyHS100 import SmartDevice
|
||||||
|
import re
|
||||||
from typing import Any, Dict, Optional, Tuple
|
from typing import Any, Dict, Optional, Tuple
|
||||||
|
|
||||||
|
TPLINK_KELVIN = {'LB130': (2500, 9000),
|
||||||
|
'LB120': (2700, 6500),
|
||||||
|
'LB230': (2500, 9000),
|
||||||
|
'KB130': (2500, 9000)}
|
||||||
|
|
||||||
|
|
||||||
class SmartBulb(SmartDevice):
|
class SmartBulb(SmartDevice):
|
||||||
"""Representation of a TP-Link Smart Bulb.
|
"""Representation of a TP-Link Smart Bulb.
|
||||||
@ -78,6 +84,22 @@ class SmartBulb(SmartDevice):
|
|||||||
"""
|
"""
|
||||||
return bool(self.sys_info['is_variable_color_temp'])
|
return bool(self.sys_info['is_variable_color_temp'])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def valid_temperature_range(self) -> Tuple[int, int]:
|
||||||
|
"""
|
||||||
|
Returns the white temperature range (in Kelvin)
|
||||||
|
depending on the bulb model
|
||||||
|
|
||||||
|
:return: White temperature range in Kelvin (minimun, maximum)
|
||||||
|
:rtype: tuple
|
||||||
|
"""
|
||||||
|
if not self.is_variable_color_temp:
|
||||||
|
return (0, 0)
|
||||||
|
for model, temp_range in TPLINK_KELVIN.items():
|
||||||
|
if re.match(model, self.sys_info['model']):
|
||||||
|
return temp_range
|
||||||
|
return (0, 0)
|
||||||
|
|
||||||
def get_light_state(self) -> Dict:
|
def get_light_state(self) -> Dict:
|
||||||
return self._query_helper("smartlife.iot.smartbulb.lightingservice",
|
return self._query_helper("smartlife.iot.smartbulb.lightingservice",
|
||||||
"get_light_state")
|
"get_light_state")
|
||||||
@ -155,6 +177,11 @@ class SmartBulb(SmartDevice):
|
|||||||
if not self.is_variable_color_temp:
|
if not self.is_variable_color_temp:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
if temp < self.valid_temperature_range[0] or \
|
||||||
|
temp > self.valid_temperature_range[1]:
|
||||||
|
raise ValueError("Temperature should be between {} "
|
||||||
|
"and {}".format(*self.valid_temperature_range))
|
||||||
|
|
||||||
light_state = {
|
light_state = {
|
||||||
"color_temp": temp,
|
"color_temp": temp,
|
||||||
}
|
}
|
||||||
|
@ -201,6 +201,13 @@ class TestSmartBulb(TestCase):
|
|||||||
def test_rssi(self):
|
def test_rssi(self):
|
||||||
self.sysinfo_schema({'rssi': self.bulb.rssi}) # wrapping for vol
|
self.sysinfo_schema({'rssi': self.bulb.rssi}) # wrapping for vol
|
||||||
|
|
||||||
|
def test_temperature_range(self):
|
||||||
|
self.assertEqual(self.bulb.valid_temperature_range, (2500, 9000))
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
self.bulb.color_temp = 1000
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
self.bulb.color_temp = 10000
|
||||||
|
|
||||||
|
|
||||||
class TestSmartBulbLB100(TestSmartBulb):
|
class TestSmartBulbLB100(TestSmartBulb):
|
||||||
SYSINFO = sysinfo_lb100
|
SYSINFO = sysinfo_lb100
|
||||||
|
Loading…
Reference in New Issue
Block a user