diff --git a/custom_components/midea_auto_cloud/device_mapping/T0x13.py b/custom_components/midea_auto_cloud/device_mapping/T0x13.py index 874445d..849b4ad 100644 --- a/custom_components/midea_auto_cloud/device_mapping/T0x13.py +++ b/custom_components/midea_auto_cloud/device_mapping/T0x13.py @@ -45,14 +45,7 @@ DEVICE_MAPPING = { Platform.FAN: { "fan": { "power": "fan_power", - "speeds": [ - {"fan_speed": "1"}, - {"fan_speed": "2"}, - {"fan_speed": "3"}, - {"fan_speed": "4"}, - {"fan_speed": "5"}, - {"fan_speed": "6"}, - ], + "speeds": list({"fan_speed": value + 1} for value in range(0, 6)), "preset_modes": { "breathing_wind": {"fan_scene": "breathing_wind"}, "const_temperature": {"fan_scene": "const_temperature"}, diff --git a/custom_components/midea_auto_cloud/device_mapping/T0xAC.py b/custom_components/midea_auto_cloud/device_mapping/T0xAC.py index 5733c5f..05e0413 100644 --- a/custom_components/midea_auto_cloud/device_mapping/T0xAC.py +++ b/custom_components/midea_auto_cloud/device_mapping/T0xAC.py @@ -12,13 +12,7 @@ DEVICE_MAPPING = { Platform.FAN: { "fan": { "power": "new_wind_machine", - "speeds": [ - {"fresh_air_fan_speed": 20}, - {"fresh_air_fan_speed": 40}, - {"fresh_air_fan_speed": 60}, - {"fresh_air_fan_speed": 80}, - {"fresh_air_fan_speed": 100}, - ], + "speeds": list({"fresh_air_fan_speed": value + 1} for value in range(0, 100)), "preset_modes": { "heat_exchange": { "fresh_air_mode": 1, @@ -166,13 +160,7 @@ DEVICE_MAPPING = { Platform.FAN: { "fan": { "power": "fresh_air", - "speeds": [ - {"fresh_air": 3, "fresh_air_fan_speed": 20}, - {"fresh_air": 3, "fresh_air_fan_speed": 40}, - {"fresh_air": 3, "fresh_air_fan_speed": 60}, - {"fresh_air": 3, "fresh_air_fan_speed": 80}, - {"fresh_air": 3, "fresh_air_fan_speed": 100}, - ], + "speeds": list({"fresh_air": 3, "fresh_air_fan_speed": value + 1} for value in range(0, 100)), "preset_modes": { "heat_exchange": { "fresh_air_mode": 1, diff --git a/custom_components/midea_auto_cloud/device_mapping/T0xFA.py b/custom_components/midea_auto_cloud/device_mapping/T0xFA.py index 1d6561a..b36e3a9 100644 --- a/custom_components/midea_auto_cloud/device_mapping/T0xFA.py +++ b/custom_components/midea_auto_cloud/device_mapping/T0xFA.py @@ -1,4 +1,4 @@ -from homeassistant.const import Platform, UnitOfTemperature, UnitOfTime, PERCENTAGE +from homeassistant.const import Platform, UnitOfTemperature, UnitOfTime, PERCENTAGE, DEGREE from homeassistant.components.sensor import SensorStateClass, SensorDeviceClass from homeassistant.components.binary_sensor import BinarySensorDeviceClass from homeassistant.components.switch import SwitchDeviceClass @@ -23,17 +23,7 @@ DEVICE_MAPPING = { Platform.FAN: { "fan": { "power": "power", - "speeds": [ - {"gear": "1"}, - {"gear": "2"}, - {"gear": "3"}, - {"gear": "4"}, - {"gear": "5"}, - {"gear": "6"}, - {"gear": "7"}, - {"gear": "8"}, - {"gear": "9"}, - ], + "speeds": list({"gear": value + 1} for value in range(0, 9)), "oscillate": "swing", "preset_modes": { "normal": {"mode": "normal"}, @@ -102,26 +92,6 @@ DEVICE_MAPPING = { "device_class": SensorDeviceClass.ENUM, "state_class": SensorStateClass.MEASUREMENT }, - "timer_off_hour": { - "device_class": SensorDeviceClass.DURATION, - "unit_of_measurement": UnitOfTime.HOURS, - "state_class": SensorStateClass.MEASUREMENT - }, - "timer_off_minute": { - "device_class": SensorDeviceClass.DURATION, - "unit_of_measurement": UnitOfTime.MINUTES, - "state_class": SensorStateClass.MEASUREMENT - }, - "timer_on_hour": { - "device_class": SensorDeviceClass.DURATION, - "unit_of_measurement": UnitOfTime.HOURS, - "state_class": SensorStateClass.MEASUREMENT - }, - "timer_on_minute": { - "device_class": SensorDeviceClass.DURATION, - "unit_of_measurement": UnitOfTime.MINUTES, - "state_class": SensorStateClass.MEASUREMENT - }, "pm25": { "device_class": SensorDeviceClass.PM25, "unit_of_measurement": "µg/m³", @@ -153,5 +123,86 @@ DEVICE_MAPPING = { } } } + }, + "xxxxxx": { + "rationale": ["off", "on"], + "queries": [{}], + "centralized": [ + "power", "gear" + ], + "entities": { + Platform.SWITCH: { + "display_on_off": { + "device_class": SwitchDeviceClass.SWITCH, + "rationale": ["on", "off"] + }, + "anion": { + "device_class": SwitchDeviceClass.SWITCH, + }, + "temp_wind_switch": { + "device_class": SwitchDeviceClass.SWITCH, + }, + }, + Platform.FAN: { + "fan": { + "power": "power", + "speeds": list({"gear": value + 1} for value in range(0, 100)), + "preset_modes": { + "self_selection": {"mode": "self_selection"}, + "sleeping_wind": {"mode": "sleeping_wind"}, + "purified_wind": {"mode": "purified_wind"} + } + } + }, + Platform.SELECT: { + "voice": { + "options": { + "open_buzzer": {"voice": "open_buzzer"}, + "close_buzzer": {"voice": "close_buzzer"}, + "mute": {"voice": "mute"} + } + }, + "lr_shake_switch": { + "options": { + "off": {"lr_shake_switch": "off"}, + "default": {"lr_shake_switch": "default"}, + "normal": {"lr_shake_switch": "normal"}, + } + }, + "ud_shake_switch": { + "options": { + "off": {"ud_shake_switch": "off"}, + "default": {"ud_shake_switch": "default"}, + "normal": {"ud_shake_switch": "normal"}, + } + }, + }, + Platform.SENSOR: { + "real_gear": { + "device_class": SensorDeviceClass.ENUM, + "state_class": SensorStateClass.MEASUREMENT + }, + "dust_life_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "filter_life_time": { + "device_class": SensorDeviceClass.DURATION, + "unit_of_measurement": UnitOfTime.HOURS, + "state_class": SensorStateClass.MEASUREMENT + }, + "current_angle": { + "device_class": SensorDeviceClass.WIND_DIRECTION, + "unit_of_measurement": DEGREE, + "state_class": SensorStateClass.MEASUREMENT + }, + "target_angle": { + "device_class": SensorDeviceClass.WIND_DIRECTION, + "unit_of_measurement": DEGREE, + "state_class": SensorStateClass.MEASUREMENT + } + } + } } } diff --git a/custom_components/midea_auto_cloud/fan.py b/custom_components/midea_auto_cloud/fan.py index cabb0e1..5127617 100644 --- a/custom_components/midea_auto_cloud/fan.py +++ b/custom_components/midea_auto_cloud/fan.py @@ -54,7 +54,18 @@ class MideaFanEntity(MideaEntity, FanEntity): ) self._key_power = self._config.get("power") self._key_preset_modes = self._config.get("preset_modes") - self._key_speeds = self._config.get("speeds") + speeds_config = self._config.get("speeds") + # 处理范围形式的 speeds 配置: {"key": "gear", "value": [1, 9]} + if isinstance(speeds_config, dict) and "key" in speeds_config and "value" in speeds_config: + key_name = speeds_config["key"] + value_range = speeds_config["value"] + if isinstance(value_range, list) and len(value_range) == 2: + start, end = value_range[0], value_range[1] + self._key_speeds = [{key_name: str(i)} for i in range(start, end + 1)] + else: + self._key_speeds = speeds_config + else: + self._key_speeds = speeds_config self._key_oscillate = self._config.get("oscillate") self._key_directions = self._config.get("directions") self._attr_speed_count = len(self._key_speeds) if self._key_speeds else 0