mirror of
				https://github.com/python-kasa/python-kasa.git
				synced 2025-11-03 22:22:06 +00:00 
			
		
		
		
	Convert carpet_clean_mode to carpet_boost switch (#1486)
This commit is contained in:
		@@ -4,7 +4,7 @@ from __future__ import annotations
 | 
			
		||||
 | 
			
		||||
import logging
 | 
			
		||||
from datetime import timedelta
 | 
			
		||||
from enum import IntEnum, StrEnum
 | 
			
		||||
from enum import IntEnum
 | 
			
		||||
from typing import Annotated, Literal
 | 
			
		||||
 | 
			
		||||
from ...feature import Feature
 | 
			
		||||
@@ -58,13 +58,6 @@ class FanSpeed(IntEnum):
 | 
			
		||||
    Ultra = 5
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CarpetCleanMode(StrEnum):
 | 
			
		||||
    """Carpet clean mode."""
 | 
			
		||||
 | 
			
		||||
    Normal = "normal"
 | 
			
		||||
    Boost = "boost"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AreaUnit(IntEnum):
 | 
			
		||||
    """Area unit."""
 | 
			
		||||
 | 
			
		||||
@@ -184,15 +177,14 @@ class Clean(SmartModule):
 | 
			
		||||
        self._add_feature(
 | 
			
		||||
            Feature(
 | 
			
		||||
                self._device,
 | 
			
		||||
                id="carpet_clean_mode",
 | 
			
		||||
                name="Carpet clean mode",
 | 
			
		||||
                id="carpet_boost",
 | 
			
		||||
                name="Carpet boost",
 | 
			
		||||
                container=self,
 | 
			
		||||
                attribute_getter="carpet_clean_mode",
 | 
			
		||||
                attribute_setter="set_carpet_clean_mode",
 | 
			
		||||
                attribute_getter="carpet_boost",
 | 
			
		||||
                attribute_setter="set_carpet_boost",
 | 
			
		||||
                icon="mdi:rug",
 | 
			
		||||
                choices_getter=lambda: list(CarpetCleanMode.__members__),
 | 
			
		||||
                category=Feature.Category.Config,
 | 
			
		||||
                type=Feature.Type.Choice,
 | 
			
		||||
                type=Feature.Type.Switch,
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        self._add_feature(
 | 
			
		||||
@@ -380,22 +372,14 @@ class Clean(SmartModule):
 | 
			
		||||
            return Status.UnknownInternal
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def carpet_clean_mode(self) -> Annotated[str, FeatureAttribute()]:
 | 
			
		||||
        """Return carpet clean mode."""
 | 
			
		||||
        return CarpetCleanMode(self.data["getCarpetClean"]["carpet_clean_prefer"]).name
 | 
			
		||||
    def carpet_boost(self) -> bool:
 | 
			
		||||
        """Return carpet boost mode."""
 | 
			
		||||
        return self.data["getCarpetClean"]["carpet_clean_prefer"] == "boost"
 | 
			
		||||
 | 
			
		||||
    async def set_carpet_clean_mode(
 | 
			
		||||
        self, mode: str
 | 
			
		||||
    ) -> Annotated[dict, FeatureAttribute()]:
 | 
			
		||||
    async def set_carpet_boost(self, on: bool) -> dict:
 | 
			
		||||
        """Set carpet clean mode."""
 | 
			
		||||
        name_to_value = {x.name: x.value for x in CarpetCleanMode}
 | 
			
		||||
        if mode not in name_to_value:
 | 
			
		||||
            raise ValueError(
 | 
			
		||||
                "Invalid carpet clean mode %s, available %s", mode, name_to_value
 | 
			
		||||
            )
 | 
			
		||||
        return await self.call(
 | 
			
		||||
            "setCarpetClean", {"carpet_clean_prefer": name_to_value[mode]}
 | 
			
		||||
        )
 | 
			
		||||
        mode = "boost" if on else "normal"
 | 
			
		||||
        return await self.call("setCarpetClean", {"carpet_clean_prefer": mode})
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def area_unit(self) -> AreaUnit:
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ clean = parametrize("clean module", component_filter="clean", protocol_filter={"
 | 
			
		||||
        ("vacuum_status", "status", Status),
 | 
			
		||||
        ("vacuum_error", "error", ErrorCode),
 | 
			
		||||
        ("vacuum_fan_speed", "fan_speed_preset", str),
 | 
			
		||||
        ("carpet_clean_mode", "carpet_clean_mode", str),
 | 
			
		||||
        ("carpet_boost", "carpet_boost", bool),
 | 
			
		||||
        ("battery_level", "battery", int),
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
@@ -71,11 +71,11 @@ async def test_features(dev: SmartDevice, feature: str, prop_name: str, type: ty
 | 
			
		||||
            id="vacuum_fan_speed",
 | 
			
		||||
        ),
 | 
			
		||||
        pytest.param(
 | 
			
		||||
            "carpet_clean_mode",
 | 
			
		||||
            "Boost",
 | 
			
		||||
            "carpet_boost",
 | 
			
		||||
            True,
 | 
			
		||||
            "setCarpetClean",
 | 
			
		||||
            {"carpet_clean_prefer": "boost"},
 | 
			
		||||
            id="carpet_clean_mode",
 | 
			
		||||
            id="carpet_boost",
 | 
			
		||||
        ),
 | 
			
		||||
        pytest.param(
 | 
			
		||||
            "clean_count",
 | 
			
		||||
@@ -218,13 +218,6 @@ async def test_unknown_status(
 | 
			
		||||
            "Invalid fan speed",
 | 
			
		||||
            id="vacuum_fan_speed",
 | 
			
		||||
        ),
 | 
			
		||||
        pytest.param(
 | 
			
		||||
            "carpet_clean_mode",
 | 
			
		||||
            "invalid mode",
 | 
			
		||||
            ValueError,
 | 
			
		||||
            "Invalid carpet clean mode",
 | 
			
		||||
            id="carpet_clean_mode",
 | 
			
		||||
        ),
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
async def test_invalid_settings(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user