3 Commits

Author SHA1 Message Date
sususweet
b6e7bcb729 fix: T0xCA translation issues. 2025-09-25 11:55:06 +08:00
sususweet
c12158cd09 fix: translation and unit issues. 2025-09-25 11:45:46 +08:00
sususweet
40ba24c32a feat: support more devices. 2025-09-25 10:50:39 +08:00
19 changed files with 3372 additions and 903 deletions

View File

@@ -19,12 +19,14 @@
- T0xAC 空调
- T0xB3 消毒碗柜
- T0xB8 智能扫地机器人
- T0xCA 对开门冰箱
- T0xCE 新风机
- T0xCF 中央空调暖家
- T0xD9 复式洗衣机
- T0xDB 滚筒洗衣机
- T0xDC 干衣机
- T0xE1 洗碗机
- T0xE3 恒温式燃气热水器
- T0xEA 电饭锅
- T0xED 软水机
- T0xFD 加湿器

View File

@@ -100,7 +100,13 @@ class MideaClimateEntity(MideaEntity, ClimateEntity):
@property
def current_temperature(self):
return self.device_attributes.get(self._key_current_temperature)
temp = self.device_attributes.get(self._key_current_temperature)
if temp is not None:
try:
return float(temp)
except (ValueError, TypeError):
return None
return None
@property
def target_temperature(self):
@@ -108,10 +114,19 @@ class MideaClimateEntity(MideaEntity, ClimateEntity):
temp_int = self.device_attributes.get(self._key_target_temperature[0])
tem_dec = self.device_attributes.get(self._key_target_temperature[1])
if temp_int is not None and tem_dec is not None:
return temp_int + tem_dec
try:
return float(temp_int) + float(tem_dec)
except (ValueError, TypeError):
return None
return None
else:
return self.device_attributes.get(self._key_target_temperature)
temp = self.device_attributes.get(self._key_target_temperature)
if temp is not None:
try:
return float(temp)
except (ValueError, TypeError):
return None
return None
@property
def min_temp(self):

View File

@@ -188,10 +188,6 @@ DEVICE_MAPPING = {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.SECONDS,
"state_class": SensorStateClass.MEASUREMENT
},
"version": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
}
}
}

View File

