feat: add support for washing machine T0xDA

This commit is contained in:
sususweet
2025-11-05 20:58:00 +08:00
parent a680cd43b8
commit 4fe689217a
6 changed files with 279 additions and 123 deletions

View File

@@ -0,0 +1,150 @@
from homeassistant.const import Platform, UnitOfElectricPotential, UnitOfTemperature, UnitOfTime
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": [{}],
"calculate": {
"get": [
{
"lvalue": "[remain_time]",
"rvalue": "[remain_time]"
}
],
"set": {
}
},
"entities": {
Platform.NUMBER: {
"temperature": {
"min": 0,
"max": 100,
"step": 1
},
"detergent": {
"min": 0,
"max": 5,
"step": 1
},
"softener": {
"min": 0,
"max": 5,
"step": 1
},
"dehydration_speed": {
"min": 0,
"max": 1600,
"step": 100
},
"soak_time": {
"min": 0,
"max": 40,
"step": 10
},
"wash_time": {
"min": 0,
"max": 20,
"step": 1
},
"rinse_count": {
"min": 0,
"max": 3,
"step": 1
},
"dehydration_time": {
"min": 0,
"max": 9,
"step": 1
},
"wash_level": {
"min": 0,
"max": 8,
"step": 1
},
"rinse_level": {
"min": 0,
"max": 8,
"step": 1
},
"wash_strength": {
"min": 1,
"max": 4,
"step": 1
},
},
Platform.BINARY_SENSOR: {
"softener_lack": {
"device_class": BinarySensorDeviceClass.PROBLEM,
},
"detergent_lack": {
"device_class": BinarySensorDeviceClass.PROBLEM,
},
"door_opened": {
"device_class": BinarySensorDeviceClass.PROBLEM,
},
"bucket_water_overheating": {
"device_class": BinarySensorDeviceClass.PROBLEM,
},
},
Platform.SWITCH: {
"power": {
"device_class": SwitchDeviceClass.SWITCH,
},
"control_status": {
"rationale": ["pause", "start"],
},
"lock": {
"device_class": SwitchDeviceClass.SWITCH,
},
},
Platform.SELECT: {
"mode": {
"options": {
"normal": {"mode": "normal"},
"dry": {"mode": "dry"},
"continus": {"mode": "continus"},
}
},
"program": {
"options": {
"标准": {"program": "standard"},
"速洗": {"program": "fast"},
"家纺": {"program": "blanket"},
"羊毛": {"program": "wool"},
"浸洗": {"program": "embathe"},
"记忆": {"program": "memory"},
"童装": {"program": "child"},
"强洗": {"program": "strong_wash"},
"桶自洁": {"program": "bucket_self_clean"},
}
},
},
Platform.SENSOR: {
"running_status": {
"device_class": SensorDeviceClass.ENUM
},
"appointment_time": {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.MINUTES,
"state_class": SensorStateClass.MEASUREMENT
},
"remain_time": {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.MINUTES,
"state_class": SensorStateClass.MEASUREMENT
},
"progress": {
"device_class": SensorDeviceClass.BATTERY,
"unit_of_measurement": "%",
"state_class": SensorStateClass.MEASUREMENT
},
"error_code": {
"device_class": SensorDeviceClass.ENUM
},
}
}
}
}

View File

@@ -18,6 +18,48 @@ DEVICE_MAPPING = {
}
},
"entities": {
Platform.NUMBER: {
"temperature": {
"min": 0,
"max": 100,
"step": 1
},
"detergent": {
"min": 0,
"max": 5,
"step": 1
},
"softener": {
"min": 0,
"max": 5,
"step": 1
},
"dehydration_time": {
"min": 0,
"max": 9,
"step": 1
},
"dehydration_speed": {
"min": 0,
"max": 1600,
"step": 100
},
"dirty_degree": {
"min": 0,
"max": 4,
"step": 1
},
"soak_count": {
"min": 0,
"max": 5,
"step": 1
},
"wash_time": {
"min": 0,
"max": 20,
"step": 1
},
},
Platform.BINARY_SENSOR: {
"softener_lack": {
"device_class": BinarySensorDeviceClass.PROBLEM,
@@ -66,19 +108,6 @@ DEVICE_MAPPING = {
},
},
Platform.SELECT: {
"dehydration_speed": {
"options": {
"0": {"dehydration_speed": "0"},
"400": {"dehydration_speed": "400"},
"600": {"dehydration_speed": "600"},
"800": {"dehydration_speed": "800"},
"1000": {"dehydration_speed": "1000"},
"1200": {"dehydration_speed": "1200"},
"1400": {"dehydration_speed": "1400"},
"1600": {"dehydration_speed": "1600"},
"1300": {"dehydration_speed": "1300"}
}
},
"mode": {
"options": {
"normal": {"mode": "normal"},
@@ -190,68 +219,11 @@ DEVICE_MAPPING = {
"hanfu_wash": {"program": "hanfu_wash"}
}
},
"temperature": {
"options": {
"0": {"temperature": "0"},
"20": {"temperature": "20"},
"30": {"temperature": "30"},
"40": {"temperature": "40"},
"50": {"temperature": "50"},
"60": {"temperature": "60"},
"70": {"temperature": "70"},
"90": {"temperature": "90"},
"95": {"temperature": "95"}
}
},
"detergent": {
"options": {
"0": {"detergent": "0"},
"1": {"detergent": "1"},
"2": {"detergent": "2"},
"3": {"detergent": "3"},
"4": {"detergent": "4"},
"5": {"detergent": "5"}
}
},
"softener": {
"options": {
"0": {"softener": "0"},
"1": {"softener": "1"},
"2": {"softener": "2"},
"3": {"softener": "3"},
"4": {"softener": "4"},
"5": {"softener": "5"}
}
},
"dirty_degree": {
"options": {
"0": {"dirty_degree": "0"},
"1": {"dirty_degree": "1"},
"2": {"dirty_degree": "2"},
"3": {"dirty_degree": "3"},
"4": {"dirty_degree": "4"}
}
},
"soak_count": {
"options": {
"0": {"soak_count": "0"},
"1": {"soak_count": "1"},
"2": {"soak_count": "2"},
"3": {"soak_count": "3"},
"4": {"soak_count": "4"},
"5": {"soak_count": "5"}
}
}
},
Platform.SENSOR: {
"running_status": {
"device_class": SensorDeviceClass.ENUM
},
"wash_time": {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.MINUTES,
"state_class": SensorStateClass.MEASUREMENT
},
"appointment_time": {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.MINUTES,
@@ -273,11 +245,6 @@ DEVICE_MAPPING = {
"unit_of_measurement": "%",
"state_class": SensorStateClass.MEASUREMENT
},
"dehydration_time_value": {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.MINUTES,
"state_class": SensorStateClass.MEASUREMENT
},
"customize_machine_cycle": {
"device_class": SensorDeviceClass.ENUM
},
@@ -315,11 +282,6 @@ DEVICE_MAPPING = {
"active_oxygen": {
"device_class": SensorDeviceClass.ENUM
},
"dehydration_time": {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.MINUTES,
"state_class": SensorStateClass.MEASUREMENT
},
"cloud_cycle_jiepai_time2": {
"device_class": SensorDeviceClass.DURATION,
"unit_of_measurement": UnitOfTime.MINUTES,