From 9d22859eec1f03737b49e1639bc9ed2bedcbf5ce Mon Sep 17 00:00:00 2001 From: sususweet Date: Sun, 28 Sep 2025 21:03:25 +0800 Subject: [PATCH] feat: add device support for T0xB2 --- .../midea_auto_cloud/device_mapping/T0xB2.py | 183 ++++++++++++++++++ .../midea_auto_cloud/translations/en.json | 99 +++++++++- .../translations/zh-Hans.json | 99 +++++++++- 3 files changed, 375 insertions(+), 6 deletions(-) create mode 100644 custom_components/midea_auto_cloud/device_mapping/T0xB2.py diff --git a/custom_components/midea_auto_cloud/device_mapping/T0xB2.py b/custom_components/midea_auto_cloud/device_mapping/T0xB2.py new file mode 100644 index 0000000..c2a6e7d --- /dev/null +++ b/custom_components/midea_auto_cloud/device_mapping/T0xB2.py @@ -0,0 +1,183 @@ +from homeassistant.const import Platform, UnitOfTemperature, UnitOfTime +from homeassistant.components.sensor import SensorStateClass, SensorDeviceClass +from homeassistant.components.binary_sensor import BinarySensorDeviceClass +from homeassistant.components.switch import SwitchDeviceClass + +DEVICE_MAPPING = { + "default": { + "rationale": ["off", "on"], + "queries": [{}], + "centralized": [ + "work_status", "work_mode", "lock", "furnace_light", + "dissipate_heat", "pre_heat", "door_open", "lack_water" + ], + "entities": { + Platform.BINARY_SENSOR: { + "lock": { + "device_class": BinarySensorDeviceClass.LOCK, + }, + "furnace_light": { + "device_class": BinarySensorDeviceClass.LIGHT, + }, + "dissipate_heat": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "pre_heat": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "door_open": { + "device_class": BinarySensorDeviceClass.DOOR, + }, + "lack_water": { + "device_class": BinarySensorDeviceClass.PROBLEM, + }, + "high_temperature_work": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "lack_box": { + "device_class": BinarySensorDeviceClass.PROBLEM, + }, + "clean_sink_ponding": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "clean_scale": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "flip_side": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "reaction": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "ramadan": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "change_water": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "execute": { + "device_class": BinarySensorDeviceClass.RUNNING, + } + }, + Platform.SELECT: { + "work_status": { + "options": { + "standby": {"work_status": "standby"}, + "working": {"work_status": "working"}, + "pause": {"work_status": "pause"}, + "finish": {"work_status": "finish"}, + "error": {"work_status": "error"} + } + }, + "work_mode": { + "options": { + "off": {"work_mode": "0"}, + "steam": {"work_mode": "1"}, + "cook": {"work_mode": "2"}, + "fry": {"work_mode": "3"}, + "bake": {"work_mode": "4"}, + "roast": {"work_mode": "5"}, + "stew": {"work_mode": "6"}, + "soup": {"work_mode": "7"}, + "rice": {"work_mode": "8"}, + "porridge": {"work_mode": "9"}, + "yogurt": {"work_mode": "10"}, + "ferment": {"work_mode": "11"}, + "defrost": {"work_mode": "12"}, + "keep_warm": {"work_mode": "13"}, + "clean": {"work_mode": "14"}, + "custom": {"work_mode": "ff"} + } + } + }, + Platform.SENSOR: { + "work_hour": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "work_minute": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "work_second": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.SECONDS, + "state_class": SensorStateClass.MEASUREMENT + }, + "cur_temperature_above": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "cur_temperature_underside": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "temperature": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "weight": { + "device_class": SensorDeviceClass.WEIGHT, + "unit_of_measurement": "g", + "state_class": SensorStateClass.MEASUREMENT + }, + "people_number": { + "device_class": SensorDeviceClass.NONE, + "state_class": SensorStateClass.MEASUREMENT + }, + "steam_quantity": { + "device_class": SensorDeviceClass.NONE, + "state_class": SensorStateClass.MEASUREMENT + }, + "totalstep": { + "device_class": SensorDeviceClass.NONE, + "state_class": SensorStateClass.MEASUREMENT + }, + "stepnum": { + "device_class": SensorDeviceClass.NONE, + "state_class": SensorStateClass.MEASUREMENT + }, + "hour_set": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "minute_set": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "second_set": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.SECONDS, + "state_class": SensorStateClass.MEASUREMENT + }, + "ota": { + "device_class": SensorDeviceClass.NONE, + "state_class": SensorStateClass.MEASUREMENT + }, + "error_code": { + "device_class": SensorDeviceClass.NONE, + "state_class": SensorStateClass.MEASUREMENT + }, + "version": { + "device_class": SensorDeviceClass.NONE, + "state_class": SensorStateClass.MEASUREMENT + }, + "cbs_version": { + "device_class": SensorDeviceClass.NONE, + "state_class": SensorStateClass.MEASUREMENT + }, + "cloudmenuid": { + "device_class": SensorDeviceClass.NONE, + "state_class": SensorStateClass.MEASUREMENT + } + } + } + } +} diff --git a/custom_components/midea_auto_cloud/translations/en.json b/custom_components/midea_auto_cloud/translations/en.json index d6884b8..a81156c 100644 --- a/custom_components/midea_auto_cloud/translations/en.json +++ b/custom_components/midea_auto_cloud/translations/en.json @@ -294,9 +294,6 @@ "work_mode": { "name": "Work Mode" }, - "work_status": { - "name": "Work Status" - }, "func_select": { "name": "Func Select" }, @@ -308,6 +305,9 @@ }, "water_quality": { "name": "Water Quality" + }, + "work_status": { + "name": "Work Status" } }, "sensor": { @@ -958,6 +958,54 @@ }, "waterday_lowbyte": { "name": "Waterday Lowbyte" + }, + "work_hour": { + "name": "Work Hour" + }, + "work_minute": { + "name": "Work Minute" + }, + "work_second": { + "name": "Work Second" + }, + "cur_temperature_above": { + "name": "Current Temperature Above" + }, + "cur_temperature_underside": { + "name": "Current Temperature Underside" + }, + "weight": { + "name": "Weight" + }, + "people_number": { + "name": "People Number" + }, + "steam_quantity": { + "name": "Steam Quantity" + }, + "totalstep": { + "name": "Total Step" + }, + "stepnum": { + "name": "Step Number" + }, + "hour_set": { + "name": "Hour Set" + }, + "minute_set": { + "name": "Minute Set" + }, + "second_set": { + "name": "Second Set" + }, + "ota": { + "name": "OTA" + }, + "cbs_version": { + "name": "CBS Version" + }, + "cloudmenuid": { + "name": "Cloud Menu ID" } }, "binary_sensor": { @@ -1047,6 +1095,51 @@ }, "sensor_error": { "name": "Sensor Error" + }, + "lock": { + "name": "Lock" + }, + "furnace_light": { + "name": "Furnace Light" + }, + "dissipate_heat": { + "name": "Dissipate Heat" + }, + "pre_heat": { + "name": "Pre Heat" + }, + "door_open": { + "name": "Door Open" + }, + "lack_water": { + "name": "Lack Water" + }, + "high_temperature_work": { + "name": "High Temperature Work" + }, + "lack_box": { + "name": "Lack Box" + }, + "clean_sink_ponding": { + "name": "Clean Sink Ponding" + }, + "clean_scale": { + "name": "Clean Scale" + }, + "flip_side": { + "name": "Flip Side" + }, + "reaction": { + "name": "Reaction" + }, + "ramadan": { + "name": "Ramadan" + }, + "change_water": { + "name": "Change Water" + }, + "execute": { + "name": "Execute" } }, "climate": { diff --git a/custom_components/midea_auto_cloud/translations/zh-Hans.json b/custom_components/midea_auto_cloud/translations/zh-Hans.json index 57d6b3d..15ac285 100644 --- a/custom_components/midea_auto_cloud/translations/zh-Hans.json +++ b/custom_components/midea_auto_cloud/translations/zh-Hans.json @@ -200,6 +200,51 @@ }, "sensor_error": { "name": "传感器错误" + }, + "lock": { + "name": "锁定" + }, + "furnace_light": { + "name": "炉灯" + }, + "dissipate_heat": { + "name": "散热" + }, + "pre_heat": { + "name": "预热" + }, + "door_open": { + "name": "门开启" + }, + "lack_water": { + "name": "缺水" + }, + "high_temperature_work": { + "name": "高温工作" + }, + "lack_box": { + "name": "缺盒" + }, + "clean_sink_ponding": { + "name": "清洁水槽积水" + }, + "clean_scale": { + "name": "清洁水垢" + }, + "flip_side": { + "name": "翻面" + }, + "reaction": { + "name": "反应" + }, + "ramadan": { + "name": "斋月" + }, + "change_water": { + "name": "换水" + }, + "execute": { + "name": "执行" } }, "climate": { @@ -408,9 +453,6 @@ "work_mode": { "name": "工作模式" }, - "work_status": { - "name": "工作状态" - }, "func_select": { "name": "功能选择" }, @@ -422,6 +464,9 @@ }, "water_quality": { "name": "水质" + }, + "work_status": { + "name": "工作状态" } }, "sensor": { @@ -1075,6 +1120,54 @@ }, "waterday_lowbyte": { "name": "日用水低字节" + }, + "work_hour": { + "name": "工作小时" + }, + "work_minute": { + "name": "工作分钟" + }, + "work_second": { + "name": "工作秒" + }, + "cur_temperature_above": { + "name": "当前温度(上)" + }, + "cur_temperature_underside": { + "name": "当前温度(下)" + }, + "weight": { + "name": "重量" + }, + "people_number": { + "name": "人数" + }, + "steam_quantity": { + "name": "蒸汽量" + }, + "totalstep": { + "name": "总步数" + }, + "stepnum": { + "name": "步数" + }, + "hour_set": { + "name": "设置小时" + }, + "minute_set": { + "name": "设置分钟" + }, + "second_set": { + "name": "设置秒" + }, + "ota": { + "name": "OTA" + }, + "cbs_version": { + "name": "CBS版本" + }, + "cloudmenuid": { + "name": "云菜单ID" } }, "switch": {