@@ -105,8 +105,7 @@ DEVICE_MAPPING = {
},
Platform.SENSOR: {
"dust_count": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"area": {
"device_class": SensorDeviceClass.AREA,
@@ -119,12 +118,10 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"switch_status": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"water_station_status": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"work_time": {
"device_class": SensorDeviceClass.DURATION,
@@ -137,8 +134,7 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"planner_status": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"sweep_then_mop_mode_progress": {
"device_class": SensorDeviceClass.BATTERY,
@@ -146,12 +142,10 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"error_desc": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"station_error_desc": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
}
}
}

View File

@@ -0,0 +1,309 @@
from homeassistant.const import Platform, UnitOfTemperature, UnitOfTime, PERCENTAGE, 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": [
"freezing_mode", "intelligent_mode", "energy_saving_mode", "holiday_mode",
"moisturize_mode", "preservation_mode", "acme_freezing_mode", "variable_mode",
"storage_power", "left_flexzone_power", "right_flexzone_power", "freezing_power",
"function_zone_power", "storage_temperature", "freezing_temperature",
"left_flexzone_temperature", "right_flexzone_temperature"
],
"entities": {
Platform.SWITCH: {
"freezing_mode": {
"device_class": SwitchDeviceClass.SWITCH,
},
"intelligent_mode": {
"device_class": SwitchDeviceClass.SWITCH,
},
"energy_saving_mode": {
"device_class": SwitchDeviceClass.SWITCH,
},
"holiday_mode": {
"device_class": SwitchDeviceClass.SWITCH,
},
"moisturize_mode": {
"device_class": SwitchDeviceClass.SWITCH,
},
"preservation_mode": {
"device_class": SwitchDeviceClass.SWITCH,
},
"acme_freezing_mode": {
"device_class": SwitchDeviceClass.SWITCH,
},
"storage_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"left_flexzone_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"right_flexzone_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"freezing_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"function_zone_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"cross_peak_electricity": {
"device_class": SwitchDeviceClass.SWITCH,
},
"all_refrigeration_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"remove_dew_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"humidify_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"unfreeze_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"floodlight_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"radar_mode_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"milk_mode_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"icea_mode_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"plasma_aseptic_mode_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"acquire_icea_mode_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"brash_icea_mode_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"acquire_water_mode_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"freezing_ice_machine_power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"microcrystal_fresh": {
"device_class": SwitchDeviceClass.SWITCH,
},
"dry_zone": {
"device_class": SwitchDeviceClass.SWITCH,
},
"electronic_smell": {
"device_class": SwitchDeviceClass.SWITCH,
},
"eradicate_pesticide_residue": {
"device_class": SwitchDeviceClass.SWITCH,
},
"performance_mode": {
"device_class": SwitchDeviceClass.SWITCH,
},
"ice_mouth_power": {
"device_class": SwitchDeviceClass.SWITCH,
}
},
Platform.BINARY_SENSOR: {
"storage_door_state": {
"device_class": BinarySensorDeviceClass.DOOR,
},
"freezer_door_state": {
"device_class": BinarySensorDeviceClass.DOOR,
},
"flexzone_door_state": {
"device_class": BinarySensorDeviceClass.DOOR,
},
"storage_ice_home_door_state": {
"device_class": BinarySensorDeviceClass.DOOR,
},
"bar_door_state": {
"device_class": BinarySensorDeviceClass.DOOR,
},
"is_error": {
"device_class": BinarySensorDeviceClass.PROBLEM,
}
},
Platform.CLIMATE: {
"storage_zone": {
"power": "storage_power",
"hvac_modes": {
"off": {"storage_power": "off"},
"heat": {"storage_power": "on"}
},
"target_temperature": "storage_temperature",
"current_temperature": "refrigeration_real_temperature",
"min_temp": -10,
"max_temp": 10,
"temperature_unit": UnitOfTemperature.CELSIUS,
"precision": PRECISION_HALVES,
},
"freezing_zone": {
"power": "freezing_power",
"hvac_modes": {
"off": {"freezing_power": "off"},
"heat": {"freezing_power": "on"}
},
"target_temperature": "freezing_temperature",
"current_temperature": "freezing_real_temperature",
"min_temp": -30,
"max_temp": -10,
"temperature_unit": UnitOfTemperature.CELSIUS,
"precision": PRECISION_HALVES,
},
"left_flexzone": {
"power": "left_flexzone_power",
"hvac_modes": {
"off": {"left_flexzone_power": "off"},
"heat": {"left_flexzone_power": "on"}
},
"target_temperature": "left_flexzone_temperature",
"current_temperature": "left_variable_real_temperature",
"min_temp": -30,
"max_temp": 10,
"temperature_unit": UnitOfTemperature.CELSIUS,
"precision": PRECISION_HALVES,
},
"right_flexzone": {
"power": "right_flexzone_power",
"hvac_modes": {
"off": {"right_flexzone_power": "off"},
"heat": {"right_flexzone_power": "on"}
},
"target_temperature": "right_flexzone_temperature",
"current_temperature": "right_variable_real_temperature",
"min_temp": -30,
"max_temp": 10,
"temperature_unit": UnitOfTemperature.CELSIUS,
"precision": PRECISION_HALVES,
}
},
Platform.SELECT: {
"variable_mode": {
"options": {
"none_mode": {"variable_mode": "none_mode"},
"freezing": {"variable_mode": "freezing"},
"refrigeration": {"variable_mode": "refrigeration"},
"wine": {"variable_mode": "wine"},
"vegetable": {"variable_mode": "vegetable"}
}
},
"icea_bar_function_switch": {
"options": {
"default": {"icea_bar_function_switch": "default"},
"ice": {"icea_bar_function_switch": "ice"},
"water": {"icea_bar_function_switch": "water"},
"off": {"icea_bar_function_switch": "off"}
}
},
"food_site": {
"options": {
"left_freezing_room": {"food_site": "left_freezing_room"},
"right_freezing_room": {"food_site": "right_freezing_room"},
"storage_room": {"food_site": "storage_room"},
"function_zone": {"food_site": "function_zone"}
}
},
"temperature_unit": {
"options": {
"celsius": {"temperature_unit": "celsius"},
"fahrenheit": {"temperature_unit": "fahrenheit"}
}
}
},
Platform.SENSOR: {
"storage_temperature": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"freezing_temperature": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"left_flexzone_temperature": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"right_flexzone_temperature": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"refrigeration_real_temperature": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"freezing_real_temperature": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"left_variable_real_temperature": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"right_variable_real_temperature": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"interval_room_humidity_level": {
"device_class": SensorDeviceClass.HUMIDITY,
"unit_of_measurement": PERCENTAGE,
"state_class": SensorStateClass.MEASUREMENT
},
"normal_zone_level": {
"device_class": SensorDeviceClass.ENUM
},
"function_zone_level": {
"device_class": SensorDeviceClass.ENUM
},
"freeze_fahrenheit_level": {
"device_class": SensorDeviceClass.ENUM
},
"refrigeration_fahrenheit_level": {
"device_class": SensorDeviceClass.ENUM
},
"leach_expire_day": {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.DAYS,
"state_class": SensorStateClass.MEASUREMENT
},
"power_consumption_low": {
"device_class": SensorDeviceClass.POWER,
"unit_of_measurement": "W",
"state_class": SensorStateClass.MEASUREMENT
},
"power_consumption_high": {
"device_class": SensorDeviceClass.POWER,
"unit_of_measurement": "W",
"state_class": SensorStateClass.MEASUREMENT
},
"fast_cold_minute": {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.MINUTES,
"state_class": SensorStateClass.MEASUREMENT
},
"fast_freeze_minute": {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.MINUTES,
"state_class": SensorStateClass.MEASUREMENT
}
}
}
}
}

