mirror of
https://github.com/sususweet/midea-meiju-codec.git
synced 2025-11-12 07:51:54 +00:00
feat: update device mapping for T0xFA
This commit is contained in:
@@ -45,14 +45,7 @@ DEVICE_MAPPING = {
|
|||||||
Platform.FAN: {
|
Platform.FAN: {
|
||||||
"fan": {
|
"fan": {
|
||||||
"power": "fan_power",
|
"power": "fan_power",
|
||||||
"speeds": [
|
"speeds": list({"fan_speed": value + 1} for value in range(0, 6)),
|
||||||
{"fan_speed": "1"},
|
|
||||||
{"fan_speed": "2"},
|
|
||||||
{"fan_speed": "3"},
|
|
||||||
{"fan_speed": "4"},
|
|
||||||
{"fan_speed": "5"},
|
|
||||||
{"fan_speed": "6"},
|
|
||||||
],
|
|
||||||
"preset_modes": {
|
"preset_modes": {
|
||||||
"breathing_wind": {"fan_scene": "breathing_wind"},
|
"breathing_wind": {"fan_scene": "breathing_wind"},
|
||||||
"const_temperature": {"fan_scene": "const_temperature"},
|
"const_temperature": {"fan_scene": "const_temperature"},
|
||||||
|
|||||||
@@ -12,13 +12,7 @@ DEVICE_MAPPING = {
|
|||||||
Platform.FAN: {
|
Platform.FAN: {
|
||||||
"fan": {
|
"fan": {
|
||||||
"power": "new_wind_machine",
|
"power": "new_wind_machine",
|
||||||
"speeds": [
|
"speeds": list({"fresh_air_fan_speed": value + 1} for value in range(0, 100)),
|
||||||
{"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},
|
|
||||||
],
|
|
||||||
"preset_modes": {
|
"preset_modes": {
|
||||||
"heat_exchange": {
|
"heat_exchange": {
|
||||||
"fresh_air_mode": 1,
|
"fresh_air_mode": 1,
|
||||||
@@ -166,13 +160,7 @@ DEVICE_MAPPING = {
|
|||||||
Platform.FAN: {
|
Platform.FAN: {
|
||||||
"fan": {
|
"fan": {
|
||||||
"power": "fresh_air",
|
"power": "fresh_air",
|
||||||
"speeds": [
|
"speeds": list({"fresh_air": 3, "fresh_air_fan_speed": value + 1} for value in range(0, 100)),
|
||||||
{"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},
|
|
||||||
],
|
|
||||||
"preset_modes": {
|
"preset_modes": {
|
||||||
"heat_exchange": {
|
"heat_exchange": {
|
||||||
"fresh_air_mode": 1,
|
"fresh_air_mode": 1,
|
||||||
|
|||||||
@@ -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.sensor import SensorStateClass, SensorDeviceClass
|
||||||
from homeassistant.components.binary_sensor import BinarySensorDeviceClass
|
from homeassistant.components.binary_sensor import BinarySensorDeviceClass
|
||||||
from homeassistant.components.switch import SwitchDeviceClass
|
from homeassistant.components.switch import SwitchDeviceClass
|
||||||
@@ -23,17 +23,7 @@ DEVICE_MAPPING = {
|
|||||||
Platform.FAN: {
|
Platform.FAN: {
|
||||||
"fan": {
|
"fan": {
|
||||||
"power": "power",
|
"power": "power",
|
||||||
"speeds": [
|
"speeds": list({"gear": value + 1} for value in range(0, 9)),
|
||||||
{"gear": "1"},
|
|
||||||
{"gear": "2"},
|
|
||||||
{"gear": "3"},
|
|
||||||
{"gear": "4"},
|
|
||||||
{"gear": "5"},
|
|
||||||
{"gear": "6"},
|
|
||||||
{"gear": "7"},
|
|
||||||
{"gear": "8"},
|
|
||||||
{"gear": "9"},
|
|
||||||
],
|
|
||||||
"oscillate": "swing",
|
"oscillate": "swing",
|
||||||
"preset_modes": {
|
"preset_modes": {
|
||||||
"normal": {"mode": "normal"},
|
"normal": {"mode": "normal"},
|
||||||
@@ -102,26 +92,6 @@ DEVICE_MAPPING = {
|
|||||||
"device_class": SensorDeviceClass.ENUM,
|
"device_class": SensorDeviceClass.ENUM,
|
||||||
"state_class": SensorStateClass.MEASUREMENT
|
"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": {
|
"pm25": {
|
||||||
"device_class": SensorDeviceClass.PM25,
|
"device_class": SensorDeviceClass.PM25,
|
||||||
"unit_of_measurement": "µg/m³",
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,18 @@ class MideaFanEntity(MideaEntity, FanEntity):
|
|||||||
)
|
)
|
||||||
self._key_power = self._config.get("power")
|
self._key_power = self._config.get("power")
|
||||||
self._key_preset_modes = self._config.get("preset_modes")
|
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_oscillate = self._config.get("oscillate")
|
||||||
self._key_directions = self._config.get("directions")
|
self._key_directions = self._config.get("directions")
|
||||||
self._attr_speed_count = len(self._key_speeds) if self._key_speeds else 0
|
self._attr_speed_count = len(self._key_speeds) if self._key_speeds else 0
|
||||||
|
|||||||
Reference in New Issue
Block a user