Midea/midea_ac_lan/midea/devices/ea/device.py

116 lines
4.7 KiB
Python
Raw Normal View History

2023-09-22 05:45:40 +00:00
import logging
from .message import (
MessageQuery,
MessageEAResponse
)
try:
from enum import StrEnum
except ImportError:
from ...backports.enum import StrEnum
from ...core.device import MiedaDevice
_LOGGER = logging.getLogger(__name__)
class DeviceAttributes(StrEnum):
cooking = "cooking"
keep_warm = "keep_warm"
mode = "mode"
time_remaining = "time_remaining"
keep_warm_time = "keep_warm_time"
top_temperature = "top_temperature"
bottom_temperature = "bottom_temperature"
progress = "progress"
class MideaEADevice(MiedaDevice):
_mode_list = [
"smart", "reserve", "cook_rice", "fast_cook_rice", "standard_cook_rice",
"gruel", "cook_congee", "stew_soup", "stewing", "heat_rice", "make_cake",
"yoghourt", "soup_rice", "coarse_rice", "five_ceeals_rice", "eight_treasures_rice",
"crispy_rice", "shelled_rice", "eight_treasures_congee", "infant_congee",
"older_rice", "rice_soup", "rice_paste", "egg_custard", "warm_milk",
"hot_spring_egg", "millet_congee", "firewood_rice", "few_rice",
"red_potato", "corn", "quick_freeze_bun", "steam_ribs", "steam_egg",
"coarse_congee", "steep_rice", "appetizing_congee", "corn_congee",
"sprout_rice", "luscious_rice", "luscious_boiled", "fast_rice", "fast_boil",
"bean_rice_congee", "fast_congee", "baby_congee", "cook_soup", "congee_coup",
"steam_corn", "steam_red_potato", "boil_congee", "delicious_steam", "boil_egg",
"rice_wine", "fruit_vegetable_paste", "vegetable_porridge", "pork_porridge",
"fragrant_rice", "assorte_rice", "steame_fish", "baby_rice", "essence_rice",
"fragrant_dense_congee", "one_two_cook", "original_steame", "hot_fast_rice",
"online_celebrity_rice", "sushi_rice", "stone_bowl_rice", "no_water_treat",
"keep_fresh", "low_sugar_rice", "black_buckwheat_rice", "resveratrol_rice",
"yellow_wheat_rice", "green_buckwheat_rice", "roughage_rice", "millet_mixed_rice",
"iron_pan_rice", "olla_pan_rice", "vegetable_rice", "baby_side", "regimen_congee",
"earthen_pot_congee", "regimen_soup", "pottery_jar_soup", "canton_soup",
"nutrition_stew", "northeast_stew", "uncap_boil", "trichromatic_coarse_grain",
"four_color_vegetables", "egg", "chop",
] + ["unknown"] * 98 + ["clean"] + ["unknown"] * 5 + ["keep_warm"]
_progress = ["Idle", "Delay", "Cooking", "Keep-warm"]
def __init__(
self,
name: str,
device_id: int,
ip_address: str,
port: int,
token: str,
key: str,
protocol: int,
model: str,
customize: str
):
super().__init__(
name=name,
device_id=device_id,
device_type=0xEA,
ip_address=ip_address,
port=port,
token=token,
key=key,
protocol=protocol,
model=model,
attributes={
DeviceAttributes.cooking: False,
DeviceAttributes.keep_warm: False,
DeviceAttributes.mode: 0,
DeviceAttributes.time_remaining: None,
DeviceAttributes.top_temperature: None,
DeviceAttributes.bottom_temperature: None,
DeviceAttributes.keep_warm_time: None,
DeviceAttributes.progress: "Unknown"
})
def build_query(self):
return [MessageQuery(self._device_protocol_version)]
def process_message(self, msg):
message = MessageEAResponse(msg)
_LOGGER.debug(f"[{self.device_id}] Received: {message}")
new_status = {}
for status in self._attributes.keys():
if hasattr(message, str(status)):
value = getattr(message, str(status))
if status == DeviceAttributes.progress:
if value < len(MideaEADevice._progress):
self._attributes[status] = MideaEADevice._progress[value]
else:
self._attributes[status] = "Unknown"
elif status == DeviceAttributes.mode:
if value < len(MideaEADevice._mode_list):
self._attributes[status] = MideaEADevice._mode_list[value]
else:
self._attributes[status] = "Cloud"
else:
self._attributes[status] = value
new_status[str(status)] = self._attributes[status]
return new_status
def set_attribute(self, attr, value):
pass
class MideaAppliance(MideaEADevice):
pass