View File

@@ -135,8 +135,7 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"error_code": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"humidity_set": {
"device_class": SensorDeviceClass.HUMIDITY,
@@ -178,8 +177,7 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"machine_type": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
}
}
}

View File

@@ -109,8 +109,7 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"error_code": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"heat_max_set_temp": {
"device_class": SensorDeviceClass.TEMPERATURE,

View File

@@ -136,8 +136,7 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"db_error_code": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"db_set_dewater_time": {
"device_class": SensorDeviceClass.DURATION,
@@ -150,12 +149,10 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"db_device_software_version": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"db_rinse_count": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"db_wash_time": {
"device_class": SensorDeviceClass.DURATION,
@@ -168,8 +165,7 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"db_appointment": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"db_dehydration_time": {
"device_class": SensorDeviceClass.DURATION,
@@ -177,8 +173,7 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"db_cycle_memory": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
}
}
}

View File

@@ -272,12 +272,10 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"dryer": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"remote_control_flag": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"progress": {
"device_class": SensorDeviceClass.BATTERY,
@@ -285,28 +283,22 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"cloud_cycle_low": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"cloud_cycle_high": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"cloud_cycle_jiepai1": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"cloud_cycle_jiepai2": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"cloud_cycle_jiepai3": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"cloud_cycle_jiepai4": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"cloud_cycle_jiepai_time1": {
"device_class": SensorDeviceClass.DURATION,
@@ -329,24 +321,19 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"customize_machine_cycle": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"detergent_global": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"softener_global": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"detergent_density_global": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"softener_density_global": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"fresh_air_time": {
"device_class": SensorDeviceClass.DURATION,
@@ -359,24 +346,19 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"device_software_version": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"expert_step": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"error_code": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"flocks_wash_count": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"active_oxygen": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"dehydration_time": {
"device_class": SensorDeviceClass.DURATION,

View File

@@ -131,16 +131,10 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"progress": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
},
"version": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"error_code": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"dry_time": {
"device_class": SensorDeviceClass.DURATION,

View File

@@ -0,0 +1,182 @@
from homeassistant.const import Platform, UnitOfTemperature, UnitOfVolume, UnitOfTime, PERCENTAGE, 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", "bubble", "cold_water", "bathtub", "safe", "cold_water_dot",
"change_litre_switch", "cold_water_ai", "cold_water_pressure",
"person_mode_one", "person_mode_two", "person_mode_three", "gesture_function",
"mode", "power_level", "type_machine", "capacity", "temperature"
],
"entities": {
Platform.SWITCH: {
"bubble": {
"device_class": SwitchDeviceClass.SWITCH,
},
"cold_water": {
"device_class": SwitchDeviceClass.SWITCH,
},
"bathtub": {
"device_class": SwitchDeviceClass.SWITCH,
},
"safe": {
"device_class": SwitchDeviceClass.SWITCH,
},
"cold_water_dot": {
"device_class": SwitchDeviceClass.SWITCH,
},
"change_litre_switch": {
"device_class": SwitchDeviceClass.SWITCH,
},
"cold_water_ai": {
"device_class": SwitchDeviceClass.SWITCH,
},
"cold_water_pressure": {
"device_class": SwitchDeviceClass.SWITCH,
},
"person_mode_one": {
"device_class": SwitchDeviceClass.SWITCH,
},
"person_mode_two": {
"device_class": SwitchDeviceClass.SWITCH,
},
"person_mode_three": {
"device_class": SwitchDeviceClass.SWITCH,
},
"gesture_function": {
"device_class": SwitchDeviceClass.SWITCH,
}
},
Platform.CLIMATE: {
"water_heater": {
"power": "power",
"hvac_modes": {
"off": {"power": "off"},
"heat": {"power": "on", "mode": "shower"}
},
"target_temperature": "temperature",
"current_temperature": "out_water_tem",
"min_temp": 20,
"max_temp": 60,
"temperature_unit": UnitOfTemperature.CELSIUS,
"precision": PRECISION_HALVES,
}
},
Platform.SELECT: {
"mode": {
"options": {
"shower": {"mode": "shower"},
"bath": {"mode": "bath"},
"mixed": {"mode": "mixed"},
"eco": {"mode": "eco"}
}
},
"power_level": {
"options": {
"low": {"power_level": "0"},
"medium": {"power_level": "1"},
"high": {"power_level": "2"},
"max": {"power_level": "3"}
}
},
"type_machine": {
"options": {
"standard": {"type_machine": "20"},
"premium": {"type_machine": "21"},
"deluxe": {"type_machine": "22"}
}
},
"capacity": {
"options": {
"small": {"capacity": "1"},
"medium": {"capacity": "2"},
"large": {"capacity": "3"}
}
},
"gesture_function_type": {
"options": {
"none": {"gesture_function_type": "0"},
"wave": {"gesture_function_type": "1"},
"touch": {"gesture_function_type": "2"},
"proximity": {"gesture_function_type": "3"}
}
}
},
Platform.SENSOR: {
"out_water_tem": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"water_volume": {
"device_class": SensorDeviceClass.VOLUME,
"unit_of_measurement": UnitOfVolume.LITERS,
"state_class": SensorStateClass.TOTAL_INCREASING
},
"zero_cold_tem": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"bath_out_volume": {
"device_class": SensorDeviceClass.VOLUME,
"unit_of_measurement": UnitOfVolume.LITERS,
"state_class": SensorStateClass.TOTAL_INCREASING
},
"return_water_tem": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"change_litre": {
"device_class": SensorDeviceClass.VOLUME,
"unit_of_measurement": UnitOfVolume.LITERS,
"state_class": SensorStateClass.TOTAL_INCREASING
},
"bathtub_water_level": {
"device_class": SensorDeviceClass.VOLUME,
"unit_of_measurement": UnitOfVolume.LITERS,
"state_class": SensorStateClass.TOTAL_INCREASING
},
"temperature": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"gas_lift_percent": {
"device_class": SensorDeviceClass.POWER_FACTOR,
"unit_of_measurement": PERCENTAGE,
"state_class": SensorStateClass.MEASUREMENT
},
"person_tem_one": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"person_tem_two": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"person_tem_three": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"in_water_tem": {
"device_class": SensorDeviceClass.TEMPERATURE,
"unit_of_measurement": UnitOfTemperature.CELSIUS,
"state_class": SensorStateClass.MEASUREMENT
},
"error_code": {
"device_class": SensorDeviceClass.ENUM
}
}
}
}
}

View File

@@ -76,15 +76,16 @@ DEVICE_MAPPING = {
Platform.SENSOR: {
"micro_leak_protection_value": {
"device_class": SensorDeviceClass.PRESSURE,
"unit_of_measurement": "kPa",
"state_class": SensorStateClass.MEASUREMENT
},
"regeneration_current_stages": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"water_hardness": {
"device_class": SensorDeviceClass.WATER,
"state_class": SensorStateClass.MEASUREMENT
"unit_of_measurement": UnitOfVolume.LITERS,
"state_class": SensorStateClass.TOTAL_INCREASING
},
"timing_regeneration_hour": {
"device_class": SensorDeviceClass.DURATION,
@@ -107,12 +108,10 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"maintenance_reminder_setting": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"mixed_water_gear": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"use_days": {
"device_class": SensorDeviceClass.DURATION,
@@ -126,6 +125,7 @@ DEVICE_MAPPING = {
},
"velocity": {
"device_class": SensorDeviceClass.SPEED,
"unit_of_measurement": "m/s",
"state_class": SensorStateClass.MEASUREMENT
},
"supply_voltage": {
@@ -149,12 +149,10 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"salt_setting": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"regeneration_count": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"battery_voltage": {
"device_class": SensorDeviceClass.VOLTAGE,
@@ -162,8 +160,7 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"error": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"days_since_last_two_regeneration": {
"device_class": SensorDeviceClass.DURATION,
@@ -176,20 +173,16 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"real_date_setting_year": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"real_date_setting_month": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"real_date_setting_day": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"category": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"real_time_setting_min": {
"device_class": SensorDeviceClass.DURATION,
@@ -197,28 +190,27 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"regeneration_stages": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"soft_available_big": {
"device_class": SensorDeviceClass.VOLUME,
"unit_of_measurement": UnitOfVolume.LITERS,
"state_class": SensorStateClass.MEASUREMENT
"state_class": SensorStateClass.TOTAL_INCREASING
},
"water_consumption_big": {
"device_class": SensorDeviceClass.VOLUME,
"unit_of_measurement": UnitOfVolume.LITERS,
"state_class": SensorStateClass.MEASUREMENT
"state_class": SensorStateClass.TOTAL_INCREASING
},
"water_consumption_today": {
"device_class": SensorDeviceClass.VOLUME,
"unit_of_measurement": UnitOfVolume.LITERS,
"state_class": SensorStateClass.MEASUREMENT
"state_class": SensorStateClass.TOTAL_INCREASING
},
"water_consumption_average": {
"device_class": SensorDeviceClass.VOLUME,
"unit_of_measurement": UnitOfVolume.LITERS,
"state_class": SensorStateClass.MEASUREMENT
"state_class": SensorStateClass.TOTAL_INCREASING
},
"salt_alarm_threshold": {
"device_class": SensorDeviceClass.WEIGHT,
@@ -227,6 +219,7 @@ DEVICE_MAPPING = {
},
"leak_water_protection_value": {
"device_class": SensorDeviceClass.PRESSURE,
"unit_of_measurement": "kPa",
"state_class": SensorStateClass.MEASUREMENT
}
}

View File

@@ -114,8 +114,7 @@ DEVICE_MAPPING = {
"state_class": SensorStateClass.MEASUREMENT
},
"error_code": {
"device_class": SensorDeviceClass.ENUM,
"state_class": SensorStateClass.MEASUREMENT
"device_class": SensorDeviceClass.ENUM
},
"cur_temperature": {
"device_class": SensorDeviceClass.TEMPERATURE,

View File

@@ -1,6 +1,5 @@
from homeassistant.const import Platform, UnitOfTemperature
from homeassistant.const import Platform, UnitOfTemperature, PRECISION_HALVES
from homeassistant.components.sensor import SensorStateClass, SensorDeviceClass
from homeassistant.components.climate.const import PRECISION_HALVES
from homeassistant.components.binary_sensor import BinarySensorDeviceClass
from homeassistant.components.switch import SwitchDeviceClass

View File

@@ -7,5 +7,5 @@
"iot_class": "cloud_push",
"issue_tracker": "https://github.com/sususweet/midea-meiju-codec/issues",
"requirements": [],
"version": "v0.0.4"
"version": "v0.0.5"
}

View File

@@ -124,8 +124,10 @@ class MideaEntity(CoordinatorEntity[MideaDataUpdateCoordinator], Entity):
@property
def available(self) -> bool:
"""Return if entity is available."""
MideaLogger.debug(f"available available={self.coordinator.data} ")
return self.coordinator.data.available
if self.coordinator.data:
return self.coordinator.data.available
else:
return False
async def _publish_command(self) -> None:
"""Publish commands to the device."""

View File

@@ -66,4 +66,26 @@ class MideaSensorEntity(MideaEntity, SensorEntity):
@property
def native_value(self):
"""Return the native value of the sensor."""
return self.device_attributes.get(self._entity_key)
value = self.device_attributes.get(self._entity_key)
# Handle invalid string values
if isinstance(value, str) and value.lower() in ['invalid', 'none', 'null', '']:
return None
# Try to convert to number if it's a string that looks like a number
if isinstance(value, str):
try:
# Try integer first
if '.' not in value:
return int(value)
# Then float
return float(value)
except (ValueError, TypeError):
# If conversion fails, return None for numeric sensors
# or return the original string for enum sensors
device_class = self._config.get("device_class")
if device_class and "enum" not in device_class.lower():
return None
return value
return value

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff