This commit is contained in:
Home Assistant Version Control
2026-08-12 23:21:24 +00:00
parent 4517d1682f
commit f8ab9eda84
24 changed files with 625 additions and 468 deletions
+91 -53
View File
@@ -5,8 +5,8 @@ from typing import Any
from homeassistant.components.binary_sensor import BinarySensorDeviceClass
from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass
from homeassistant.const import (
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_MILLION,
MAJOR_VERSION,
MINOR_VERSION,
PERCENTAGE,
REVOLUTIONS_PER_MINUTE,
Platform,
@@ -19,40 +19,61 @@ from homeassistant.const import (
UnitOfTime,
UnitOfVolume,
)
from midealocal.devices.a1 import DeviceAttributes as A1Attributes
from midealocal.devices.ac import DeviceAttributes as ACAttributes
from midealocal.devices.ad import DeviceAttributes as ADAttributes
from midealocal.devices.b0 import DeviceAttributes as B0Attributes
from midealocal.devices.b1 import DeviceAttributes as B1Attributes
from midealocal.devices.b3 import DeviceAttributes as B3Attributes
from midealocal.devices.b4 import DeviceAttributes as B4Attributes
from midealocal.devices.b6 import DeviceAttributes as B6Attributes
from midealocal.devices.bf import DeviceAttributes as BFAttributes
from midealocal.devices.c2 import DeviceAttributes as C2Attributes
from midealocal.devices.c3 import DeviceAttributes as C3Attributes
from midealocal.devices.ca import DeviceAttributes as CAAttributes
from midealocal.devices.cc import DeviceAttributes as CCAttributes
from midealocal.devices.cd import DeviceAttributes as CDAttributes
from midealocal.devices.ce import DeviceAttributes as CEAttributes
from midealocal.devices.cf import DeviceAttributes as CFAttributes
from midealocal.devices.da import DeviceAttributes as DAAttributes
from midealocal.devices.db import DeviceAttributes as DBAttributes
from midealocal.devices.dc import DeviceAttributes as DCAttributes
from midealocal.devices.e1 import DeviceAttributes as E1Attributes
from midealocal.devices.e2 import DeviceAttributes as E2Attributes
from midealocal.devices.e3 import DeviceAttributes as E3Attributes
from midealocal.devices.e6 import DeviceAttributes as E6Attributes
from midealocal.devices.e8 import DeviceAttributes as E8Attributes
from midealocal.devices.ea import DeviceAttributes as EAAttributes
from midealocal.devices.ec import DeviceAttributes as ECAttributes
from midealocal.devices.ed import DeviceAttributes as EDAttributes
from midealocal.devices.fa import DeviceAttributes as FAAttributes
from midealocal.devices.fb import DeviceAttributes as FBAttributes
from midealocal.devices.fc import DeviceAttributes as FCAttributes
from midealocal.devices.fd import DeviceAttributes as FDAttributes
from midealocal.devices.x26 import DeviceAttributes as X26Attributes
from midealocal.devices.x34 import DeviceAttributes as X34Attributes
from midealocal.devices.x40 import DeviceAttributes as X40Attributes
# HA 2026.7 added UnitOfDensity/UnitOfRatio, and HA 2026.8 started deprecating
# CONCENTRATION_MICROGRAMS_PER_CUBIC_METER / CONCENTRATION_PARTS_PER_MILLION in favor of
# them (scheduled for removal in HA 2027.8). Both old and new names resolve to the
# identical runtime string ("μg/m³" / "ppm"), so this is purely cosmetic. This
# integration's floor is HA 2024.4.1, where UnitOfDensity/UnitOfRatio do not exist yet,
# so branch on the HA version like the rest of this codebase does for newer HA APIs (see
# other MAJOR_VERSION/MINOR_VERSION usages, e.g. midea_entity.py).
if (MAJOR_VERSION, MINOR_VERSION) >= (2026, 7):
from homeassistant.const import ( # pylint: disable=E0611
UnitOfDensity,
UnitOfRatio,
)
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER = UnitOfDensity.MICROGRAMS_PER_CUBIC_METER
CONCENTRATION_PARTS_PER_MILLION = UnitOfRatio.PARTS_PER_MILLION
else:
from homeassistant.const import ( # type: ignore[no-redef]
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_MILLION,
)
from midealan.devices.a1 import DeviceAttributes as A1Attributes
from midealan.devices.ac import DeviceAttributes as ACAttributes
from midealan.devices.ad import DeviceAttributes as ADAttributes
from midealan.devices.b0 import DeviceAttributes as B0Attributes
from midealan.devices.b1 import DeviceAttributes as B1Attributes
from midealan.devices.b3 import DeviceAttributes as B3Attributes
from midealan.devices.b4 import DeviceAttributes as B4Attributes
from midealan.devices.b6 import DeviceAttributes as B6Attributes
from midealan.devices.bf import DeviceAttributes as BFAttributes
from midealan.devices.c2 import DeviceAttributes as C2Attributes
from midealan.devices.c3 import DeviceAttributes as C3Attributes
from midealan.devices.ca import DeviceAttributes as CAAttributes
from midealan.devices.cc import DeviceAttributes as CCAttributes
from midealan.devices.cd import DeviceAttributes as CDAttributes
from midealan.devices.ce import DeviceAttributes as CEAttributes
from midealan.devices.cf import DeviceAttributes as CFAttributes
from midealan.devices.da import DeviceAttributes as DAAttributes
from midealan.devices.db import DeviceAttributes as DBAttributes
from midealan.devices.dc import DeviceAttributes as DCAttributes
from midealan.devices.e1 import DeviceAttributes as E1Attributes
from midealan.devices.e2 import DeviceAttributes as E2Attributes
from midealan.devices.e3 import DeviceAttributes as E3Attributes
from midealan.devices.e6 import DeviceAttributes as E6Attributes
from midealan.devices.e8 import DeviceAttributes as E8Attributes
from midealan.devices.ea import DeviceAttributes as EAAttributes
from midealan.devices.ec import DeviceAttributes as ECAttributes
from midealan.devices.ed import DeviceAttributes as EDAttributes
from midealan.devices.fa import DeviceAttributes as FAAttributes
from midealan.devices.fb import DeviceAttributes as FBAttributes
from midealan.devices.fc import DeviceAttributes as FCAttributes
from midealan.devices.fd import DeviceAttributes as FDAttributes
from midealan.devices.x26 import DeviceAttributes as X26Attributes
from midealan.devices.x34 import DeviceAttributes as X34Attributes
from midealan.devices.x40 import DeviceAttributes as X40Attributes
FRESH_AIR_EXHAUST = "fresh_air_exhaust"
FRESH_AIR_EXHAUST_MODE = "fresh_air_exhaust_mode"
@@ -647,28 +668,28 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
"unit": UnitOfElectricPotential.VOLT,
"state_class": SensorStateClass.MEASUREMENT,
},
ACAttributes.indoor_coil_temperature: {
ACAttributes.indoor_ambient_temperature: {
"type": Platform.SENSOR,
"required_attribute": ACAttributes.indoor_coil_temperature,
"translation_key": "indoor_coil_temperature",
"required_attribute": ACAttributes.indoor_ambient_temperature,
"translation_key": "indoor_ambient_temperature",
"name": "Indoor Coil Temperature (T1)",
"device_class": SensorDeviceClass.TEMPERATURE,
"unit": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT,
},
ACAttributes.evaporator_temperature: {
ACAttributes.indoor_coil_temperature: {
"type": Platform.SENSOR,
"required_attribute": ACAttributes.evaporator_temperature,
"translation_key": "evaporator_temperature",
"required_attribute": ACAttributes.indoor_coil_temperature,
"translation_key": "indoor_coil_temperature",
"name": "Evaporator Temperature (T2)",
"device_class": SensorDeviceClass.TEMPERATURE,
"unit": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT,
},
ACAttributes.condenser_temperature: {
ACAttributes.outdoor_coil_temperature: {
"type": Platform.SENSOR,
"required_attribute": ACAttributes.condenser_temperature,
"translation_key": "condenser_temperature",
"required_attribute": ACAttributes.outdoor_coil_temperature,
"translation_key": "outdoor_coil_temperature",
"name": "Condenser Temperature (T3)",
"device_class": SensorDeviceClass.TEMPERATURE,
"unit": UnitOfTemperature.CELSIUS,
@@ -904,6 +925,14 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
"icon": "mdi:box-shadow",
"device_class": BinarySensorDeviceClass.DOOR,
},
# Deliberately NO device_class here. BinarySensorDeviceClass.LOCK
# defines on = UNLOCKED, but this attribute is True when the child
# lock is ENGAGED, so that device class would display it inverted.
B0Attributes.child_lock: {
"type": Platform.BINARY_SENSOR,
"name": "Child Lock",
"icon": "mdi:lock",
},
B0Attributes.tank_ejected: {
"type": Platform.BINARY_SENSOR,
"translation_key": "tank_ejected",
@@ -938,6 +967,16 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
"name": "Status",
"icon": "mdi:information",
},
B0Attributes.mode: {
"type": Platform.SENSOR,
"name": "Mode",
"icon": "mdi:chef-hat",
},
B0Attributes.fire_power: {
"type": Platform.SENSOR,
"name": "Fire Power",
"icon": "mdi:fire",
},
B0Attributes.time_remaining: {
"type": Platform.SENSOR,
"translation_key": "time_remaining",
@@ -1022,7 +1061,7 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
"type": Platform.BINARY_SENSOR,
"translation_key": "top_compartment_cooling",
"name": "Top Compartment Cooling",
"icon": "snowflake-variant",
"icon": "mdi:snowflake-variant",
"device_class": BinarySensorDeviceClass.RUNNING,
},
B3Attributes.middle_compartment_door: {
@@ -1043,7 +1082,7 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
"type": Platform.BINARY_SENSOR,
"translation_key": "middle_compartment_cooling",
"name": "Middle Compartment Cooling",
"icon": "snowflake-variant",
"icon": "mdi:snowflake-variant",
"device_class": BinarySensorDeviceClass.RUNNING,
},
B3Attributes.bottom_compartment_door: {
@@ -1064,7 +1103,7 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
"type": Platform.BINARY_SENSOR,
"translation_key": "bottom_compartment_cooling",
"name": "Bottom Compartment Cooling",
"icon": "snowflake-variant",
"icon": "mdi:snowflake-variant",
"device_class": BinarySensorDeviceClass.RUNNING,
},
B3Attributes.top_compartment_status: {
@@ -1434,7 +1473,7 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
"name": "Silent Mode",
"icon": "mdi:fan-remove",
},
C3Attributes.SILENT_LEVEL: {
C3Attributes.silent_level: {
"type": Platform.SELECT,
"translation_key": "silent_level",
"name": "Silent Level",
@@ -1750,7 +1789,7 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
"entities": {
"climate": {
"type": Platform.CLIMATE,
"icon": "hass:air-conditioner",
"icon": "mdi:air-conditioner",
"default": True,
},
CCAttributes.aux_heating: {
@@ -2161,7 +2200,7 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
"entities": {
"climate": {
"type": Platform.CLIMATE,
"icon": "hass:air-conditioner",
"icon": "mdi:air-conditioner",
"default": True,
},
CFAttributes.aux_heating: {
@@ -2247,7 +2286,7 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
DAAttributes.wash_level: {
"type": Platform.SENSOR,
"translation_key": "wash_level",
"name": "Rinse count",
"name": "Wash level",
"icon": "mdi:hydraulic-oil-level",
},
DAAttributes.wash_strength: {
@@ -2922,7 +2961,6 @@ MIDEA_DEVICES: dict[int, dict[str, dict[str, Any] | str]] = {
"type": Platform.BINARY_SENSOR,
"translation_key": "finished",
"name": "Finished",
"icon": "",
},
E8Attributes.water_shortage: {
"type": Platform.BINARY_SENSOR,