Compare commits
	
		
			1 Commits
		
	
	
		
			v0.6.0-bet
			...
			v0.6.0-bet
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 28e23c7f3c | 
| @ -5,12 +5,11 @@ | |||||||
| [](https://analytics.home-assistant.io/)   | [](https://analytics.home-assistant.io/)   | ||||||
| Home Assistant integration for Haier hOn: support for Haier/Candy/Hoover home appliances like washing machines. | Home Assistant integration for Haier hOn: support for Haier/Candy/Hoover home appliances like washing machines. | ||||||
| ## Supported Appliances | ## Supported Appliances | ||||||
| - Washing Machine |  | ||||||
| - Tumble Dryer | - Tumble Dryer | ||||||
| - Washer Dryer | - Washer Dryer | ||||||
|  | - Washing Machine | ||||||
| - Oven | - Oven | ||||||
| - Hob | - Hob | ||||||
| - Dish Washer |  | ||||||
|  |  | ||||||
| ## Installation | ## Installation | ||||||
| **Method 1:** [](https://my.home-assistant.io/redirect/hacs_repository/?owner=Andre0512&repository=hon&category=integration) | **Method 1:** [](https://my.home-assistant.io/redirect/hacs_repository/?owner=Andre0512&repository=hon&category=integration) | ||||||
|  | |||||||
| @ -124,7 +124,7 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = { | |||||||
|             icon="mdi:power-cycle", |             icon="mdi:power-cycle", | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|     "IH": ( |     "IV": ( | ||||||
|         HonBinarySensorEntityDescription( |         HonBinarySensorEntityDescription( | ||||||
|             key="attributes.lastConnEvent.category", |             key="attributes.lastConnEvent.category", | ||||||
|             name="Connection", |             name="Connection", | ||||||
| @ -159,34 +159,6 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = { | |||||||
|             on_value="0", |             on_value="0", | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|     "DW": ( |  | ||||||
|         HonBinarySensorEntityDescription( |  | ||||||
|             key="saltStatus", |  | ||||||
|             name="Salt", |  | ||||||
|             device_class=BinarySensorDeviceClass.PROBLEM, |  | ||||||
|             on_value="1", |  | ||||||
|             icon="mdi:shaker-outline", |  | ||||||
|         ), |  | ||||||
|         HonBinarySensorEntityDescription( |  | ||||||
|             key="rinseAidStatus", |  | ||||||
|             name="Rinse Aid", |  | ||||||
|             device_class=BinarySensorDeviceClass.PROBLEM, |  | ||||||
|             on_value="1", |  | ||||||
|             icon="mdi:spray-bottle", |  | ||||||
|         ), |  | ||||||
|         HonBinarySensorEntityDescription( |  | ||||||
|             key="attributes.lastConnEvent.category", |  | ||||||
|             name="Connection", |  | ||||||
|             device_class=BinarySensorDeviceClass.CONNECTIVITY, |  | ||||||
|             on_value="CONNECTED", |  | ||||||
|         ), |  | ||||||
|         HonBinarySensorEntityDescription( |  | ||||||
|             key="doorStatus", |  | ||||||
|             name="Door", |  | ||||||
|             device_class=BinarySensorDeviceClass.DOOR, |  | ||||||
|             on_value="1", |  | ||||||
|         ), |  | ||||||
|     ), |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -195,11 +167,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|     coordinators = hass.data[DOMAIN]["coordinators"] |     coordinators = hass.data[DOMAIN]["coordinators"] | ||||||
|     appliances = [] |     appliances = [] | ||||||
|     for device in hon.appliances: |     for device in hon.appliances: | ||||||
|         if device.unique_id in coordinators: |         if device.mac_address in coordinators: | ||||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] |             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||||
|         else: |         else: | ||||||
|             coordinator = HonCoordinator(hass, device) |             coordinator = HonCoordinator(hass, device) | ||||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator |             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||||
|         await coordinator.async_config_entry_first_refresh() |         await coordinator.async_config_entry_first_refresh() | ||||||
|  |  | ||||||
|         if descriptions := BINARY_SENSORS.get(device.appliance_type): |         if descriptions := BINARY_SENSORS.get(device.appliance_type): | ||||||
|  | |||||||
| @ -26,7 +26,7 @@ BUTTONS: dict[str, tuple[ButtonEntityDescription, ...]] = { | |||||||
|             icon="mdi:power-off", |             icon="mdi:power-off", | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|     "IH": ( |     "IV": ( | ||||||
|         ButtonEntityDescription( |         ButtonEntityDescription( | ||||||
|             key="startProgram", |             key="startProgram", | ||||||
|             name="Start Program", |             name="Start Program", | ||||||
| @ -41,11 +41,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|     coordinators = hass.data[DOMAIN]["coordinators"] |     coordinators = hass.data[DOMAIN]["coordinators"] | ||||||
|     appliances = [] |     appliances = [] | ||||||
|     for device in hon.appliances: |     for device in hon.appliances: | ||||||
|         if device.unique_id in coordinators: |         if device.mac_address in coordinators: | ||||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] |             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||||
|         else: |         else: | ||||||
|             coordinator = HonCoordinator(hass, device) |             coordinator = HonCoordinator(hass, device) | ||||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator |             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||||
|         await coordinator.async_config_entry_first_refresh() |         await coordinator.async_config_entry_first_refresh() | ||||||
|  |  | ||||||
|         if descriptions := BUTTONS.get(device.appliance_type): |         if descriptions := BUTTONS.get(device.appliance_type): | ||||||
|  | |||||||
| @ -22,12 +22,12 @@ class HonEntity(CoordinatorEntity): | |||||||
|         self._hass = hass |         self._hass = hass | ||||||
|         self._device = device |         self._device = device | ||||||
|  |  | ||||||
|         self._attr_unique_id = self._device.unique_id |         self._attr_unique_id = self._device.mac_address | ||||||
|  |  | ||||||
|     @property |     @property | ||||||
|     def device_info(self): |     def device_info(self): | ||||||
|         return DeviceInfo( |         return DeviceInfo( | ||||||
|             identifiers={(DOMAIN, self._device.unique_id)}, |             identifiers={(DOMAIN, self._device.mac_address)}, | ||||||
|             manufacturer=self._device.get("brand", ""), |             manufacturer=self._device.get("brand", ""), | ||||||
|             name=self._device.nick_name |             name=self._device.nick_name | ||||||
|             if self._device.nick_name |             if self._device.nick_name | ||||||
| @ -43,7 +43,7 @@ class HonCoordinator(DataUpdateCoordinator): | |||||||
|         super().__init__( |         super().__init__( | ||||||
|             hass, |             hass, | ||||||
|             _LOGGER, |             _LOGGER, | ||||||
|             name=device.unique_id, |             name=device.mac_address, | ||||||
|             update_interval=timedelta(seconds=30), |             update_interval=timedelta(seconds=30), | ||||||
|         ) |         ) | ||||||
|         self._device = device |         self._device = device | ||||||
|  | |||||||
| @ -6,6 +6,6 @@ | |||||||
|   "documentation": "https://github.com/Andre0512/hon/", |   "documentation": "https://github.com/Andre0512/hon/", | ||||||
|   "iot_class": "cloud_polling", |   "iot_class": "cloud_polling", | ||||||
|   "issue_tracker": "https://github.com/Andre0512/hon/issues", |   "issue_tracker": "https://github.com/Andre0512/hon/issues", | ||||||
|   "requirements": ["pyhOn==0.8.0b5"], |   "requirements": ["pyhOn==0.8.0b2"], | ||||||
|   "version": "0.6.0-beta.5" |   "version": "0.6.0-beta.1" | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| from __future__ import annotations | from __future__ import annotations | ||||||
|  |  | ||||||
| from pyhon import Hon | from pyhon import Hon | ||||||
| from pyhon.parameter.range import HonParameterRange | from pyhon.parameter import HonParameterRange | ||||||
|  |  | ||||||
| from homeassistant.components.number import ( | from homeassistant.components.number import ( | ||||||
|     NumberEntity, |     NumberEntity, | ||||||
| @ -106,7 +106,7 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = { | |||||||
|             native_unit_of_measurement=UnitOfTime.MINUTES, |             native_unit_of_measurement=UnitOfTime.MINUTES, | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|     "IH": ( |     "IV": ( | ||||||
|         NumberEntityDescription( |         NumberEntityDescription( | ||||||
|             key="startProgram.temp", |             key="startProgram.temp", | ||||||
|             name="Temperature", |             name="Temperature", | ||||||
| @ -120,21 +120,6 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = { | |||||||
|             icon="mdi:timelapse", |             icon="mdi:timelapse", | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|     "DW": ( |  | ||||||
|         NumberEntityDescription( |  | ||||||
|             key="startProgram.delayTime", |  | ||||||
|             name="Delay time", |  | ||||||
|             icon="mdi:timer-plus", |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|             native_unit_of_measurement=UnitOfTime.MINUTES, |  | ||||||
|         ), |  | ||||||
|         NumberEntityDescription( |  | ||||||
|             key="startProgram.waterHard", |  | ||||||
|             name="Water hard", |  | ||||||
|             icon="mdi:water", |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|     ), |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -143,11 +128,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|     coordinators = hass.data[DOMAIN]["coordinators"] |     coordinators = hass.data[DOMAIN]["coordinators"] | ||||||
|     appliances = [] |     appliances = [] | ||||||
|     for device in hon.appliances: |     for device in hon.appliances: | ||||||
|         if device.unique_id in coordinators: |         if device.mac_address in coordinators: | ||||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] |             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||||
|         else: |         else: | ||||||
|             coordinator = HonCoordinator(hass, device) |             coordinator = HonCoordinator(hass, device) | ||||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator |             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||||
|         await coordinator.async_config_entry_first_refresh() |         await coordinator.async_config_entry_first_refresh() | ||||||
|  |  | ||||||
|         if descriptions := NUMBERS.get(device.appliance_type): |         if descriptions := NUMBERS.get(device.appliance_type): | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ import logging | |||||||
|  |  | ||||||
| from pyhon import Hon | from pyhon import Hon | ||||||
| from pyhon.appliance import HonAppliance | from pyhon.appliance import HonAppliance | ||||||
| from pyhon.parameter.fixed import HonParameterFixed | from pyhon.parameter import HonParameterFixed | ||||||
|  |  | ||||||
| from homeassistant.components.select import SelectEntity, SelectEntityDescription | from homeassistant.components.select import SelectEntity, SelectEntityDescription | ||||||
| from homeassistant.config_entries import ConfigEntry | from homeassistant.config_entries import ConfigEntry | ||||||
| @ -76,7 +76,7 @@ SELECTS = { | |||||||
|             entity_category=EntityCategory.CONFIG, |             entity_category=EntityCategory.CONFIG, | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|     "IH": ( |     "IV": ( | ||||||
|         SelectEntityDescription( |         SelectEntityDescription( | ||||||
|             key="startProgram.program", |             key="startProgram.program", | ||||||
|             name="Program", |             name="Program", | ||||||
| @ -84,14 +84,6 @@ SELECTS = { | |||||||
|             translation_key="programs", |             translation_key="programs", | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|     "DW": ( |  | ||||||
|         SelectEntityDescription( |  | ||||||
|             key="startProgram.program", |  | ||||||
|             name="Program", |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|             translation_key="programs_dw", |  | ||||||
|         ), |  | ||||||
|     ), |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -100,11 +92,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|     coordinators = hass.data[DOMAIN]["coordinators"] |     coordinators = hass.data[DOMAIN]["coordinators"] | ||||||
|     appliances = [] |     appliances = [] | ||||||
|     for device in hon.appliances: |     for device in hon.appliances: | ||||||
|         if device.unique_id in coordinators: |         if device.mac_address in coordinators: | ||||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] |             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||||
|         else: |         else: | ||||||
|             coordinator = HonCoordinator(hass, device) |             coordinator = HonCoordinator(hass, device) | ||||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator |             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||||
|         await coordinator.async_config_entry_first_refresh() |         await coordinator.async_config_entry_first_refresh() | ||||||
|  |  | ||||||
|         if descriptions := SELECTS.get(device.appliance_type): |         if descriptions := SELECTS.get(device.appliance_type): | ||||||
|  | |||||||
| @ -21,7 +21,6 @@ from homeassistant.const import ( | |||||||
| from homeassistant.core import callback | from homeassistant.core import callback | ||||||
| from homeassistant.helpers.entity import EntityCategory | from homeassistant.helpers.entity import EntityCategory | ||||||
| from homeassistant.helpers.typing import StateType | from homeassistant.helpers.typing import StateType | ||||||
| from homeassistant.const import PERCENTAGE |  | ||||||
|  |  | ||||||
| from .const import DOMAIN | from .const import DOMAIN | ||||||
| from .hon import HonCoordinator, HonEntity | from .hon import HonCoordinator, HonEntity | ||||||
| @ -222,7 +221,7 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = { | |||||||
|             icon="mdi:thermometer", |             icon="mdi:thermometer", | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|     "IH": ( |     "IV": ( | ||||||
|         SensorEntityDescription( |         SensorEntityDescription( | ||||||
|             key="remainingTimeMM", |             key="remainingTimeMM", | ||||||
|             name="Remaining Time", |             name="Remaining Time", | ||||||
| @ -238,69 +237,6 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = { | |||||||
|         ), |         ), | ||||||
|         SensorEntityDescription(key="errors", name="Error", icon="mdi:math-log"), |         SensorEntityDescription(key="errors", name="Error", icon="mdi:math-log"), | ||||||
|     ), |     ), | ||||||
|     "DW": ( |  | ||||||
|         SensorEntityDescription( |  | ||||||
|             key="startProgram.ecoIndex", |  | ||||||
|             name="Eco Index", |  | ||||||
|             icon="mdi:sprout", |  | ||||||
|             state_class=SensorStateClass.MEASUREMENT, |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         SensorEntityDescription( |  | ||||||
|             key="startProgram.waterEfficiency", |  | ||||||
|             name="Water Efficiency", |  | ||||||
|             icon="mdi:water", |  | ||||||
|             state_class=SensorStateClass.MEASUREMENT, |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         SensorEntityDescription( |  | ||||||
|             key="startProgram.waterSaving", |  | ||||||
|             name="Water Saving", |  | ||||||
|             icon="mdi:water-percent", |  | ||||||
|             state_class=SensorStateClass.MEASUREMENT, |  | ||||||
|             native_unit_of_measurement=PERCENTAGE, |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         SensorEntityDescription( |  | ||||||
|             key="startProgram.temp", |  | ||||||
|             name="Temperature", |  | ||||||
|             icon="mdi:thermometer", |  | ||||||
|             state_class=SensorStateClass.MEASUREMENT, |  | ||||||
|             native_unit_of_measurement=UnitOfTemperature.CELSIUS, |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         SensorEntityDescription( |  | ||||||
|             key="startProgram.energyLabel", |  | ||||||
|             name="Energy Label", |  | ||||||
|             icon="mdi:lightning-bolt-circle", |  | ||||||
|             state_class=SensorStateClass.MEASUREMENT, |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         SensorEntityDescription( |  | ||||||
|             key="startProgram.remainingTime", |  | ||||||
|             name="Time", |  | ||||||
|             icon="mdi:timer", |  | ||||||
|             state_class=SensorStateClass.MEASUREMENT, |  | ||||||
|             native_unit_of_measurement=UnitOfTime.MINUTES, |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         SensorEntityDescription( |  | ||||||
|             key="machMode", |  | ||||||
|             name="Machine Status", |  | ||||||
|             icon="mdi:information", |  | ||||||
|             translation_key="mode_dw", |  | ||||||
|         ), |  | ||||||
|         SensorEntityDescription( |  | ||||||
|             key="errors", name="Error", icon="mdi:math-log", translation_key="errors" |  | ||||||
|         ), |  | ||||||
|         SensorEntityDescription( |  | ||||||
|             key="remainingTimeMM", |  | ||||||
|             name="Remaining Time", |  | ||||||
|             icon="mdi:timer", |  | ||||||
|             state_class=SensorStateClass.MEASUREMENT, |  | ||||||
|             native_unit_of_measurement=UnitOfTime.MINUTES, |  | ||||||
|         ), |  | ||||||
|     ), |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -309,11 +245,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|     coordinators = hass.data[DOMAIN]["coordinators"] |     coordinators = hass.data[DOMAIN]["coordinators"] | ||||||
|     appliances = [] |     appliances = [] | ||||||
|     for device in hon.appliances: |     for device in hon.appliances: | ||||||
|         if device.unique_id in coordinators: |         if device.mac_address in coordinators: | ||||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] |             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||||
|         else: |         else: | ||||||
|             coordinator = HonCoordinator(hass, device) |             coordinator = HonCoordinator(hass, device) | ||||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator |             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||||
|         await coordinator.async_config_entry_first_refresh() |         await coordinator.async_config_entry_first_refresh() | ||||||
|  |  | ||||||
|         if descriptions := SENSORS.get(device.appliance_type): |         if descriptions := SENSORS.get(device.appliance_type): | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| import logging | import logging | ||||||
|  |  | ||||||
| from dataclasses import dataclass | from dataclasses import dataclass | ||||||
| from typing import Any | from typing import Any | ||||||
|  |  | ||||||
| @ -7,7 +8,6 @@ from homeassistant.config_entries import ConfigEntry | |||||||
| from homeassistant.const import EntityCategory | from homeassistant.const import EntityCategory | ||||||
| from pyhon import Hon | from pyhon import Hon | ||||||
| from pyhon.appliance import HonAppliance | from pyhon.appliance import HonAppliance | ||||||
| from pyhon.parameter.range import HonParameterRange |  | ||||||
|  |  | ||||||
| from .const import DOMAIN | from .const import DOMAIN | ||||||
| from .hon import HonCoordinator, HonEntity | from .hon import HonCoordinator, HonEntity | ||||||
| @ -89,51 +89,6 @@ SWITCHES: dict[str, tuple[HonSwitchEntityDescription, ...]] = { | |||||||
|             turn_off_key="resumeProgram", |             turn_off_key="resumeProgram", | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|     "DW": ( |  | ||||||
|         HonSwitchEntityDescription( |  | ||||||
|             key="active", |  | ||||||
|             name="Dish Washer", |  | ||||||
|             icon="mdi:dishwasher", |  | ||||||
|             turn_on_key="startProgram", |  | ||||||
|             turn_off_key="stopProgram", |  | ||||||
|         ), |  | ||||||
|         HonSwitchEntityDescription( |  | ||||||
|             key="startProgram.extraDry", |  | ||||||
|             name="Extra Dry", |  | ||||||
|             icon="mdi:hair-dryer", |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         HonSwitchEntityDescription( |  | ||||||
|             key="startProgram.halfLoad", |  | ||||||
|             name="Half Load", |  | ||||||
|             icon="mdi:fraction-one-half", |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         HonSwitchEntityDescription( |  | ||||||
|             key="startProgram.openDoor", |  | ||||||
|             name="Open Door", |  | ||||||
|             icon="mdi:door-open", |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         HonSwitchEntityDescription( |  | ||||||
|             key="startProgram.threeInOne", |  | ||||||
|             name="Three in One", |  | ||||||
|             icon="mdi:numeric-3-box-outline", |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         HonSwitchEntityDescription( |  | ||||||
|             key="startProgram.ecoExpress", |  | ||||||
|             name="Eco Express", |  | ||||||
|             icon="mdi:sprout", |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|         HonSwitchEntityDescription( |  | ||||||
|             key="startProgram.addDish", |  | ||||||
|             name="Add Dish", |  | ||||||
|             icon="mdi:silverware-fork-knife", |  | ||||||
|             entity_category=EntityCategory.CONFIG, |  | ||||||
|         ), |  | ||||||
|     ), |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -142,11 +97,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|     coordinators = hass.data[DOMAIN]["coordinators"] |     coordinators = hass.data[DOMAIN]["coordinators"] | ||||||
|     appliances = [] |     appliances = [] | ||||||
|     for device in hon.appliances: |     for device in hon.appliances: | ||||||
|         if device.unique_id in coordinators: |         if device.mac_address in coordinators: | ||||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] |             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||||
|         else: |         else: | ||||||
|             coordinator = HonCoordinator(hass, device) |             coordinator = HonCoordinator(hass, device) | ||||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator |             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||||
|         await coordinator.async_config_entry_first_refresh() |         await coordinator.async_config_entry_first_refresh() | ||||||
|  |  | ||||||
|         if descriptions := SWITCHES.get(device.appliance_type): |         if descriptions := SWITCHES.get(device.appliance_type): | ||||||
| @ -183,6 +138,13 @@ class HonSwitchEntity(HonEntity, SwitchEntity): | |||||||
|         self.entity_description = description |         self.entity_description = description | ||||||
|         self._attr_unique_id = f"{super().unique_id}{description.key}" |         self._attr_unique_id = f"{super().unique_id}{description.key}" | ||||||
|  |  | ||||||
|  |     def available(self) -> bool: | ||||||
|  |         if self.entity_category == EntityCategory.CONFIG: | ||||||
|  |             return ( | ||||||
|  |                 self._device.settings[self.entity_description.key].typology != "fixed" | ||||||
|  |             ) | ||||||
|  |         return True | ||||||
|  |  | ||||||
|     @property |     @property | ||||||
|     def is_on(self) -> bool | None: |     def is_on(self) -> bool | None: | ||||||
|         """Return True if entity is on.""" |         """Return True if entity is on.""" | ||||||
| @ -198,9 +160,7 @@ class HonSwitchEntity(HonEntity, SwitchEntity): | |||||||
|     async def async_turn_on(self, **kwargs: Any) -> None: |     async def async_turn_on(self, **kwargs: Any) -> None: | ||||||
|         if self.entity_category == EntityCategory.CONFIG: |         if self.entity_category == EntityCategory.CONFIG: | ||||||
|             setting = self._device.settings[self.entity_description.key] |             setting = self._device.settings[self.entity_description.key] | ||||||
|             setting.value = ( |             setting.value = setting.max | ||||||
|                 setting.max if isinstance(setting, HonParameterRange) else "1" |  | ||||||
|             ) |  | ||||||
|             self.async_write_ha_state() |             self.async_write_ha_state() | ||||||
|         else: |         else: | ||||||
|             await self._device.commands[self.entity_description.turn_on_key].send() |             await self._device.commands[self.entity_description.turn_on_key].send() | ||||||
| @ -208,9 +168,7 @@ class HonSwitchEntity(HonEntity, SwitchEntity): | |||||||
|     async def async_turn_off(self, **kwargs: Any) -> None: |     async def async_turn_off(self, **kwargs: Any) -> None: | ||||||
|         if self.entity_category == EntityCategory.CONFIG: |         if self.entity_category == EntityCategory.CONFIG: | ||||||
|             setting = self._device.settings[self.entity_description.key] |             setting = self._device.settings[self.entity_description.key] | ||||||
|             setting.value = ( |             setting.value = setting.min | ||||||
|                 setting.min if isinstance(setting, HonParameterRange) else "0" |  | ||||||
|             ) |  | ||||||
|             self.async_write_ha_state() |             self.async_write_ha_state() | ||||||
|         else: |         else: | ||||||
|             await self._device.commands[self.entity_description.turn_off_key].send() |             await self._device.commands[self.entity_description.turn_off_key].send() | ||||||
|  | |||||||
| @ -72,16 +72,6 @@ | |||||||
|           "13": "Ready to Store H-2", |           "13": "Ready to Store H-2", | ||||||
|           "14": "Extra Dry H-3" |           "14": "Extra Dry H-3" | ||||||
|         } |         } | ||||||
|       }, |  | ||||||
|       "mode_dw": { |  | ||||||
|         "state": { |  | ||||||
|           "0": "Disconnected", |  | ||||||
|           "1": "Ready", |  | ||||||
|           "2": "Running", |  | ||||||
|           "3": "Delayed start", |  | ||||||
|           "5": "Delayed start cancelled", |  | ||||||
|           "7": "Finished" |  | ||||||
|         } |  | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "select": { |     "select": { | ||||||
| @ -469,113 +459,7 @@ | |||||||
|           "iot_standard_frying": "Frying", |           "iot_standard_frying": "Frying", | ||||||
|           "iot_standard_keep_warm": "Keep Warm", |           "iot_standard_keep_warm": "Keep Warm", | ||||||
|           "iot_standard_melting": "Melting", |           "iot_standard_melting": "Melting", | ||||||
|           "iot_standard_simmering": "Simmering" |           "iot_standard_simmering": "Simmering", | ||||||
|         } |  | ||||||
|       }, |  | ||||||
|       "programs_dw": { |  | ||||||
|         "state": { |  | ||||||
|           "59_min": "Rapid 59'", |  | ||||||
|           "auto_care": "Auto Care", |  | ||||||
|           "auto_care_soil": "Auto Care", |  | ||||||
|           "auto_hygiene": "Auto Hygiene", |  | ||||||
|           "auto_plus": "AutoPlus", |  | ||||||
|           "auto_rapid": "Auto Rapid", |  | ||||||
|           "auto_sensor": "Auto Sensor", |  | ||||||
|           "auto_sensor_soil": "Auto Sensor", |  | ||||||
|           "auto_universal": "Auto Universal 50 - 60°C", |  | ||||||
|           "auto_universal_plus": "Auto Universal+ 65 - 75°C", |  | ||||||
|           "auto_universal_plus_soil": "Auto Universal+ 65 - 75°C", |  | ||||||
|           "auto_universal_soil": "Auto Universal 50 - 60°C", |  | ||||||
|           "auto_wash": "Auto Wash", |  | ||||||
|           "auto_wash_soil": "Auto Wash", |  | ||||||
|           "classe_a_59": "A Wash 59' 65°C", |  | ||||||
|           "delicate": "Delicate 45°C", |  | ||||||
|           "dishwasher_care": "Limescale cleaning", |  | ||||||
|           "eco": "Eco", |  | ||||||
|           "eco_asynch": "Eco 45°C", |  | ||||||
|           "eco_bldc": "Eco 45°C", |  | ||||||
|           "eco_synch": "Eco 45°C", |  | ||||||
|           "gentle_wash": "Gentle wash", |  | ||||||
|           "glass": "Glass", |  | ||||||
|           "glassware": "Glassware 45°C", |  | ||||||
|           "glass_care": "Glass Care", |  | ||||||
|           "hygiene": "Hygiene", |  | ||||||
|           "hygiene_plus": "Hygiene+ 75°C", |  | ||||||
|           "intensive": "Intensive", |  | ||||||
|           "intensive_rapid": "Intensive Rapid", |  | ||||||
|           "iot_auto_sensor": "Auto Sensor", |  | ||||||
|           "iot_auto_universal_soil": "Auto Universal 50 - 60°C", |  | ||||||
|           "iot_auto_wash_soil": "Auto Wash", |  | ||||||
|           "iot_baby_care": "Baby Care", |  | ||||||
|           "iot_breakfast": "Breakfast", |  | ||||||
|           "iot_checkup": "Check-Up", |  | ||||||
|           "iot_china_crystals": "China Crystals", |  | ||||||
|           "iot_classe_a_59": "Rapid 59'", |  | ||||||
|           "iot_cocktail_glasses": "Coktail Glasses", |  | ||||||
|           "iot_cocktail_glasses_soil": "Coktail Glasses", |  | ||||||
|           "iot_daily_care": "Daily Care", |  | ||||||
|           "iot_daily_care_soil": "Daily Care", |  | ||||||
|           "iot_delicate": "Delicate 45°C", |  | ||||||
|           "iot_dinner_for_two": "Dinner for 2", |  | ||||||
|           "iot_dinner_for_two_soil": "Dinner for 2", |  | ||||||
|           "iot_dreft_quick_cycle": "Dreft Quick", |  | ||||||
|           "iot_eco_asynch": "Eco 45°C", |  | ||||||
|           "iot_eco_bldc": "Eco 45°C", |  | ||||||
|           "iot_eco_synch": "Eco 45°C", |  | ||||||
|           "iot_extra_hygiene": "Extra Hygiene", |  | ||||||
|           "iot_fairy_quick_cycle": "Fairy Short", |  | ||||||
|           "iot_happy_hour": "Happy Hour", |  | ||||||
|           "iot_jar_quick_cycle": "Jar Quick", |  | ||||||
|           "iot_party": "Party", |  | ||||||
|           "iot_party_soil": "Party", |  | ||||||
|           "iot_pizza_menu": "Pizza Menu", |  | ||||||
|           "iot_pizza_menu_soil": "Pizza Menu", |  | ||||||
|           "iot_plastic_tupperware": "Plastic & Tupperware", |  | ||||||
|           "iot_porcelain": "Porcelain", |  | ||||||
|           "iot_pot_and_pans": "Pot & Pans", |  | ||||||
|           "iot_pot_and_pans_soil": "Pot & Pans", |  | ||||||
|           "iot_power_mix_wash": "Power Mix Wash", |  | ||||||
|           "iot_power_mix_wash_soil": "Power Mix Wash", |  | ||||||
|           "iot_prewash": "Pre-wash", |  | ||||||
|           "iot_pyrex_and_glassware": "Pyrex & Glassware", |  | ||||||
|           "iot_rapid_29": "Rapid 29'", |  | ||||||
|           "iot_rapid_39": "Rapid 39' 60°C", |  | ||||||
|           "iot_single": "Single", |  | ||||||
|           "iot_steam": "Steam 75°C", |  | ||||||
|           "iot_super_flash": "Super Flash", |  | ||||||
|           "iot_super_wash": "Super Wash", |  | ||||||
|           "iot_turbopower": "TurboPower", |  | ||||||
|           "iot_universal": "Universal 60°C", |  | ||||||
|           "iot_wok_grids_maxi_pans": "Special Pans (Wok, Grids & Maxi Pans)", |  | ||||||
|           "iot_wok_grids_maxi_pans_soil": "Special Pans (Wok, Grids & Maxi Pans)", |  | ||||||
|           "iot_yes_quick_cycle": "Yes Quick", |  | ||||||
|           "night": "Night 55°C", |  | ||||||
|           "prewash": "Pre-wash", |  | ||||||
|           "rapid_20": "Rapid 20'", |  | ||||||
|           "rapid_24": "Rapid 24'", |  | ||||||
|           "rapid_29": "Rapid 29' 50°C", |  | ||||||
|           "rapid_35": "Wash&Dry 35'", |  | ||||||
|           "rapid_39": "Rapid 39' 60°C", |  | ||||||
|           "rapid_49": "Rapid 49'", |  | ||||||
|           "rapid_59": "Rapid 59'", |  | ||||||
|           "sanitising": "Sanitising", |  | ||||||
|           "silence": "Silence", |  | ||||||
|           "silent": "Silent", |  | ||||||
|           "silent_care": "Silent Care", |  | ||||||
|           "smart_ai": "Smart AI", |  | ||||||
|           "smart_ai_pro": "Smart AI Pro", |  | ||||||
|           "smart_ai_rapid": "Smart AI Rapid", |  | ||||||
|           "special": "Special", |  | ||||||
|           "special_pw_prz": "Special", |  | ||||||
|           "steam": "Steam 75°C", |  | ||||||
|           "steam_plus": "Steam Plus 75°C", |  | ||||||
|           "total_care": "Total Care 50°C", |  | ||||||
|           "ultra_silence": "Ultra Silence 55°C", |  | ||||||
|           "ultra_silent": "Ultra Silent 55°C", |  | ||||||
|           "universal": "Universal 60°C", |  | ||||||
|           "universal_plus": "Universal Plus 70°C", |  | ||||||
|           "zone_wash": "Flex Zone Wash", |  | ||||||
|           "zoom_39": "Zoom 39 min" |  | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	