Small fixes, fix KeyError for switches #38

This commit is contained in:
Andre Basche 2023-05-08 19:17:08 +02:00
parent 44794c35ca
commit 240dc85ff3
6 changed files with 33 additions and 27 deletions

View file

@ -40,6 +40,7 @@ Support was confirmed for these models. If a supported model is missing, please
- Candy CIS633SCTTWIFI - Candy CIS633SCTTWIFI
- Haier XIB 3B2SFS-80 - Haier XIB 3B2SFS-80
- Haier XIB 6B2D3FB - Haier XIB 6B2D3FB
- Hoover HSOT3161WG
## Supported Languages ## Supported Languages
Translation of internal names like programs are available for all languages which are official supported by the hOn app: 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 Time | `timer` | `select` | `startProgram.dryTimeMM` |
| Dry level | `hair-dryer` | `select` | `startProgram.dryLevel` | | Dry level | `hair-dryer` | `select` | `startProgram.dryLevel` |
| Energy Label | `lightning-bolt-circle` | `sensor` | `startProgram.energyLabel` | | Energy Label | `lightning-bolt-circle` | `sensor` | `startProgram.energyLabel` |
| Extra Rinse 1 | `numeric-1-box-multiple-outline` | `switch` | `extraRinse1` | | Extra Rinse 1 | `numeric-1-box-multiple-outline` | `switch` | `startProgram.extraRinse1` |
| Extra Rinse 2 | `numeric-2-box-multiple-outline` | `switch` | `extraRinse2` | | Extra Rinse 2 | `numeric-2-box-multiple-outline` | `switch` | `startProgram.extraRinse2` |
| Extra Rinse 3 | `numeric-3-box-multiple-outline` | `switch` | `extraRinse3` | | Extra Rinse 3 | `numeric-3-box-multiple-outline` | `switch` | `startProgram.extraRinse3` |
| Good Night | `weather-night` | `switch` | `goodNight` | | Good Night | `weather-night` | `switch` | `startProgram.goodNight` |
| Keep Fresh | `refresh-circle` | `switch` | `startProgram.autoSoftenerStatus` | | Keep Fresh | `refresh-circle` | `switch` | `startProgram.autoSoftenerStatus` |
| Liquid Detergent Dose | `cup-water` | `sensor` | `startProgram.liquidDetergentDose` | | Liquid Detergent Dose | `cup-water` | `sensor` | `startProgram.liquidDetergentDose` |
| Main Wash Time | `clock-start` | `number` | `startProgram.mainWashTime` | | 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 Status | `timer-check` | `switch` | `startProgram.delayStatus` |
| Delay Time | `timer-plus` | `number` | `startProgram.delayTime` | | Delay Time | `timer-plus` | `number` | `startProgram.delayTime` |
| Energy Label | `lightning-bolt-circle` | `sensor` | `startProgram.energyLabel` | | Energy Label | `lightning-bolt-circle` | `sensor` | `startProgram.energyLabel` |
| Extra Rinse 1 | `numeric-1-box-multiple-outline` | `switch` | `extraRinse1` | | Extra Rinse 1 | `numeric-1-box-multiple-outline` | `switch` | `startProgram.extraRinse1` |
| Extra Rinse 2 | `numeric-2-box-multiple-outline` | `switch` | `extraRinse2` | | Extra Rinse 2 | `numeric-2-box-multiple-outline` | `switch` | `startProgram.extraRinse2` |
| Extra Rinse 3 | `numeric-3-box-multiple-outline` | `switch` | `extraRinse3` | | Extra Rinse 3 | `numeric-3-box-multiple-outline` | `switch` | `startProgram.extraRinse3` |
| Good Night | `weather-night` | `switch` | `goodNight` | | Good Night | `weather-night` | `switch` | `startProgram.goodNight` |
| Keep Fresh | `refresh-circle` | `switch` | `startProgram.autoSoftenerStatus` | | Keep Fresh | `refresh-circle` | `switch` | `startProgram.autoSoftenerStatus` |
| Liquid Detergent Dose | `cup-water` | `sensor` | `startProgram.liquidDetergentDose` | | Liquid Detergent Dose | `cup-water` | `sensor` | `startProgram.liquidDetergentDose` |
| Main Wash Time | `clock-start` | `number` | `startProgram.mainWashTime` | | Main Wash Time | `clock-start` | `number` | `startProgram.mainWashTime` |

View file

