diff --git a/README.md b/README.md index 26bc522..3aafb53 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,28 @@ ## 目前支持的设备类型 - T0xAC 空调 +- T0xB3 消毒碗柜 - T0xB8 智能扫地机器人 +- T0xCE 新风机 +- T0xCF 中央空调暖家 +- T0xD9 复式洗衣机 +- T0xDB 滚筒洗衣机 +- T0xDC 干衣机 - T0xE1 洗碗机 - T0xEA 电饭锅 - T0xED 软水机 +- T0xFD 加湿器 欢迎合作开发添加更多设备支持。 +合作开发方法:添加本插件后,找到未能正确识别的设备,点击对应设备`传感器`分类下的`连通性`: + +![img.png](img.png) + +展开下面的`属性`卡片,把里面这些字段复制给我或随issue提交,等待适配就可以了。 + +![img_1.png](img_1.png) + ## 实体映射 映射文件位于`device_mapping`下, 每个大的品类一个映射文件,目前支持映射的实体类型如下: diff --git a/custom_components/midea_auto_cloud/__init__.py b/custom_components/midea_auto_cloud/__init__.py index ba02ced..4ecd64d 100644 --- a/custom_components/midea_auto_cloud/__init__.py +++ b/custom_components/midea_auto_cloud/__init__.py @@ -53,7 +53,8 @@ PLATFORMS: list[Platform] = [ Platform.CLIMATE, Platform.SELECT, Platform.WATER_HEATER, - Platform.FAN + Platform.FAN, + Platform.HUMIDIFIER ] diff --git a/custom_components/midea_auto_cloud/device_mapping/T0xB3.py b/custom_components/midea_auto_cloud/device_mapping/T0xB3.py new file mode 100644 index 0000000..1653f68 --- /dev/null +++ b/custom_components/midea_auto_cloud/device_mapping/T0xB3.py @@ -0,0 +1,199 @@ +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": [ + "upstair_work_status", "downstair_work_status", "middlestair_work_status", + "upstair_mode", "downstair_mode", "middlestair_mode", + "upstair_temp", "downstair_temp", "middlestair_temp" + ], + "entities": { + Platform.BINARY_SENSOR: { + "door_middlestair": { + "device_class": BinarySensorDeviceClass.DOOR, + }, + "door_upstair": { + "device_class": BinarySensorDeviceClass.DOOR, + }, + "door_downstair": { + "device_class": BinarySensorDeviceClass.DOOR, + }, + "downstair_ispreheat": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "upstair_ispreheat": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "downstair_iscooling": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "upstair_iscooling": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "middlestair_ispreheat": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "middlestair_iscooling": { + "device_class": BinarySensorDeviceClass.RUNNING, + }, + "lock": { + "device_class": BinarySensorDeviceClass.LOCK, + }, + "is_error": { + "device_class": BinarySensorDeviceClass.PROBLEM, + }, + "uv_disinfect": { + "device_class": BinarySensorDeviceClass.RUNNING, + } + }, + Platform.SELECT: { + "upstair_work_status": { + "options": { + "power_off": {"upstair_work_status": "power_off"}, + "power_on": {"upstair_work_status": "power_on"}, + "working": {"upstair_work_status": "working"}, + "pause": {"upstair_work_status": "pause"}, + "finish": {"upstair_work_status": "finish"}, + "error": {"upstair_work_status": "error"} + } + }, + "downstair_work_status": { + "options": { + "power_off": {"downstair_work_status": "power_off"}, + "power_on": {"downstair_work_status": "power_on"}, + "working": {"downstair_work_status": "working"}, + "pause": {"downstair_work_status": "pause"}, + "finish": {"downstair_work_status": "finish"}, + "error": {"downstair_work_status": "error"} + } + }, + "middlestair_work_status": { + "options": { + "power_off": {"middlestair_work_status": "power_off"}, + "power_on": {"middlestair_work_status": "power_on"}, + "working": {"middlestair_work_status": "working"}, + "pause": {"middlestair_work_status": "pause"}, + "finish": {"middlestair_work_status": "finish"}, + "error": {"middlestair_work_status": "error"} + } + }, + "upstair_mode": { + "options": { + "off": {"upstair_mode": "0"}, + "bake": {"upstair_mode": "1"}, + "roast": {"upstair_mode": "2"}, + "grill": {"upstair_mode": "3"}, + "convection": {"upstair_mode": "4"}, + "defrost": {"upstair_mode": "5"} + } + }, + "downstair_mode": { + "options": { + "off": {"downstair_mode": "0"}, + "bake": {"downstair_mode": "1"}, + "roast": {"downstair_mode": "2"}, + "grill": {"downstair_mode": "3"}, + "convection": {"downstair_mode": "4"}, + "defrost": {"downstair_mode": "5"} + } + }, + "middlestair_mode": { + "options": { + "off": {"middlestair_mode": "0"}, + "bake": {"middlestair_mode": "1"}, + "roast": {"middlestair_mode": "2"}, + "grill": {"middlestair_mode": "3"}, + "convection": {"middlestair_mode": "4"}, + "defrost": {"middlestair_mode": "5"} + } + } + }, + Platform.SENSOR: { + "upstair_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "downstair_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "middlestair_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "upstair_hour": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "upstair_min": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "upstair_sec": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.SECONDS, + "state_class": SensorStateClass.MEASUREMENT + }, + "middlestair_hour": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "middlestair_min": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "middlestair_sec": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.SECONDS, + "state_class": SensorStateClass.MEASUREMENT + }, + "downstair_hour": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "downstair_min": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "downstair_sec": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.SECONDS, + "state_class": SensorStateClass.MEASUREMENT + }, + "order_hour": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "order_min": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "order_sec": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.SECONDS, + "state_class": SensorStateClass.MEASUREMENT + }, + "version": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + } + } + } + } +} diff --git a/custom_components/midea_auto_cloud/device_mapping/T0xCE.py b/custom_components/midea_auto_cloud/device_mapping/T0xCE.py new file mode 100644 index 0000000..ecb8bdb --- /dev/null +++ b/custom_components/midea_auto_cloud/device_mapping/T0xCE.py @@ -0,0 +1,187 @@ +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": [ + "power", "mode_state", "fan_set", "room_temp_value", "humidity_set" + ], + "entities": { + Platform.SWITCH: { + "lock_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "esp_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "passby_enable": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "preheat_enable": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "remain_able": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "hcho_check_enable": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "co2_check_enable": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "function_set_link": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "function_set_sleep": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "function_set_energy_save": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "function_set_prheat": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "function_set_ultimate": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "clean_net_clean_flg": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "change_net_change_flg": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "condensation_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "humidity_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "preheat_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "esp_enable": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "pm25_check_enable": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "timer_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "power": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "freeze_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "humidity_check_enable": { + "device_class": SwitchDeviceClass.SWITCH, + } + }, + Platform.SELECT: { + "mode_state": { + "options": { + "passby": {"mode_state": "passby"}, + "auto": {"mode_state": "auto"}, + "manual": {"mode_state": "manual"}, + "sleep": {"mode_state": "sleep"}, + "energy_save": {"mode_state": "energy_save"}, + "ultimate": {"mode_state": "ultimate"} + } + }, + "fan_set": { + "options": { + "off": {"fan_set": "0"}, + "low": {"fan_set": "1"}, + "medium": {"fan_set": "2"}, + "high": {"fan_set": "3"}, + "auto": {"fan_set": "4"} + } + } + }, + Platform.SENSOR: { + "room_temp_value": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "clean_net_used_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "change_net_used_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "tvoc_value": { + "device_class": SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS, + "unit_of_measurement": "mg/m³", + "state_class": SensorStateClass.MEASUREMENT + }, + "change_set_real_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "clean_set_real_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "error_code": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "humidity_set": { + "device_class": SensorDeviceClass.HUMIDITY, + "unit_of_measurement": "%", + "state_class": SensorStateClass.MEASUREMENT + }, + "room_aqi_value": { + "device_class": SensorDeviceClass.AQI, + "state_class": SensorStateClass.MEASUREMENT + }, + "change_net_set_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "clean_net_set_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "humidity_value": { + "device_class": SensorDeviceClass.HUMIDITY, + "unit_of_measurement": "%", + "state_class": SensorStateClass.MEASUREMENT + }, + "hcho_value": { + "device_class": SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS, + "unit_of_measurement": "mg/m³", + "state_class": SensorStateClass.MEASUREMENT + }, + "pm25_value": { + "device_class": SensorDeviceClass.PM25, + "unit_of_measurement": "µg/m³", + "state_class": SensorStateClass.MEASUREMENT + }, + "co2_value": { + "device_class": SensorDeviceClass.CO2, + "unit_of_measurement": "ppm", + "state_class": SensorStateClass.MEASUREMENT + }, + "machine_type": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + } + } + } + } +} diff --git a/custom_components/midea_auto_cloud/device_mapping/T0xCF.py b/custom_components/midea_auto_cloud/device_mapping/T0xCF.py new file mode 100644 index 0000000..330e6c3 --- /dev/null +++ b/custom_components/midea_auto_cloud/device_mapping/T0xCF.py @@ -0,0 +1,168 @@ +from homeassistant.const import Platform, UnitOfTemperature, PRECISION_HALVES +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": [ + "power_state", "run_mode", "temp_set", "heat_enable", "cool_enable" + ], + "entities": { + Platform.CLIMATE: { + "thermostat": { + "power": "power_state", + "hvac_modes": { + "off": {"power_state": "off"}, + "heat": {"power_state": "on", "run_mode": "heat", "heat_enable": "on"}, + "cool": {"power_state": "on", "run_mode": "cool", "cool_enable": "on"}, + "auto": {"power_state": "on", "run_mode": "auto", "heat_enable": "on", "cool_enable": "on"} + }, + "target_temperature": "temp_set", + "current_temperature": "cur_temp", + "min_temp": 5, + "max_temp": 70, + "temperature_unit": UnitOfTemperature.CELSIUS, + "precision": PRECISION_HALVES, + } + }, + Platform.SWITCH: { + "freeze_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "power_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "heat_enable": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "cool_enable": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "silence_set_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "time_set_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "silence_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "holiday_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "holiday_set_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "holiday_on_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "room_temp_ctrl": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "room_temp_set": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "comp_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "day_time_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "week_time_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "warn_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "defrost_state": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "pre_heat": { + "device_class": SwitchDeviceClass.SWITCH, + } + }, + Platform.SELECT: { + "run_mode": { + "options": { + "heat": {"run_mode": "heat"}, + "cool": {"run_mode": "cool"}, + "auto": {"run_mode": "auto"}, + "fan": {"run_mode": "fan"}, + "dry": {"run_mode": "dry"} + } + }, + "temp_type": { + "options": { + "water_temperature": {"temp_type": "water_temperature"}, + "room_temperature": {"temp_type": "room_temperature"}, + "outdoor_temperature": {"temp_type": "outdoor_temperature"} + } + } + }, + Platform.SENSOR: { + "cur_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "error_code": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "heat_max_set_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "heat_min_set_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "cool_max_set_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "cool_min_set_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "auto_max_set_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "auto_min_set_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "preheat_on_set_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "preheat_max_set_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "preheat_min_set_temp": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "temp_set": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + } + } + } + } +} diff --git a/custom_components/midea_auto_cloud/device_mapping/T0xD9.py b/custom_components/midea_auto_cloud/device_mapping/T0xD9.py new file mode 100644 index 0000000..c14c7c2 --- /dev/null +++ b/custom_components/midea_auto_cloud/device_mapping/T0xD9.py @@ -0,0 +1,186 @@ +from homeassistant.const import Platform, UnitOfElectricPotential, 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": [0, 1], + "calculate": { + "get": [ + { + "lvalue": "[remaining_time]", + "rvalue": "[db_remain_time]" + } + ], + "set": { + } + }, + "entities": { + Platform.SWITCH: { + "db_power": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "db_clean_notification": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "db_softener_needed": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "db_detergent_needed": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "db_nightly_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "db_baby_lock": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "db_light": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "db_steam_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "db_fast_clean_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "db_wash_dry_link": { + "device_class": SwitchDeviceClass.SWITCH, + } + }, + Platform.SELECT: { + "db_running_status": { + "options": { + "stop": {"db_running_status": "stop"}, + "start": {"db_running_status": "start"}, + "pause": {"db_running_status": "pause"}, + "finish": {"db_running_status": "finish"}, + "error": {"db_running_status": "error"} + } + }, + "db_program": { + "options": { + "fast_wash_30": {"db_program": "fast_wash_30"}, + "normal_wash": {"db_program": "normal_wash"}, + "heavy_wash": {"db_program": "heavy_wash"}, + "delicate_wash": {"db_program": "delicate_wash"}, + "quick_wash": {"db_program": "quick_wash"}, + "eco_wash": {"db_program": "eco_wash"} + } + }, + "db_water_level": { + "options": { + "low": {"db_water_level": "1"}, + "medium": {"db_water_level": "2"}, + "high": {"db_water_level": "3"}, + "extra_high": {"db_water_level": "4"} + } + }, + "db_temperature": { + "options": { + "cold": {"db_temperature": "1"}, + "warm": {"db_temperature": "2"}, + "hot": {"db_temperature": "3"}, + "extra_hot": {"db_temperature": "4"} + } + }, + "dehydration_speed": { + "options": { + "low": {"dehydration_speed": "1"}, + "medium": {"dehydration_speed": "2"}, + "high": {"dehydration_speed": "3"}, + "extra_high": {"dehydration_speed": "4"} + } + }, + "db_detergent": { + "options": { + "none": {"db_detergent": "1"}, + "little": {"db_detergent": "2"}, + "normal": {"db_detergent": "3"}, + "more": {"db_detergent": "4"} + } + }, + "db_softener": { + "options": { + "none": {"db_softener": "1"}, + "little": {"db_softener": "2"}, + "normal": {"db_softener": "3"}, + "more": {"db_softener": "4"} + } + }, + "db_position": { + "options": { + "position_1": {"db_position": "1"}, + "position_2": {"db_position": "2"}, + "position_3": {"db_position": "3"} + } + }, + "db_location": { + "options": { + "location_1": {"db_location": "1"}, + "location_2": {"db_location": "2"}, + "location_3": {"db_location": "3"} + } + } + }, + Platform.SENSOR: { + "db_remain_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "db_progress": { + "device_class": SensorDeviceClass.BATTERY, + "unit_of_measurement": "%", + "state_class": SensorStateClass.MEASUREMENT + }, + "db_error_code": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "db_set_dewater_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "db_set_wash_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "db_device_software_version": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "db_rinse_count": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "db_wash_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "db_appointment_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "db_appointment": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "db_dehydration_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "db_cycle_memory": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + } + } + } + } +} diff --git a/custom_components/midea_auto_cloud/device_mapping/T0xDB.py b/custom_components/midea_auto_cloud/device_mapping/T0xDB.py new file mode 100644 index 0000000..192e90d --- /dev/null +++ b/custom_components/midea_auto_cloud/device_mapping/T0xDB.py @@ -0,0 +1,399 @@ +from homeassistant.const import Platform, UnitOfElectricPotential, 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": [0, 1], + "calculate": { + "get": [ + { + "lvalue": "[remaining_time]", + "rvalue": "[remain_time]" + } + ], + "set": { + } + }, + "entities": { + Platform.SWITCH: { + "power": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "softener_lack": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "detergent_lack": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "door_opened": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "bucket_water_overheating": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "memory": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "appointment": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "spray_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "old_speedy": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "nightly": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "down_light": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "easy_ironing": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "super_clean_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "intelligent_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "strong_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "silent": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "speedy": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "lock": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "flocks_switcher": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "fresh_anion_switch": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "dry_weighing_already": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "keep_fresh_status": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "drying_tunnel_overheating": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "fast_clean_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "steam_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "beforehand_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "ai_flag": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "water_plus": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "soak": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "ultraviolet_lamp": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "eye_wash": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "microbubble": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "wind_dispel": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "cycle_memory": { + "device_class": SwitchDeviceClass.SWITCH, + } + }, + Platform.SELECT: { + "running_status": { + "options": { + "standby": {"running_status": "standby"}, + "running": {"running_status": "running"}, + "pause": {"running_status": "pause"}, + "finish": {"running_status": "finish"}, + "error": {"running_status": "error"} + } + }, + "db_dehydration_speed": { + "options": { + "low": {"db_dehydration_speed": "1"}, + "medium": {"db_dehydration_speed": "2"}, + "high": {"db_dehydration_speed": "3"}, + "extra_high": {"db_dehydration_speed": "4"} + } + }, + "mode": { + "options": { + "normal": {"mode": "normal"}, + "eco": {"mode": "eco"}, + "quick": {"mode": "quick"}, + "heavy": {"mode": "heavy"}, + "delicate": {"mode": "delicate"} + } + }, + "water_level": { + "options": { + "low": {"water_level": "low"}, + "medium": {"water_level": "medium"}, + "high": {"water_level": "high"}, + "extra_high": {"water_level": "extra_high"} + } + }, + "program": { + "options": { + "ssp": {"program": "ssp"}, + "cotton": {"program": "cotton"}, + "synthetic": {"program": "synthetic"}, + "wool": {"program": "wool"}, + "delicate": {"program": "delicate"}, + "quick": {"program": "quick"} + } + }, + "temperature": { + "options": { + "cold": {"temperature": "cold"}, + "warm": {"temperature": "warm"}, + "hot": {"temperature": "hot"}, + "extra_hot": {"temperature": "extra_hot"} + } + }, + "detergent_density": { + "options": { + "low": {"detergent_density": "low"}, + "medium": {"detergent_density": "medium"}, + "high": {"detergent_density": "high"}, + "extra_high": {"detergent_density": "extra_high"} + } + }, + "softener_density": { + "options": { + "low": {"softener_density": "low"}, + "medium": {"softener_density": "medium"}, + "high": {"softener_density": "high"}, + "extra_high": {"softener_density": "extra_high"} + } + }, + "detergent": { + "options": { + "none": {"detergent": "none"}, + "little": {"detergent": "little"}, + "normal": {"detergent": "normal"}, + "more": {"detergent": "more"} + } + }, + "softener": { + "options": { + "none": {"softener": "none"}, + "little": {"softener": "little"}, + "normal": {"softener": "normal"}, + "more": {"softener": "more"} + } + }, + "season": { + "options": { + "spring": {"season": "spring"}, + "summer": {"season": "summer"}, + "autumn": {"season": "autumn"}, + "winter": {"season": "winter"} + } + }, + "disinfectant": { + "options": { + "none": {"disinfectant": "none"}, + "light": {"disinfectant": "light"}, + "medium": {"disinfectant": "medium"}, + "strong": {"disinfectant": "strong"} + } + }, + "dirty_degree": { + "options": { + "light": {"dirty_degree": "light"}, + "medium": {"dirty_degree": "medium"}, + "heavy": {"dirty_degree": "heavy"}, + "extra_heavy": {"dirty_degree": "extra_heavy"} + } + }, + "stains": { + "options": { + "none": {"stains": "none"}, + "light": {"stains": "light"}, + "medium": {"stains": "medium"}, + "heavy": {"stains": "heavy"} + } + }, + "add_rinse": { + "options": { + "none": {"add_rinse": "none"}, + "one": {"add_rinse": "one"}, + "two": {"add_rinse": "two"}, + "three": {"add_rinse": "three"} + } + }, + "soak_count": { + "options": { + "none": {"soak_count": "none"}, + "one": {"soak_count": "one"}, + "two": {"soak_count": "two"}, + "three": {"soak_count": "three"} + } + } + }, + Platform.SENSOR: { + "wash_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "appointment_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "remain_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "dryer": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "remote_control_flag": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "progress": { + "device_class": SensorDeviceClass.BATTERY, + "unit_of_measurement": "%", + "state_class": SensorStateClass.MEASUREMENT + }, + "cloud_cycle_low": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "cloud_cycle_high": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "cloud_cycle_jiepai1": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "cloud_cycle_jiepai2": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "cloud_cycle_jiepai3": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "cloud_cycle_jiepai4": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "cloud_cycle_jiepai_time1": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "dehydration_time_value": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "cloud_cycle_jiepai_time3": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "cloud_cycle_jiepai_time4": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "customize_machine_cycle": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "detergent_global": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "softener_global": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "detergent_density_global": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "softener_density_global": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "fresh_air_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "flocks_remind_period": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "device_software_version": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "expert_step": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "error_code": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "flocks_wash_count": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "active_oxygen": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "dehydration_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "cloud_cycle_jiepai_time2": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "wash_time_value": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + } + } + } + } +} diff --git a/custom_components/midea_auto_cloud/device_mapping/T0xDC.py b/custom_components/midea_auto_cloud/device_mapping/T0xDC.py new file mode 100644 index 0000000..5d6e5bd --- /dev/null +++ b/custom_components/midea_auto_cloud/device_mapping/T0xDC.py @@ -0,0 +1,153 @@ +from homeassistant.const import Platform, 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": [ + "power", "ai_switch", "light", "appointment", "prevent_wrinkle_switch", + "steam_switch", "damp_dry_signal", "eco_dry_switch", "bucket_clean_switch", + "water_box", "baby_lock", "remind_sound", "steam", "prevent_wrinkle", + "material", "sterilize", "dryness_level", "dry_temp", "intensity", "program" + ], + "entities": { + Platform.SWITCH: { + "ai_switch": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "light": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "appointment": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "prevent_wrinkle_switch": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "steam_switch": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "damp_dry_signal": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "eco_dry_switch": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "bucket_clean_switch": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "water_box": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "baby_lock": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "remind_sound": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "steam": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "power": { + "device_class": SwitchDeviceClass.SWITCH, + } + }, + Platform.BINARY_SENSOR: { + "door_warn": { + "device_class": BinarySensorDeviceClass.PROBLEM, + } + }, + Platform.SELECT: { + "prevent_wrinkle": { + "options": { + "off": {"prevent_wrinkle": "0"}, + "low": {"prevent_wrinkle": "1"}, + "medium": {"prevent_wrinkle": "2"}, + "high": {"prevent_wrinkle": "3"} + } + }, + "material": { + "options": { + "cotton": {"material": "0"}, + "synthetic": {"material": "1"}, + "wool": {"material": "2"}, + "delicate": {"material": "3"}, + "mixed": {"material": "4"} + } + }, + "sterilize": { + "options": { + "off": {"sterilize": "0"}, + "on": {"sterilize": "1"} + } + }, + "dryness_level": { + "options": { + "extra_dry": {"dryness_level": "0"}, + "dry": {"dryness_level": "1"}, + "normal": {"dryness_level": "2"}, + "damp": {"dryness_level": "3"} + } + }, + "dry_temp": { + "options": { + "low": {"dry_temp": "0"}, + "medium": {"dry_temp": "1"}, + "high": {"dry_temp": "2"}, + "extra_high": {"dry_temp": "3"} + } + }, + "intensity": { + "options": { + "low": {"intensity": "0"}, + "medium": {"intensity": "1"}, + "high": {"intensity": "2"} + } + }, + "program": { + "options": { + "mixed_wash": {"program": "mixed_wash"}, + "cotton": {"program": "cotton"}, + "synthetic": {"program": "synthetic"}, + "wool": {"program": "wool"}, + "delicate": {"program": "delicate"}, + "quick": {"program": "quick"}, + "eco": {"program": "eco"} + } + } + }, + Platform.SENSOR: { + "appointment_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "remain_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "progress": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "version": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "error_code": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "dry_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + } + } + } + } +} diff --git a/custom_components/midea_auto_cloud/device_mapping/T0xFD.py b/custom_components/midea_auto_cloud/device_mapping/T0xFD.py new file mode 100644 index 0000000..8422d2b --- /dev/null +++ b/custom_components/midea_auto_cloud/device_mapping/T0xFD.py @@ -0,0 +1,158 @@ +from homeassistant.const import Platform, UnitOfTemperature, UnitOfTime, PERCENTAGE +from homeassistant.components.sensor import SensorStateClass, SensorDeviceClass +from homeassistant.components.binary_sensor import BinarySensorDeviceClass +from homeassistant.components.switch import SwitchDeviceClass +from homeassistant.components.humidifier import HumidifierDeviceClass + +DEVICE_MAPPING = { + "default": { + "rationale": ["off", "on"], + "queries": [{}], + "centralized": [ + "power", "disinfect_on_off", "netions_on_off", "airdry_on_off", + "wind_gear", "wind_speed", "light_color", "bright_led", + "humidity_mode", "tank_status", "humidity", "cur_humidity" + ], + "entities": { + Platform.SWITCH: { + "disinfect_on_off": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "netions_on_off": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "airdry_on_off": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "power": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "buzzer": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "power_on_timer": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "power_off_timer": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "display_on_off": { + "device_class": SwitchDeviceClass.SWITCH, + } + }, + Platform.BINARY_SENSOR: { + "add_water_flag": { + "device_class": BinarySensorDeviceClass.PROBLEM, + } + }, + Platform.HUMIDIFIER: { + "humidifier": { + "device_class": HumidifierDeviceClass.HUMIDIFIER, + "power": "power", + "target_humidity": "humidity", + "current_humidity": "cur_humidity", + "min_humidity": 30, + "max_humidity": 80, + "mode": "humidity_mode", + "modes": { + "manual": {"humidity_mode": "manual"}, + "auto": {"humidity_mode": "auto"}, + "sleep": {"humidity_mode": "sleep"}, + "baby": {"humidity_mode": "baby"} + } + } + }, + Platform.SELECT: { + "wind_gear": { + "options": { + "low": {"wind_gear": "low"}, + "medium": {"wind_gear": "medium"}, + "high": {"wind_gear": "high"}, + "auto": {"wind_gear": "auto"}, + "invalid": {"wind_gear": "invalid"} + } + }, + "wind_speed": { + "options": { + "low": {"wind_speed": "low"}, + "medium": {"wind_speed": "medium"}, + "high": {"wind_speed": "high"}, + "auto": {"wind_speed": "auto"} + } + }, + "light_color": { + "options": { + "warm": {"light_color": "warm"}, + "cool": {"light_color": "cool"}, + "white": {"light_color": "white"}, + "blue": {"light_color": "blue"}, + "green": {"light_color": "green"}, + "red": {"light_color": "red"}, + "off": {"light_color": "off"} + } + }, + "bright_led": { + "options": { + "light": {"bright_led": "light"}, + "dim": {"bright_led": "dim"}, + "off": {"bright_led": "off"} + } + }, + "tank_status": { + "options": { + "normal": {"tank_status": "0"}, + "low": {"tank_status": "1"}, + "empty": {"tank_status": "2"}, + "error": {"tank_status": "3"} + } + } + }, + Platform.SENSOR: { + "running_percent": { + "device_class": SensorDeviceClass.POWER_FACTOR, + "unit_of_measurement": PERCENTAGE, + "state_class": SensorStateClass.MEASUREMENT + }, + "error_code": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "cur_temperature": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "sensor_battery": { + "device_class": SensorDeviceClass.BATTERY, + "unit_of_measurement": PERCENTAGE, + "state_class": SensorStateClass.MEASUREMENT + }, + "sensor_humidify": { + "device_class": SensorDeviceClass.HUMIDITY, + "unit_of_measurement": PERCENTAGE, + "state_class": SensorStateClass.MEASUREMENT + }, + "sensor_temperature": { + "device_class": SensorDeviceClass.TEMPERATURE, + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "state_class": SensorStateClass.MEASUREMENT + }, + "air_dry_left_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "time_on": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + }, + "time_off": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.MINUTES, + "state_class": SensorStateClass.MEASUREMENT + } + } + } + } +} diff --git a/custom_components/midea_auto_cloud/humidifier.py b/custom_components/midea_auto_cloud/humidifier.py new file mode 100644 index 0000000..dbd4483 --- /dev/null +++ b/custom_components/midea_auto_cloud/humidifier.py @@ -0,0 +1,151 @@ +from homeassistant.components.humidifier import ( + HumidifierEntity, + HumidifierDeviceClass +) +from homeassistant.const import Platform +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddEntitiesCallback + +from .const import DOMAIN +from .midea_entity import MideaEntity +from . import load_device_config + + +async def async_setup_entry( + hass: HomeAssistant, + config_entry: ConfigEntry, + async_add_entities: AddEntitiesCallback, +) -> None: + """Set up humidifier entities for Midea devices.""" + account_bucket = hass.data.get(DOMAIN, {}).get("accounts", {}).get(config_entry.entry_id) + if not account_bucket: + async_add_entities([]) + return + device_list = account_bucket.get("device_list", {}) + coordinator_map = account_bucket.get("coordinator_map", {}) + + devs = [] + for device_id, info in device_list.items(): + device_type = info.get("type") + sn8 = info.get("sn8") + config = await load_device_config(hass, device_type, sn8) or {} + entities_cfg = (config.get("entities") or {}).get(Platform.HUMIDIFIER, {}) + manufacturer = config.get("manufacturer") + rationale = config.get("rationale") + coordinator = coordinator_map.get(device_id) + device = coordinator.device if coordinator else None + + for entity_key, ecfg in entities_cfg.items(): + devs.append(MideaHumidifierEntity( + coordinator, device, manufacturer, rationale, entity_key, ecfg + )) + async_add_entities(devs) + + +class MideaHumidifierEntity(MideaEntity, HumidifierEntity): + """Generic humidifier entity.""" + + def __init__(self, coordinator, device, manufacturer, rationale, entity_key, config): + super().__init__( + coordinator, + device.device_id, + device.device_name, + f"T0x{device.device_type:02X}", + device.sn, + device.sn8, + device.model, + entity_key, + device=device, + manufacturer=manufacturer, + rationale=rationale, + config=config, + ) + self._device = device + self._manufacturer = manufacturer + self._rationale = rationale + self._entity_key = entity_key + self._config = config + + @property + def device_class(self): + """Return the device class.""" + return self._config.get("device_class", HumidifierDeviceClass.HUMIDIFIER) + + @property + def is_on(self): + """Return if the humidifier is on.""" + power_key = self._config.get("power") + if power_key: + value = self.device_attributes.get(power_key) + if isinstance(value, bool): + return value + return value == 1 or value == "on" or value == "true" + return False + + @property + def target_humidity(self): + """Return the target humidity.""" + target_humidity_key = self._config.get("target_humidity") + if target_humidity_key: + return self.device_attributes.get(target_humidity_key, 0) + return 0 + + @property + def current_humidity(self): + """Return the current humidity.""" + current_humidity_key = self._config.get("current_humidity") + if current_humidity_key: + return self.device_attributes.get(current_humidity_key, 0) + return 0 + + @property + def min_humidity(self): + """Return the minimum humidity.""" + return self._config.get("min_humidity", 30) + + @property + def max_humidity(self): + """Return the maximum humidity.""" + return self._config.get("max_humidity", 80) + + @property + def mode(self): + """Return the current mode.""" + mode_key = self._config.get("mode") + if mode_key: + return self.device_attributes.get(mode_key, "manual") + return "manual" + + @property + def available_modes(self): + """Return the available modes.""" + modes = self._config.get("modes", {}) + return list(modes.keys()) + + async def async_turn_on(self, **kwargs): + """Turn the humidifier on.""" + power_key = self._config.get("power") + if power_key: + await self._device.set_attribute(power_key, True) + + async def async_turn_off(self, **kwargs): + """Turn the humidifier off.""" + power_key = self._config.get("power") + if power_key: + await self._device.set_attribute(power_key, False) + + async def async_set_humidity(self, humidity: int): + """Set the target humidity.""" + target_humidity_key = self._config.get("target_humidity") + if target_humidity_key: + await self._device.set_attribute(target_humidity_key, humidity) + + async def async_set_mode(self, mode: str): + """Set the mode.""" + mode_key = self._config.get("mode") + modes = self._config.get("modes", {}) + if mode_key and mode in modes: + mode_config = modes[mode] + for attr_key, attr_value in mode_config.items(): + await self._device.set_attribute(attr_key, attr_value) diff --git a/custom_components/midea_auto_cloud/manifest.json b/custom_components/midea_auto_cloud/manifest.json index 222a2b1..9394ff5 100644 --- a/custom_components/midea_auto_cloud/manifest.json +++ b/custom_components/midea_auto_cloud/manifest.json @@ -7,5 +7,5 @@ "iot_class": "cloud_push", "issue_tracker": "https://github.com/sususweet/midea-meiju-codec/issues", "requirements": [], - "version": "v0.0.3" + "version": "v0.0.4" } \ No newline at end of file diff --git a/custom_components/midea_auto_cloud/translations/en.json b/custom_components/midea_auto_cloud/translations/en.json index 50b092c..e60c0a8 100644 --- a/custom_components/midea_auto_cloud/translations/en.json +++ b/custom_components/midea_auto_cloud/translations/en.json @@ -118,7 +118,50 @@ "error_type": { "name": "Error Type" }, "control_type": { "name": "Control Type" }, "mode": { "name": "Mode" }, - "rice_type": { "name": "Rice Type" } + "rice_type": { "name": "Rice Type" }, + "db_running_status": { "name": "DB Running Status" }, + "db_program": { "name": "DB Program" }, + "db_water_level": { "name": "DB Water Level" }, + "db_temperature": { "name": "DB Temperature" }, + "db_dehydration_speed": { "name": "DB Dehydration Speed" }, + "db_detergent": { "name": "DB Detergent" }, + "db_softener": { "name": "DB Softener" }, + "db_position": { "name": "DB Position" }, + "db_location": { "name": "DB Location" }, + "running_status": { "name": "Running Status" }, + "mode": { "name": "Mode" }, + "program": { "name": "Program" }, + "detergent_density": { "name": "Detergent Density" }, + "softener_density": { "name": "Softener Density" }, + "season": { "name": "Season" }, + "disinfectant": { "name": "Disinfectant" }, + "dirty_degree": { "name": "Dirty Degree" }, + "stains": { "name": "Stains" }, + "add_rinse": { "name": "Add Rinse" }, + "soak_count": { "name": "Soak Count" }, + "run_mode": { "name": "Run Mode" }, + "temp_type": { "name": "Temp Type" }, + "mode_state": { "name": "Mode State" }, + "fan_set": { "name": "Fan Set" }, + "upstair_work_status": { "name": "Up Stair Work Status" }, + "downstair_work_status": { "name": "Down Stair Work Status" }, + "middlestair_work_status": { "name": "Middle Stair Work Status" }, + "upstair_mode": { "name": "Up Stair Mode" }, + "downstair_mode": { "name": "Down Stair Mode" }, + "middlestair_mode": { "name": "Middle Stair Mode" }, + "prevent_wrinkle": { "name": "Prevent Wrinkle" }, + "material": { "name": "Material" }, + "sterilize": { "name": "Sterilize" }, + "dryness_level": { "name": "Dryness Level" }, + "dry_temp": { "name": "Dry Temperature" }, + "intensity": { "name": "Intensity" }, + "program": { "name": "Program" }, + "wind_gear": { "name": "Wind Gear" }, + "wind_speed": { "name": "Wind Speed" }, + "light_color": { "name": "Light Color" }, + "bright_led": { "name": "Bright LED" }, + "humidity_mode": { "name": "Humidity Mode" }, + "tank_status": { "name": "Tank Status" } }, "sensor": { "bright": { "name": "Brightness" }, @@ -186,7 +229,115 @@ "warming_time": { "name": "Warming Time" }, "delay_time": { "name": "Delay Time" }, "indoor_temperature": { "name": "Indoor Temperature" }, - "outdoor_temperature": { "name": "Outdoor Temperature" } + "outdoor_temperature": { "name": "Outdoor Temperature" }, + "db_remain_time": { "name": "DB Remain Time" }, + "db_progress": { "name": "DB Progress" }, + "db_error_code": { "name": "DB Error Code" }, + "db_set_dewater_time": { "name": "DB Set Dewater Time" }, + "db_set_wash_time": { "name": "DB Set Wash Time" }, + "db_project_no": { "name": "DB Project No" }, + "db_device_software_version": { "name": "DB Device Software Version" }, + "db_rinse_count": { "name": "DB Rinse Count" }, + "db_wash_time": { "name": "DB Wash Time" }, + "db_appointment_time": { "name": "DB Appointment Time" }, + "db_appointment": { "name": "DB Appointment" }, + "db_dehydration_time": { "name": "DB Dehydration Time" }, + "db_cycle_memory": { "name": "DB Cycle Memory" }, + "dehydration_speed": { "name": "Dehydration Speed" }, + "wash_time": { "name": "Wash Time" }, + "appointment_time": { "name": "Appointment Time" }, + "remain_time": { "name": "Remain Time" }, + "project_no": { "name": "Project No" }, + "dryer": { "name": "Dryer" }, + "remote_control_flag": { "name": "Remote Control Flag" }, + "progress": { "name": "Progress" }, + "cloud_cycle_low": { "name": "Cloud Cycle Low" }, + "cloud_cycle_high": { "name": "Cloud Cycle High" }, + "cloud_cycle_jiepai1": { "name": "Cloud Cycle Jiepai1" }, + "cloud_cycle_jiepai2": { "name": "Cloud Cycle Jiepai2" }, + "cloud_cycle_jiepai3": { "name": "Cloud Cycle Jiepai3" }, + "cloud_cycle_jiepai4": { "name": "Cloud Cycle Jiepai4" }, + "cloud_cycle_jiepai_time1": { "name": "Cloud Cycle Jiepai Time1" }, + "dehydration_time_value": { "name": "Dehydration Time Value" }, + "cloud_cycle_jiepai_time3": { "name": "Cloud Cycle Jiepai Time3" }, + "cloud_cycle_jiepai_time4": { "name": "Cloud Cycle Jiepai Time4" }, + "customize_machine_cycle": { "name": "Customize Machine Cycle" }, + "detergent_global": { "name": "Detergent Global" }, + "softener_global": { "name": "Softener Global" }, + "detergent_density_global": { "name": "Detergent Density Global" }, + "softener_density_global": { "name": "Softener Density Global" }, + "fresh_air_time": { "name": "Fresh Air Time" }, + "flocks_remind_period": { "name": "Flocks Remind Period" }, + "device_software_version": { "name": "Device Software Version" }, + "expert_step": { "name": "Expert Step" }, + "error_code": { "name": "Error Code" }, + "flocks_wash_count": { "name": "Flocks Wash Count" }, + "active_oxygen": { "name": "Active Oxygen" }, + "version": { "name": "Version" }, + "dehydration_time": { "name": "Dehydration Time" }, + "cloud_cycle_jiepai_time2": { "name": "Cloud Cycle Jiepai Time2" }, + "wash_time_value": { "name": "Wash Time Value" }, + "cur_temp": { "name": "Current Temperature" }, + "error_code": { "name": "Error Code" }, + "heat_max_set_temp": { "name": "Heat Max Set Temp" }, + "heat_min_set_temp": { "name": "Heat Min Set Temp" }, + "cool_max_set_temp": { "name": "Cool Max Set Temp" }, + "cool_min_set_temp": { "name": "Cool Min Set Temp" }, + "auto_max_set_temp": { "name": "Auto Max Set Temp" }, + "auto_min_set_temp": { "name": "Auto Min Set Temp" }, + "preheat_on_set_temp": { "name": "Preheat On Set Temp" }, + "preheat_max_set_temp": { "name": "Preheat Max Set Temp" }, + "preheat_min_set_temp": { "name": "Preheat Min Set Temp" }, + "version": { "name": "Version" }, + "temp_set": { "name": "Temperature Set" }, + "room_temp_value": { "name": "Room Temperature Value" }, + "clean_net_used_time": { "name": "Clean Net Used Time" }, + "change_net_used_time": { "name": "Change Net Used Time" }, + "tvoc_value": { "name": "TVOC Value" }, + "change_set_real_time": { "name": "Change Set Real Time" }, + "clean_set_real_time": { "name": "Clean Set Real Time" }, + "humidity_set": { "name": "Humidity Set" }, + "room_aqi_value": { "name": "Room AQI Value" }, + "change_net_set_time": { "name": "Change Net Set Time" }, + "clean_net_set_time": { "name": "Clean Net Set Time" }, + "humidity_value": { "name": "Humidity Value" }, + "hcho_value": { "name": "HCHO Value" }, + "pm25_value": { "name": "PM2.5 Value" }, + "co2_value": { "name": "CO2 Value" }, + "machine_type": { "name": "Machine Type" }, + "upstair_temp": { "name": "Up Stair Temperature" }, + "downstair_temp": { "name": "Down Stair Temperature" }, + "middlestair_temp": { "name": "Middle Stair Temperature" }, + "upstair_hour": { "name": "Up Stair Hour" }, + "upstair_min": { "name": "Up Stair Min" }, + "upstair_sec": { "name": "Up Stair Sec" }, + "middlestair_hour": { "name": "Middle Stair Hour" }, + "middlestair_min": { "name": "Middle Stair Min" }, + "middlestair_sec": { "name": "Middle Stair Sec" }, + "downstair_hour": { "name": "Down Stair Hour" }, + "downstair_min": { "name": "Down Stair Min" }, + "downstair_sec": { "name": "Down Stair Sec" }, + "order_hour": { "name": "Order Hour" }, + "order_min": { "name": "Order Min" }, + "order_sec": { "name": "Order Sec" }, + "appointment_time": { "name": "Appointment Time" }, + "project_no": { "name": "Project Number" }, + "remain_time": { "name": "Remain Time" }, + "progress": { "name": "Progress" }, + "version": { "name": "Version" }, + "error_code": { "name": "Error Code" }, + "dry_time": { "name": "Dry Time" }, + "version": { "name": "Version" }, + "time_off": { "name": "Time Off" }, + "humidity": { "name": "Humidity" }, + "cur_temperature": { "name": "Current Temperature" }, + "cur_humidity": { "name": "Current Humidity" }, + "time_on": { "name": "Time On" }, + "air_dry_left_time": { "name": "Air Dry Left Time" }, + "sensor_battery": { "name": "Sensor Battery" }, + "running_percent": { "name": "Running Percent" }, + "sensor_humidify": { "name": "Sensor Humidify" }, + "sensor_temperature": { "name": "Sensor Temperature" } }, "binary_sensor": { "air_status": { "name": "Air Running" }, @@ -210,6 +361,9 @@ "climate": { "thermostat": { "name": "Thermostat" } }, + "humidifier": { + "humidifier": { "name": "Humidifier" } + }, "switch": { "airswitch": { "name": "AC Switch" }, "waterswitch": { "name": "Water Switch" }, @@ -236,7 +390,125 @@ "pre_regeneration": { "name": "Pre Regeneration" }, "dry": { "name": "Dry" }, "prevent_straight_wind": { "name": "Prevent Straight Wind" }, - "aux_heat": { "name": "Aux Heat" } + "aux_heat": { "name": "Aux Heat" }, + "db_power": { "name": "DB Power" }, + "db_clean_notification": { "name": "DB Clean Notification" }, + "db_softener_needed": { "name": "DB Softener Needed" }, + "db_detergent_needed": { "name": "DB Detergent Needed" }, + "db_nightly_wash": { "name": "DB Nightly Wash" }, + "db_baby_lock": { "name": "DB Baby Lock" }, + "db_light": { "name": "DB Light" }, + "db_steam_wash": { "name": "DB Steam Wash" }, + "db_fast_clean_wash": { "name": "DB Fast Clean Wash" }, + "db_wash_dry_link": { "name": "DB Wash Dry Link" }, + "power": { "name": "Power" }, + "softener_lack": { "name": "Softener Lack" }, + "detergent_lack": { "name": "Detergent Lack" }, + "door_opened": { "name": "Door Opened" }, + "bucket_water_overheating": { "name": "Bucket Water Overheating" }, + "memory": { "name": "Memory" }, + "appointment": { "name": "Appointment" }, + "spray_wash": { "name": "Spray Wash" }, + "old_speedy": { "name": "Old Speedy" }, + "nightly": { "name": "Nightly" }, + "down_light": { "name": "Down Light" }, + "easy_ironing": { "name": "Easy Ironing" }, + "super_clean_wash": { "name": "Super Clean Wash" }, + "intelligent_wash": { "name": "Intelligent Wash" }, + "strong_wash": { "name": "Strong Wash" }, + "silent": { "name": "Silent" }, + "speedy": { "name": "Speedy" }, + "lock": { "name": "Lock" }, + "flocks_switcher": { "name": "Flocks Switcher" }, + "fresh_anion_switch": { "name": "Fresh Anion Switch" }, + "dry_weighing_already": { "name": "Dry Weighing Already" }, + "keep_fresh_status": { "name": "Keep Fresh Status" }, + "drying_tunnel_overheating": { "name": "Drying Tunnel Overheating" }, + "fast_clean_wash": { "name": "Fast Clean Wash" }, + "steam_wash": { "name": "Steam Wash" }, + "beforehand_wash": { "name": "Beforehand Wash" }, + "ai_flag": { "name": "AI Flag" }, + "water_plus": { "name": "Water Plus" }, + "soak": { "name": "Soak" }, + "ultraviolet_lamp": { "name": "Ultraviolet Lamp" }, + "eye_wash": { "name": "Eye Wash" }, + "microbubble": { "name": "Microbubble" }, + "wind_dispel": { "name": "Wind Dispel" }, + "cycle_memory": { "name": "Cycle Memory" }, + "freeze_state": { "name": "Freeze State" }, + "power_state": { "name": "Power State" }, + "heat_enable": { "name": "Heat Enable" }, + "cool_enable": { "name": "Cool Enable" }, + "silence_set_state": { "name": "Silence Set State" }, + "time_set_state": { "name": "Time Set State" }, + "silence_state": { "name": "Silence State" }, + "holiday_state": { "name": "Holiday State" }, + "holiday_set_state": { "name": "Holiday Set State" }, + "holiday_on_state": { "name": "Holiday On State" }, + "room_temp_ctrl": { "name": "Room Temp Ctrl" }, + "room_temp_set": { "name": "Room Temp Set" }, + "comp_state": { "name": "Comp State" }, + "day_time_state": { "name": "Day Time State" }, + "week_time_state": { "name": "Week Time State" }, + "warn_state": { "name": "Warn State" }, + "defrost_state": { "name": "Defrost State" }, + "pre_heat": { "name": "Pre Heat" }, + "lock_state": { "name": "Lock State" }, + "esp_state": { "name": "ESP State" }, + "passby_enable": { "name": "Passby Enable" }, + "preheat_enable": { "name": "Preheat Enable" }, + "remain_able": { "name": "Remain Able" }, + "hcho_check_enable": { "name": "HCHO Check Enable" }, + "co2_check_enable": { "name": "CO2 Check Enable" }, + "function_set_link": { "name": "Function Set Link" }, + "function_set_sleep": { "name": "Function Set Sleep" }, + "function_set_energy_save": { "name": "Function Set Energy Save" }, + "function_set_prheat": { "name": "Function Set Preheat" }, + "function_set_ultimate": { "name": "Function Set Ultimate" }, + "clean_net_clean_flg": { "name": "Clean Net Clean Flag" }, + "change_net_change_flg": { "name": "Change Net Change Flag" }, + "condensation_state": { "name": "Condensation State" }, + "humidity_state": { "name": "Humidity State" }, + "preheat_state": { "name": "Preheat State" }, + "esp_enable": { "name": "ESP Enable" }, + "pm25_check_enable": { "name": "PM2.5 Check Enable" }, + "timer_state": { "name": "Timer State" }, + "humidity_check_enable": { "name": "Humidity Check Enable" }, + "door_middlestair": { "name": "Door Middle Stair" }, + "door_upstair": { "name": "Door Up Stair" }, + "door_downstair": { "name": "Door Down Stair" }, + "downstair_ispreheat": { "name": "Down Stair Is Preheat" }, + "upstair_ispreheat": { "name": "Up Stair Is Preheat" }, + "downstair_iscooling": { "name": "Down Stair Is Cooling" }, + "upstair_iscooling": { "name": "Up Stair Is Cooling" }, + "middlestair_ispreheat": { "name": "Middle Stair Is Preheat" }, + "middlestair_iscooling": { "name": "Middle Stair Is Cooling" }, + "lock": { "name": "Lock" }, + "is_error": { "name": "Is Error" }, + "uv_disinfect": { "name": "UV Disinfect" }, + "ai_switch": { "name": "AI Switch" }, + "light": { "name": "Light" }, + "appointment": { "name": "Appointment" }, + "prevent_wrinkle_switch": { "name": "Prevent Wrinkle Switch" }, + "steam_switch": { "name": "Steam Switch" }, + "damp_dry_signal": { "name": "Damp Dry Signal" }, + "eco_dry_switch": { "name": "Eco Dry Switch" }, + "bucket_clean_switch": { "name": "Bucket Clean Switch" }, + "water_box": { "name": "Water Box" }, + "baby_lock": { "name": "Baby Lock" }, + "remind_sound": { "name": "Remind Sound" }, + "steam": { "name": "Steam" }, + "power": { "name": "Power" }, + "door_warn": { "name": "Door Warning" }, + "disinfect_on_off": { "name": "Disinfect On Off" }, + "power_on_timer": { "name": "Power On Timer" }, + "power": { "name": "Power" }, + "buzzer": { "name": "Buzzer" }, + "power_off_timer": { "name": "Power Off Timer" }, + "display_on_off": { "name": "Display On Off" }, + "netions_on_off": { "name": "Net Ions On Off" }, + "airdry_on_off": { "name": "Air Dry On Off" }, + "add_water_flag": { "name": "Add Water Flag" } } } } \ No newline at end of file diff --git a/custom_components/midea_auto_cloud/translations/zh-Hans.json b/custom_components/midea_auto_cloud/translations/zh-Hans.json index ac7af27..0c69168 100644 --- a/custom_components/midea_auto_cloud/translations/zh-Hans.json +++ b/custom_components/midea_auto_cloud/translations/zh-Hans.json @@ -118,7 +118,50 @@ "error_type": { "name": "错误类型" }, "control_type": { "name": "控制类型" }, "mode": { "name": "模式" }, - "rice_type": { "name": "米种类型" } + "rice_type": { "name": "米种类型" }, + "db_running_status": { "name": "运行状态" }, + "db_program": { "name": "洗涤程序" }, + "db_water_level": { "name": "水位" }, + "db_temperature": { "name": "温度" }, + "db_dehydration_speed": { "name": "脱水转速" }, + "db_detergent": { "name": "洗涤剂" }, + "db_softener": { "name": "柔顺剂" }, + "db_position": { "name": "位置" }, + "db_location": { "name": "地点" }, + "running_status": { "name": "运行状态" }, + "mode": { "name": "模式" }, + "program": { "name": "程序" }, + "detergent_density": { "name": "洗涤剂浓度" }, + "softener_density": { "name": "柔顺剂浓度" }, + "season": { "name": "季节" }, + "disinfectant": { "name": "消毒剂" }, + "dirty_degree": { "name": "脏污程度" }, + "stains": { "name": "污渍" }, + "add_rinse": { "name": "加漂洗" }, + "soak_count": { "name": "浸泡次数" }, + "run_mode": { "name": "运行模式" }, + "temp_type": { "name": "温度类型" }, + "mode_state": { "name": "模式状态" }, + "fan_set": { "name": "风扇设置" }, + "upstair_work_status": { "name": "上层工作状态" }, + "downstair_work_status": { "name": "下层工作状态" }, + "middlestair_work_status": { "name": "中层工作状态" }, + "upstair_mode": { "name": "上层模式" }, + "downstair_mode": { "name": "下层模式" }, + "middlestair_mode": { "name": "中层模式" }, + "prevent_wrinkle": { "name": "防皱" }, + "material": { "name": "材质" }, + "sterilize": { "name": "杀菌" }, + "dryness_level": { "name": "干燥程度" }, + "dry_temp": { "name": "烘干温度" }, + "intensity": { "name": "强度" }, + "program": { "name": "程序" }, + "wind_gear": { "name": "风档" }, + "wind_speed": { "name": "风速" }, + "light_color": { "name": "灯光颜色" }, + "bright_led": { "name": "亮度LED" }, + "humidity_mode": { "name": "湿度模式" }, + "tank_status": { "name": "水箱状态" } }, "sensor": { "bright": { "name": "亮度" }, @@ -186,7 +229,115 @@ "warming_time": { "name": "保温时间" }, "delay_time": { "name": "预约时间" }, "indoor_temperature": { "name": "室内温度" }, - "outdoor_temperature": { "name": "室外温度" } + "outdoor_temperature": { "name": "室外温度" }, + "db_remain_time": { "name": "剩余时间" }, + "db_progress": { "name": "进度" }, + "db_error_code": { "name": "错误代码" }, + "db_set_dewater_time": { "name": "设置脱水时间" }, + "db_set_wash_time": { "name": "设置洗涤时间" }, + "db_project_no": { "name": "项目编号" }, + "db_device_software_version": { "name": "设备软件版本" }, + "db_rinse_count": { "name": "漂洗次数" }, + "db_wash_time": { "name": "洗涤时间" }, + "db_appointment_time": { "name": "预约时间" }, + "db_appointment": { "name": "预约" }, + "db_dehydration_time": { "name": "脱水时间" }, + "db_cycle_memory": { "name": "循环记忆" }, + "dehydration_speed": { "name": "脱水转速" }, + "wash_time": { "name": "洗涤时间" }, + "appointment_time": { "name": "预约时间" }, + "remain_time": { "name": "剩余时间" }, + "project_no": { "name": "项目编号" }, + "dryer": { "name": "烘干机" }, + "remote_control_flag": { "name": "遥控标志" }, + "progress": { "name": "进度" }, + "cloud_cycle_low": { "name": "云循环低" }, + "cloud_cycle_high": { "name": "云循环高" }, + "cloud_cycle_jiepai1": { "name": "云循环节拍1" }, + "cloud_cycle_jiepai2": { "name": "云循环节拍2" }, + "cloud_cycle_jiepai3": { "name": "云循环节拍3" }, + "cloud_cycle_jiepai4": { "name": "云循环节拍4" }, + "cloud_cycle_jiepai_time1": { "name": "云循环节拍时间1" }, + "dehydration_time_value": { "name": "脱水时间值" }, + "cloud_cycle_jiepai_time3": { "name": "云循环节拍时间3" }, + "cloud_cycle_jiepai_time4": { "name": "云循环节拍时间4" }, + "customize_machine_cycle": { "name": "自定义机器循环" }, + "detergent_global": { "name": "洗涤剂全局" }, + "softener_global": { "name": "柔顺剂全局" }, + "detergent_density_global": { "name": "洗涤剂浓度全局" }, + "softener_density_global": { "name": "柔顺剂浓度全局" }, + "fresh_air_time": { "name": "新风时间" }, + "flocks_remind_period": { "name": "毛绒提醒周期" }, + "device_software_version": { "name": "设备软件版本" }, + "expert_step": { "name": "专家步骤" }, + "error_code": { "name": "错误代码" }, + "flocks_wash_count": { "name": "毛绒洗涤次数" }, + "active_oxygen": { "name": "活性氧" }, + "version": { "name": "版本" }, + "dehydration_time": { "name": "脱水时间" }, + "cloud_cycle_jiepai_time2": { "name": "云循环节拍时间2" }, + "wash_time_value": { "name": "洗涤时间值" }, + "cur_temp": { "name": "当前温度" }, + "error_code": { "name": "错误代码" }, + "heat_max_set_temp": { "name": "制热最大设定温度" }, + "heat_min_set_temp": { "name": "制热最小设定温度" }, + "cool_max_set_temp": { "name": "制冷最大设定温度" }, + "cool_min_set_temp": { "name": "制冷最小设定温度" }, + "auto_max_set_temp": { "name": "自动最大设定温度" }, + "auto_min_set_temp": { "name": "自动最小设定温度" }, + "preheat_on_set_temp": { "name": "预热开启设定温度" }, + "preheat_max_set_temp": { "name": "预热最大设定温度" }, + "preheat_min_set_temp": { "name": "预热最小设定温度" }, + "version": { "name": "版本" }, + "temp_set": { "name": "设定温度" }, + "room_temp_value": { "name": "室温值" }, + "clean_net_used_time": { "name": "清洁网使用时间" }, + "change_net_used_time": { "name": "更换网使用时间" }, + "tvoc_value": { "name": "TVOC值" }, + "change_set_real_time": { "name": "更换设定实际时间" }, + "clean_set_real_time": { "name": "清洁设定实际时间" }, + "humidity_set": { "name": "湿度设置" }, + "room_aqi_value": { "name": "室内AQI值" }, + "change_net_set_time": { "name": "更换网设定时间" }, + "clean_net_set_time": { "name": "清洁网设定时间" }, + "humidity_value": { "name": "湿度值" }, + "hcho_value": { "name": "甲醛值" }, + "pm25_value": { "name": "PM2.5值" }, + "co2_value": { "name": "CO2值" }, + "machine_type": { "name": "机器类型" }, + "upstair_temp": { "name": "上层温度" }, + "downstair_temp": { "name": "下层温度" }, + "middlestair_temp": { "name": "中层温度" }, + "upstair_hour": { "name": "上层小时" }, + "upstair_min": { "name": "上层分钟" }, + "upstair_sec": { "name": "上层秒" }, + "middlestair_hour": { "name": "中层小时" }, + "middlestair_min": { "name": "中层分钟" }, + "middlestair_sec": { "name": "中层秒" }, + "downstair_hour": { "name": "下层小时" }, + "downstair_min": { "name": "下层分钟" }, + "downstair_sec": { "name": "下层秒" }, + "order_hour": { "name": "预约小时" }, + "order_min": { "name": "预约分钟" }, + "order_sec": { "name": "预约秒" }, + "appointment_time": { "name": "预约时间" }, + "project_no": { "name": "项目编号" }, + "remain_time": { "name": "剩余时间" }, + "progress": { "name": "进度" }, + "version": { "name": "版本" }, + "error_code": { "name": "错误代码" }, + "dry_time": { "name": "烘干时间" }, + "version": { "name": "版本" }, + "time_off": { "name": "关机时间" }, + "humidity": { "name": "湿度" }, + "cur_temperature": { "name": "当前温度" }, + "cur_humidity": { "name": "当前湿度" }, + "time_on": { "name": "开机时间" }, + "air_dry_left_time": { "name": "风干剩余时间" }, + "sensor_battery": { "name": "传感器电池" }, + "running_percent": { "name": "运行百分比" }, + "sensor_humidify": { "name": "传感器湿度" }, + "sensor_temperature": { "name": "传感器温度" } }, "binary_sensor": { "air_status": { "name": "空气运行" }, @@ -210,6 +361,9 @@ "climate": { "thermostat": { "name": "温控器" } }, + "humidifier": { + "humidifier": { "name": "加湿器" } + }, "switch": { "airswitch": { "name": "空调开关" }, "waterswitch": { "name": "热水开关" }, @@ -236,7 +390,125 @@ "pre_regeneration": { "name": "预再生" }, "dry": { "name": "干燥" }, "prevent_straight_wind": { "name": "防直吹" }, - "aux_heat": { "name": "电辅热" } + "aux_heat": { "name": "电辅热" }, + "db_power": { "name": "洗衣机电源" }, + "db_clean_notification": { "name": "清洁提醒" }, + "db_softener_needed": { "name": "需要柔顺剂" }, + "db_detergent_needed": { "name": "需要洗涤剂" }, + "db_nightly_wash": { "name": "夜间洗涤" }, + "db_baby_lock": { "name": "童锁" }, + "db_light": { "name": "照明" }, + "db_steam_wash": { "name": "蒸汽洗涤" }, + "db_fast_clean_wash": { "name": "快速清洁洗涤" }, + "db_wash_dry_link": { "name": "洗烘联动" }, + "power": { "name": "电源" }, + "softener_lack": { "name": "柔顺剂不足" }, + "detergent_lack": { "name": "洗涤剂不足" }, + "door_opened": { "name": "门已打开" }, + "bucket_water_overheating": { "name": "桶内水温过热" }, + "memory": { "name": "记忆" }, + "appointment": { "name": "预约" }, + "spray_wash": { "name": "喷淋洗涤" }, + "old_speedy": { "name": "老式快速" }, + "nightly": { "name": "夜间" }, + "down_light": { "name": "下灯" }, + "easy_ironing": { "name": "易熨烫" }, + "super_clean_wash": { "name": "超净洗涤" }, + "intelligent_wash": { "name": "智能洗涤" }, + "strong_wash": { "name": "强力洗涤" }, + "silent": { "name": "静音" }, + "speedy": { "name": "快速" }, + "lock": { "name": "锁定" }, + "flocks_switcher": { "name": "毛绒切换器" }, + "fresh_anion_switch": { "name": "负离子开关" }, + "dry_weighing_already": { "name": "已称重" }, + "keep_fresh_status": { "name": "保持新鲜状态" }, + "drying_tunnel_overheating": { "name": "烘干通道过热" }, + "fast_clean_wash": { "name": "快速清洁洗涤" }, + "steam_wash": { "name": "蒸汽洗涤" }, + "beforehand_wash": { "name": "预洗" }, + "ai_flag": { "name": "AI标志" }, + "water_plus": { "name": "加水" }, + "soak": { "name": "浸泡" }, + "ultraviolet_lamp": { "name": "紫外线灯" }, + "eye_wash": { "name": "护眼洗涤" }, + "microbubble": { "name": "微气泡" }, + "wind_dispel": { "name": "风干" }, + "cycle_memory": { "name": "循环记忆" }, + "freeze_state": { "name": "防冻状态" }, + "power_state": { "name": "电源状态" }, + "heat_enable": { "name": "制热启用" }, + "cool_enable": { "name": "制冷启用" }, + "silence_set_state": { "name": "静音设置状态" }, + "time_set_state": { "name": "时间设置状态" }, + "silence_state": { "name": "静音状态" }, + "holiday_state": { "name": "假日状态" }, + "holiday_set_state": { "name": "假日设置状态" }, + "holiday_on_state": { "name": "假日开启状态" }, + "room_temp_ctrl": { "name": "室温控制" }, + "room_temp_set": { "name": "室温设置" }, + "comp_state": { "name": "压缩机状态" }, + "day_time_state": { "name": "日间状态" }, + "week_time_state": { "name": "周时间状态" }, + "warn_state": { "name": "警告状态" }, + "defrost_state": { "name": "除霜状态" }, + "pre_heat": { "name": "预热" }, + "lock_state": { "name": "锁定状态" }, + "esp_state": { "name": "ESP状态" }, + "passby_enable": { "name": "旁通启用" }, + "preheat_enable": { "name": "预热启用" }, + "remain_able": { "name": "保持可用" }, + "hcho_check_enable": { "name": "甲醛检测启用" }, + "co2_check_enable": { "name": "CO2检测启用" }, + "function_set_link": { "name": "功能设置联动" }, + "function_set_sleep": { "name": "功能设置睡眠" }, + "function_set_energy_save": { "name": "功能设置节能" }, + "function_set_prheat": { "name": "功能设置预热" }, + "function_set_ultimate": { "name": "功能设置终极" }, + "clean_net_clean_flg": { "name": "清洁网清洁标志" }, + "change_net_change_flg": { "name": "更换网更换标志" }, + "condensation_state": { "name": "冷凝状态" }, + "humidity_state": { "name": "湿度状态" }, + "preheat_state": { "name": "预热状态" }, + "esp_enable": { "name": "ESP启用" }, + "pm25_check_enable": { "name": "PM2.5检测启用" }, + "timer_state": { "name": "定时器状态" }, + "humidity_check_enable": { "name": "湿度检测启用" }, + "door_middlestair": { "name": "中层门" }, + "door_upstair": { "name": "上层门" }, + "door_downstair": { "name": "下层门" }, + "downstair_ispreheat": { "name": "下层预热" }, + "upstair_ispreheat": { "name": "上层预热" }, + "downstair_iscooling": { "name": "下层冷却" }, + "upstair_iscooling": { "name": "上层冷却" }, + "middlestair_ispreheat": { "name": "中层预热" }, + "middlestair_iscooling": { "name": "中层冷却" }, + "lock": { "name": "锁定" }, + "is_error": { "name": "错误状态" }, + "uv_disinfect": { "name": "紫外线消毒" }, + "ai_switch": { "name": "AI开关" }, + "light": { "name": "灯光" }, + "appointment": { "name": "预约" }, + "prevent_wrinkle_switch": { "name": "防皱开关" }, + "steam_switch": { "name": "蒸汽开关" }, + "damp_dry_signal": { "name": "湿干信号" }, + "eco_dry_switch": { "name": "节能烘干开关" }, + "bucket_clean_switch": { "name": "桶清洁开关" }, + "water_box": { "name": "水箱" }, + "baby_lock": { "name": "童锁" }, + "remind_sound": { "name": "提醒声音" }, + "steam": { "name": "蒸汽" }, + "power": { "name": "电源" }, + "door_warn": { "name": "门警告" }, + "disinfect_on_off": { "name": "消毒开关" }, + "power_on_timer": { "name": "开机定时器" }, + "power": { "name": "电源" }, + "buzzer": { "name": "蜂鸣器" }, + "power_off_timer": { "name": "关机定时器" }, + "display_on_off": { "name": "显示开关" }, + "netions_on_off": { "name": "负离子开关" }, + "airdry_on_off": { "name": "风干开关" }, + "add_water_flag": { "name": "加水标志" } } } } diff --git a/img.png b/img.png new file mode 100644 index 0000000..e0323a4 Binary files /dev/null and b/img.png differ diff --git a/img_1.png b/img_1.png new file mode 100644 index 0000000..b53a288 Binary files /dev/null and b/img_1.png differ