Source code for miio.integrations.tinymu.toiletlid.toiletlid

import enum
import logging
from typing import Any, Dict, List

import click

from miio import Device, DeviceStatus
from miio.click_common import EnumType, command, format_output

_LOGGER = logging.getLogger(__name__)

MODEL_TOILETLID_V1 = "tinymu.toiletlid.v1"

AVAILABLE_PROPERTIES_COMMON = ["work_state", "filter_use_flux", "filter_use_time"]

AVAILABLE_PROPERTIES = {MODEL_TOILETLID_V1: AVAILABLE_PROPERTIES_COMMON}


[docs] class AmbientLightColor(enum.Enum): White = "0" Yellow = "1" Powder = "2" Green = "3" Purple = "4" Blue = "5" Orange = "6" Red = "7"
[docs] class ToiletlidOperatingMode(enum.Enum): Vacant = 0 Occupied = 1 RearCleanse = 2 FrontCleanse = 3 NozzleClean = 6
[docs] class ToiletlidStatus(DeviceStatus): def __init__(self, data: Dict[str, Any]) -> None: # {"work_state": 1,"filter_use_flux": 100,"filter_use_time": 180, "ambient_light": "Red"} self.data = data @property def work_state(self) -> int: """Device state code.""" return self.data["work_state"] @property def work_mode(self) -> ToiletlidOperatingMode: """Device working mode.""" return ToiletlidOperatingMode((self.work_state - 1) // 16) @property def is_on(self) -> bool: return self.work_state != 1 @property def filter_use_percentage(self) -> str: """Filter percentage of remaining life.""" return "{}%".format(self.data["filter_use_flux"]) @property def filter_remaining_time(self) -> int: """Filter remaining life days.""" return self.data["filter_use_time"] @property def ambient_light(self) -> str: """Ambient light color.""" return self.data["ambient_light"]
[docs] class Toiletlid(Device): """Support for tinymu.toiletlid.v1.""" _supported_models = list(AVAILABLE_PROPERTIES.keys())
[docs] @command( default_output=format_output( "", "Work: {result.is_on}\n" "State: {result.work_state}\n" "Work Mode: {result.work_mode}\n" "Ambient Light: {result.ambient_light}\n" "Filter remaining: {result.filter_use_percentage}\n" "Filter remaining time: {result.filter_remaining_time}\n", ) ) def status(self) -> ToiletlidStatus: """Retrieve properties.""" properties = AVAILABLE_PROPERTIES.get( self.model, AVAILABLE_PROPERTIES[MODEL_TOILETLID_V1] ) values = self.get_properties(properties) color = self.get_ambient_light() return ToiletlidStatus(dict(zip(properties, values), ambient_light=color))
[docs] @command(default_output=format_output("Nozzle clean")) def nozzle_clean(self): """Nozzle clean.""" return self.send("nozzle_clean", ["on"])
[docs] @command( click.argument("color", type=EnumType(AmbientLightColor)), click.argument("xiaomi_id", type=str, default=""), default_output=format_output( "Set the ambient light to {color} color the next time you start it." ), ) def set_ambient_light(self, color: AmbientLightColor, xiaomi_id: str = ""): """Set Ambient light color.""" return self.send("set_aled_v_of_uid", [xiaomi_id, color.value])
[docs] @command( click.argument("xiaomi_id", type=str, default=""), default_output=format_output("Get the Ambient light color."), ) def get_ambient_light(self, xiaomi_id: str = "") -> str: """Get Ambient light color.""" color = self.send("get_aled_v_of_uid", [xiaomi_id]) try: return AmbientLightColor(color[0]).name except ValueError: _LOGGER.warning( "Get ambient light response error, return unknown value: %s.", color[0] ) return "Unknown"
[docs] @command(default_output=format_output("Get user list.")) def get_all_user_info(self) -> List[Dict]: """Get All bind user.""" users = self.send("get_all_user_info") return users
[docs] @command( click.argument("xiaomi_id", type=str), click.argument("band_mac", type=str), click.argument("alias", type=str), default_output=format_output("Bind xiaomi band to xiaomi id."), ) def bind_xiaomi_band(self, xiaomi_id: str, band_mac: str, alias: str): """Bind xiaomi band to xiaomi id.""" return self.send("uid_mac_op", [xiaomi_id, band_mac, alias, "bind"])
[docs] @command( click.argument("xiaomi_id", type=str), click.argument("band_mac", type=str), default_output=format_output("Unbind xiaomi band to xiaomi id."), ) def unbind_xiaomi_band(self, xiaomi_id: str, band_mac: str): """Unbind xiaomi band to xiaomi id.""" return self.send("uid_mac_op", [xiaomi_id, band_mac, "", "unbind"])