@ -64,6 +64,11 @@ class HonButtonEntity(HonEntity, ButtonEntity):
async def async_press(self) -> None: async def async_press(self) -> None:
await self._device.commands[self.entity_description.key].send() 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): class HonFeatureRequestButton(HonEntity, ButtonEntity):
def __init__(self, hass, coordinator, entry, device: HonAppliance) -> None: 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 pyhon_version = pkg_resources.get_distribution("pyhon").version
info = f"Device Info:\n{self._device.diagnose}pyhOnVersion: {pyhon_version}" info = f"Device Info:\n{self._device.diagnose}pyhOnVersion: {pyhon_version}"
_LOGGER.error(info) _LOGGER.error(info)
@property
def available(self) -> bool:
"""Return True if entity is available."""
return super().available and self._device.get("remoteCtrValid") == "1"

View file

@ -130,8 +130,8 @@ class HonClimateEntity(HonEntity, ClimateEntity):
@callback @callback
def _handle_coordinator_update(self, update=True) -> None: def _handle_coordinator_update(self, update=True) -> None:
# self._attr_target_temperature = int(float(self._device.get("tempSel"))) self._attr_target_temperature = int(float(self._device.get("tempSel")))
# self._attr_current_temperature = float(self._device.get("tempIndoor")) self._attr_current_temperature = float(self._device.get("tempIndoor"))
self._attr_max_temp = self._device.settings["settings.tempSel"].max self._attr_max_temp = self._device.settings["settings.tempSel"].max
self._attr_min_temp = self._device.settings["settings.tempSel"].min self._attr_min_temp = self._device.settings["settings.tempSel"].min

View file

@ -7,5 +7,5 @@
"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.10.6"], "requirements": ["pyhOn==0.10.6"],
"version": "0.7.2" "version": "0.7.3-beta.0"
} }

View file

@ -82,28 +82,28 @@ SWITCHES: dict[str, tuple[HonSwitchEntityDescription, ...]] = {
translation_key="acqua_plus", translation_key="acqua_plus",
), ),
HonSwitchEntityDescription( HonSwitchEntityDescription(
key="extraRinse1", key="startProgram.extraRinse1",
name="Extra Rinse 1", name="Extra Rinse 1",
entity_category=EntityCategory.CONFIG, entity_category=EntityCategory.CONFIG,
icon="mdi:numeric-1-box-multiple-outline", icon="mdi:numeric-1-box-multiple-outline",
translation_key="extra_rinse_1", translation_key="extra_rinse_1",
), ),
HonSwitchEntityDescription( HonSwitchEntityDescription(
key="extraRinse2", key="startProgram.extraRinse2",
name="Extra Rinse 2", name="Extra Rinse 2",
entity_category=EntityCategory.CONFIG, entity_category=EntityCategory.CONFIG,
icon="mdi:numeric-2-box-multiple-outline", icon="mdi:numeric-2-box-multiple-outline",
translation_key="extra_rinse_2", translation_key="extra_rinse_2",
), ),
HonSwitchEntityDescription( HonSwitchEntityDescription(
key="extraRinse3", key="startProgram.extraRinse3",
name="Extra Rinse 3", name="Extra Rinse 3",
entity_category=EntityCategory.CONFIG, entity_category=EntityCategory.CONFIG,
icon="mdi:numeric-3-box-multiple-outline", icon="mdi:numeric-3-box-multiple-outline",
translation_key="extra_rinse_3", translation_key="extra_rinse_3",
), ),
HonSwitchEntityDescription( HonSwitchEntityDescription(
key="goodNight", key="startProgram.goodNight",
name="Good Night", name="Good Night",
icon="mdi:weather-night", icon="mdi:weather-night",
entity_category=EntityCategory.CONFIG, 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): if descriptions := SWITCHES.get(device.appliance_type):
for description in descriptions: for description in descriptions:
if ( if (
device.get(description.key) is not None description.entity_category == EntityCategory.CONFIG
or description.key in device.available_settings and description.key not in device.available_settings
or description.turn_on_key in list(device.commands) or not any(
or description.turn_off_key in list(device.commands) device.get(description.key) is not None
): or description.turn_on_key in list(device.commands)
appliances.extend( or description.turn_off_key in list(device.commands)
[HonSwitchEntity(hass, coordinator, entry, device, description)]
) )
):
continue
appliances.extend(
[HonSwitchEntity(hass, coordinator, entry, device, description)]
)
async_add_entities(appliances) async_add_entities(appliances)

View file

@ -29,6 +29,7 @@ Support was confirmed for these models. If a supported model is missing, please
- Candy CIS633SCTTWIFI - Candy CIS633SCTTWIFI
- Haier XIB 3B2SFS-80 - Haier XIB 3B2SFS-80
- Haier XIB 6B2D3FB - Haier XIB 6B2D3FB
- Hoover HSOT3161WG
## Supported Languages ## Supported Languages
Translation of internal names like programs are available for all languages which are official supported by the hOn app: Translation of internal names like programs are available for all languages which are official supported by the hOn app: