From 240dc85ff3924e574e17c2a9dbe47459990bf8fa Mon Sep 17 00:00:00 2001 From: Andre Basche Date: Mon, 8 May 2023 19:17:08 +0200 Subject: [PATCH] Small fixes, fix KeyError for switches #38 --- README.md | 17 +++++++++-------- custom_components/hon/button.py | 10 +++++----- custom_components/hon/climate.py | 4 ++-- custom_components/hon/manifest.json | 2 +- custom_components/hon/switch.py | 26 +++++++++++++++----------- info.md | 1 + 6 files changed, 33 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 6f9c8db..cbe19e1 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ Support was confirmed for these models. If a supported model is missing, please - Candy CIS633SCTTWIFI - Haier XIB 3B2SFS-80 - Haier XIB 6B2D3FB +- Hoover HSOT3161WG ## Supported Languages Translation of internal names like programs are available for all languages which are official supported by the hOn app: @@ -291,10 +292,10 @@ I moved the api related stuff into the package [pyhOn](https://github.com/Andre0 | Dry Time | `timer` | `select` | `startProgram.dryTimeMM` | | Dry level | `hair-dryer` | `select` | `startProgram.dryLevel` | | Energy Label | `lightning-bolt-circle` | `sensor` | `startProgram.energyLabel` | -| Extra Rinse 1 | `numeric-1-box-multiple-outline` | `switch` | `extraRinse1` | -| Extra Rinse 2 | `numeric-2-box-multiple-outline` | `switch` | `extraRinse2` | -| Extra Rinse 3 | `numeric-3-box-multiple-outline` | `switch` | `extraRinse3` | -| Good Night | `weather-night` | `switch` | `goodNight` | +| Extra Rinse 1 | `numeric-1-box-multiple-outline` | `switch` | `startProgram.extraRinse1` | +| Extra Rinse 2 | `numeric-2-box-multiple-outline` | `switch` | `startProgram.extraRinse2` | +| Extra Rinse 3 | `numeric-3-box-multiple-outline` | `switch` | `startProgram.extraRinse3` | +| Good Night | `weather-night` | `switch` | `startProgram.goodNight` | | Keep Fresh | `refresh-circle` | `switch` | `startProgram.autoSoftenerStatus` | | Liquid Detergent Dose | `cup-water` | `sensor` | `startProgram.liquidDetergentDose` | | Main Wash Time | `clock-start` | `number` | `startProgram.mainWashTime` | @@ -359,10 +360,10 @@ I moved the api related stuff into the package [pyhOn](https://github.com/Andre0 | Delay Status | `timer-check` | `switch` | `startProgram.delayStatus` | | Delay Time | `timer-plus` | `number` | `startProgram.delayTime` | | Energy Label | `lightning-bolt-circle` | `sensor` | `startProgram.energyLabel` | -| Extra Rinse 1 | `numeric-1-box-multiple-outline` | `switch` | `extraRinse1` | -| Extra Rinse 2 | `numeric-2-box-multiple-outline` | `switch` | `extraRinse2` | -| Extra Rinse 3 | `numeric-3-box-multiple-outline` | `switch` | `extraRinse3` | -| Good Night | `weather-night` | `switch` | `goodNight` | +| Extra Rinse 1 | `numeric-1-box-multiple-outline` | `switch` | `startProgram.extraRinse1` | +| Extra Rinse 2 | `numeric-2-box-multiple-outline` | `switch` | `startProgram.extraRinse2` | +| Extra Rinse 3 | `numeric-3-box-multiple-outline` | `switch` | `startProgram.extraRinse3` | +| Good Night | `weather-night` | `switch` | `startProgram.goodNight` | | Keep Fresh | `refresh-circle` | `switch` | `startProgram.autoSoftenerStatus` | | Liquid Detergent Dose | `cup-water` | `sensor` | `startProgram.liquidDetergentDose` | | Main Wash Time | `clock-start` | `number` | `startProgram.mainWashTime` | diff --git a/custom_components/hon/button.py b/custom_components/hon/button.py index 5cf0497..5882b95 100644 --- a/custom_components/hon/button.py +++ b/custom_components/hon/button.py @@ -64,6 +64,11 @@ class HonButtonEntity(HonEntity, ButtonEntity): async def async_press(self) -> None: await self._device.commands[self.entity_description.key].send() + @property + def available(self) -> bool: + """Return True if entity is available.""" + return super().available and self._device.get("remoteCtrValid") == "1" + class HonFeatureRequestButton(HonEntity, ButtonEntity): def __init__(self, hass, coordinator, entry, device: HonAppliance) -> None: @@ -80,8 +85,3 @@ class HonFeatureRequestButton(HonEntity, ButtonEntity): pyhon_version = pkg_resources.get_distribution("pyhon").version info = f"Device Info:\n{self._device.diagnose}pyhOnVersion: {pyhon_version}" _LOGGER.error(info) - - @property - def available(self) -> bool: - """Return True if entity is available.""" - return super().available and self._device.get("remoteCtrValid") == "1" diff --git a/custom_components/hon/climate.py b/custom_components/hon/climate.py index d5998a7..63a9966 100644 --- a/custom_components/hon/climate.py +++ b/custom_components/hon/climate.py @@ -130,8 +130,8 @@ class HonClimateEntity(HonEntity, ClimateEntity): @callback def _handle_coordinator_update(self, update=True) -> None: - # self._attr_target_temperature = int(float(self._device.get("tempSel"))) - # self._attr_current_temperature = float(self._device.get("tempIndoor")) + self._attr_target_temperature = int(float(self._device.get("tempSel"))) + self._attr_current_temperature = float(self._device.get("tempIndoor")) self._attr_max_temp = self._device.settings["settings.tempSel"].max self._attr_min_temp = self._device.settings["settings.tempSel"].min diff --git a/custom_components/hon/manifest.json b/custom_components/hon/manifest.json index d8e8893..f7a9afc 100644 --- a/custom_components/hon/manifest.json +++ b/custom_components/hon/manifest.json @@ -7,5 +7,5 @@ "iot_class": "cloud_polling", "issue_tracker": "https://github.com/Andre0512/hon/issues", "requirements": ["pyhOn==0.10.6"], - "version": "0.7.2" + "version": "0.7.3-beta.0" } diff --git a/custom_components/hon/switch.py b/custom_components/hon/switch.py index 25bd1cc..6979dc1 100644 --- a/custom_components/hon/switch.py +++ b/custom_components/hon/switch.py @@ -82,28 +82,28 @@ SWITCHES: dict[str, tuple[HonSwitchEntityDescription, ...]] = { translation_key="acqua_plus", ), HonSwitchEntityDescription( - key="extraRinse1", + key="startProgram.extraRinse1", name="Extra Rinse 1", entity_category=EntityCategory.CONFIG, icon="mdi:numeric-1-box-multiple-outline", translation_key="extra_rinse_1", ), HonSwitchEntityDescription( - key="extraRinse2", + key="startProgram.extraRinse2", name="Extra Rinse 2", entity_category=EntityCategory.CONFIG, icon="mdi:numeric-2-box-multiple-outline", translation_key="extra_rinse_2", ), HonSwitchEntityDescription( - key="extraRinse3", + key="startProgram.extraRinse3", name="Extra Rinse 3", entity_category=EntityCategory.CONFIG, icon="mdi:numeric-3-box-multiple-outline", translation_key="extra_rinse_3", ), HonSwitchEntityDescription( - key="goodNight", + key="startProgram.goodNight", name="Good Night", icon="mdi:weather-night", entity_category=EntityCategory.CONFIG, @@ -324,14 +324,18 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non if descriptions := SWITCHES.get(device.appliance_type): for description in descriptions: if ( - device.get(description.key) is not None - or description.key in device.available_settings - or description.turn_on_key in list(device.commands) - or description.turn_off_key in list(device.commands) - ): - appliances.extend( - [HonSwitchEntity(hass, coordinator, entry, device, description)] + description.entity_category == EntityCategory.CONFIG + and description.key not in device.available_settings + or not any( + device.get(description.key) is not None + or description.turn_on_key in list(device.commands) + or description.turn_off_key in list(device.commands) ) + ): + continue + appliances.extend( + [HonSwitchEntity(hass, coordinator, entry, device, description)] + ) async_add_entities(appliances) diff --git a/info.md b/info.md index 3a0b71c..afeb914 100644 --- a/info.md +++ b/info.md @@ -29,6 +29,7 @@ Support was confirmed for these models. If a supported model is missing, please - Candy CIS633SCTTWIFI - Haier XIB 3B2SFS-80 - Haier XIB 6B2D3FB +- Hoover HSOT3161WG ## Supported Languages Translation of internal names like programs are available for all languages which are official supported by the hOn app: