mirror of
https://github.com/sususweet/midea-meiju-codec.git
synced 2025-09-27 18:22:41 +00:00
Compare commits
3 Commits
v0.0.4-alp
...
master
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b6e7bcb729 | ||
![]() |
c12158cd09 | ||
![]() |
40ba24c32a |
@@ -19,12 +19,14 @@
|
||||
- T0xAC 空调
|
||||
- T0xB3 消毒碗柜
|
||||
- T0xB8 智能扫地机器人
|
||||
- T0xCA 对开门冰箱
|
||||
- T0xCE 新风机
|
||||
- T0xCF 中央空调暖家
|
||||
- T0xD9 复式洗衣机
|
||||
- T0xDB 滚筒洗衣机
|
||||
- T0xDC 干衣机
|
||||
- T0xE1 洗碗机
|
||||
- T0xE3 恒温式燃气热水器
|
||||
- T0xEA 电饭锅
|
||||
- T0xED 软水机
|
||||
- T0xFD 加湿器
|
||||
|
@@ -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):
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
309
custom_components/midea_auto_cloud/device_mapping/T0xCA.py
Normal file
309
custom_components/midea_auto_cloud/device_mapping/T0xCA.py
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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,
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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,
|
||||
|
@@ -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,
|
||||
|
182
custom_components/midea_auto_cloud/device_mapping/T0xE3.py
Normal file
182
custom_components/midea_auto_cloud/device_mapping/T0xE3.py
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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
|
||||
}
|
||||
}
|
||||
|
@@ -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,
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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"
|
||||
}
|
@@ -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."""
|
||||
|
@@ -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
Reference in New Issue
Block a user