mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-22 19:23:34 +00:00
Add brightness module (#806)
Add module for controlling the brightness.
This commit is contained in:
parent
eb4c048b57
commit
0d5a3c8439
@ -2,6 +2,7 @@
|
||||
from .alarmmodule import AlarmModule
|
||||
from .autooffmodule import AutoOffModule
|
||||
from .battery import BatterySensor
|
||||
from .brightness import Brightness
|
||||
from .childdevicemodule import ChildDeviceModule
|
||||
from .cloudmodule import CloudModule
|
||||
from .devicemodule import DeviceModule
|
||||
@ -26,6 +27,7 @@ __all__ = [
|
||||
"ReportModule",
|
||||
"AutoOffModule",
|
||||
"LedModule",
|
||||
"Brightness",
|
||||
"Firmware",
|
||||
"CloudModule",
|
||||
"LightTransitionModule",
|
||||
|
43
kasa/smart/modules/brightness.py
Normal file
43
kasa/smart/modules/brightness.py
Normal file
@ -0,0 +1,43 @@
|
||||
"""Implementation of brightness module."""
|
||||
from typing import TYPE_CHECKING, Dict
|
||||
|
||||
from ...feature import Feature, FeatureType
|
||||
from ..smartmodule import SmartModule
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..smartdevice import SmartDevice
|
||||
|
||||
|
||||
class Brightness(SmartModule):
|
||||
"""Implementation of brightness module."""
|
||||
|
||||
REQUIRED_COMPONENT = "brightness"
|
||||
|
||||
def __init__(self, device: "SmartDevice", module: str):
|
||||
super().__init__(device, module)
|
||||
self._add_feature(
|
||||
Feature(
|
||||
device,
|
||||
"Brightness",
|
||||
container=self,
|
||||
attribute_getter="brightness",
|
||||
attribute_setter="set_brightness",
|
||||
minimum_value=1,
|
||||
maximum_value=100,
|
||||
type=FeatureType.Number,
|
||||
)
|
||||
)
|
||||
|
||||
def query(self) -> Dict:
|
||||
"""Query to execute during the update cycle."""
|
||||
# Brightness is contained in the main device info response.
|
||||
return {}
|
||||
|
||||
@property
|
||||
def brightness(self):
|
||||
"""Return current brightness."""
|
||||
return self.data["brightness"]
|
||||
|
||||
async def set_brightness(self, brightness: int):
|
||||
"""Set the brightness."""
|
||||
return await self.call("set_device_info", {"brightness": brightness})
|
@ -53,14 +53,19 @@ class SmartModule(Module):
|
||||
def data(self):
|
||||
"""Return response data for the module.
|
||||
|
||||
If module performs only a single query, the resulting response is unwrapped.
|
||||
If the module performs only a single query, the resulting response is unwrapped.
|
||||
If the module does not define a query, this property returns a reference
|
||||
to the main "get_device_info" response.
|
||||
"""
|
||||
dev = self._device
|
||||
q = self.query()
|
||||
|
||||
if not q:
|
||||
return dev.internal_state["get_device_info"]
|
||||
|
||||
q_keys = list(q.keys())
|
||||
query_key = q_keys[0]
|
||||
|
||||
dev = self._device
|
||||
|
||||
# TODO: hacky way to check if update has been called.
|
||||
# The way this falls back to parent may not always be wanted.
|
||||
# Especially, devices can have their own firmware updates.
|
||||
|
@ -249,8 +249,6 @@ device_iot = parametrize(
|
||||
"devices iot", model_filter=ALL_DEVICES_IOT, protocol_filter={"IOT"}
|
||||
)
|
||||
|
||||
brightness = parametrize("brightness smart", component_filter="brightness")
|
||||
|
||||
|
||||
def check_categories():
|
||||
"""Check that every fixture file is categorized."""
|
||||
|
@ -1,12 +1,28 @@
|
||||
from kasa.smart import SmartDevice
|
||||
import pytest
|
||||
|
||||
from .conftest import (
|
||||
brightness,
|
||||
)
|
||||
from kasa.smart import SmartDevice
|
||||
from kasa.tests.conftest import parametrize
|
||||
|
||||
brightness = parametrize("brightness smart", component_filter="brightness")
|
||||
|
||||
|
||||
@brightness
|
||||
async def test_brightness_component(dev: SmartDevice):
|
||||
"""Placeholder to test framwework component filter."""
|
||||
"""Test brightness feature."""
|
||||
assert isinstance(dev, SmartDevice)
|
||||
assert "brightness" in dev._components
|
||||
|
||||
# Test getting the value
|
||||
feature = dev.features["brightness"]
|
||||
assert isinstance(feature.value, int)
|
||||
assert feature.value > 0 and feature.value <= 100
|
||||
|
||||
# Test setting the value
|
||||
await feature.set_value(10)
|
||||
assert feature.value == 10
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
await feature.set_value(feature.minimum_value - 10)
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
await feature.set_value(feature.maximum_value + 10)
|
||||
|
Loading…
Reference in New Issue
Block a user