Source code for miio.integrations.scishare.coffee.scishare_coffeemaker

import logging
from enum import IntEnum

import click

from miio import Device, DeviceStatus
from miio.click_common import command, format_output
from miio.devicestatus import sensor

_LOGGER = logging.getLogger(__name__)

MODEL = "scishare.coffee.s1102"


[docs] class Status(IntEnum): Unknown = -1 Off = 1 On = 2 SelfCheck = 3 StopPreheat = 4 CoffeeReady = 5 StopDescaling = 6 Standby = 7 Preheating = 8 Brewing = 201 NoWater = 203
[docs] class ScishareCoffeeStatus(DeviceStatus): def __init__(self, data): self.data = data
[docs] @sensor("Status") def state(self) -> Status: status_code = self.data[1] try: return Status(status_code) except ValueError: _LOGGER.warning( "Status code unknown, please report the state of the machine for code %s", status_code, ) return Status.Unknown
[docs] class ScishareCoffee(Device): """Main class for Scishare coffee maker (scishare.coffee.s1102).""" _supported_models = ["scishare.coffee.s1102"]
[docs] @command() def status(self) -> ScishareCoffeeStatus: """Device status.""" return ScishareCoffeeStatus(self.send("Query_Machine_Status"))
[docs] @command( click.argument("temperature", type=int), default_output=format_output("Setting preheat to {temperature}"), ) def preheat(self, temperature: int): """Pre-heat to given temperature.""" return self.send("Boiler_Preheating_Set", [temperature])
[docs] @command(default_output=format_output("Stopping pre-heating")) def stop_preheat(self) -> bool: """Stop pre-heating.""" return self.send("Stop_Boiler_Preheat")[0] == "ok"
[docs] @command() def cancel_alarm(self) -> bool: """Unknown.""" raise NotImplementedError() return self.send("Cancel_Work_Alarm")[0] == "ok"
[docs] @command( click.argument("amount", type=int), click.argument("temperature", type=int), default_output=format_output("Boiling {amount} ml water ({temperature}C)"), ) def boil_water(self, amount: int, temperature: int) -> bool: """Boil water. :param amount: in milliliters :param temperature: in degrees """ return self.send("Hot_Wate", [amount, temperature])[0] == "ok"
[docs] @command( click.argument("amount", type=int), click.argument("temperature", type=int), default_output=format_output("Brewing {amount} ml espresso ({temperature}C)"), ) def brew_espresso(self, amount: int, temperature: int): """Brew espresso. :param amount: in milliliters :param temperature: in degrees """ return self.send("Espresso_Coffee", [amount, temperature])[0] == "ok"
[docs] @command( click.argument("water_amount", type=int), click.argument("water_temperature", type=int), click.argument("coffee_amount", type=int), click.argument("coffee_temperature", type=int), default_output=format_output( "Brewing americano using {water_amount} ({water_temperature}C) water and {coffee_amount} ml ({coffee_temperature}C) coffee" ), ) def brew_americano( self, water_amount: int, water_temperature: int, coffee_amount: int, coffee_temperature: int, ) -> bool: """Brew americano. :param water_amount: water in milliliters :param water_temperature: water temperature :param coffee_amount: coffee amount in milliliters :param coffee_temperature: coffee temperature """ return ( self.send( "Americano_Coffee", [water_amount, water_temperature, coffee_amount, coffee_temperature], )[0] == "ok" )
[docs] @command(default_output=format_output("Powering on")) def on(self) -> bool: """Power on.""" return self.send("Machine_ON")[0] == "ok"
[docs] @command(default_output=format_output("Powering off")) def off(self) -> bool: """Power off.""" return self.send("Machine_OFF")[0] == "ok"
[docs] @command() def buzzer_frequency(self): """Unknown.""" raise NotImplementedError() return self.send("Buzzer_Frequency_Time")[0] == "ok"