Compare commits

...

2 Commits

Author SHA1 Message Date
Jean-Marc Collin 115df52f67 Issue#36 - Error at initialisation
Issue#32 - Error with Fan Modes on thermostat over climate type
2023-01-31 22:19:43 +01:00
Jean-Marc Collin 3371197594 Fix issue#32 Error with Fan Modes on thermostat over climate type 2023-01-31 09:35:27 +01:00
4 changed files with 93 additions and 5 deletions
@@ -220,6 +220,8 @@ class VersatileThermostat(ClimateEntity, RestoreEntity):
self._is_over_climate = False
self._underlying_climate = None
self._attr_translation_key = "versatile_thermostat"
self.post_init(entry_infos)
def post_init(self, entry_infos):
@@ -774,6 +776,50 @@ class VersatileThermostat(ClimateEntity, RestoreEntity):
return self._hvac_list
@property
def fan_mode(self) -> str | None:
"""Return the fan setting.
Requires ClimateEntityFeature.FAN_MODE.
"""
if self._is_over_climate and self._underlying_climate:
return self._underlying_climate.fan_mode
return None
@property
def fan_modes(self) -> list[str] | None:
"""Return the list of available fan modes.
Requires ClimateEntityFeature.FAN_MODE.
"""
if self._is_over_climate and self._underlying_climate:
return self._underlying_climate.fan_modes
return []
@property
def swing_mode(self) -> str | None:
"""Return the swing setting.
Requires ClimateEntityFeature.SWING_MODE.
"""
if self._is_over_climate and self._underlying_climate:
return self._underlying_climate.swing_mode
return None
@property
def swing_modes(self) -> list[str] | None:
"""Return the list of available swing modes.
Requires ClimateEntityFeature.SWING_MODE.
"""
if self._is_over_climate and self._underlying_climate:
return self._underlying_climate.swing_modes
return None
@property
def temperature_unit(self):
"""Return the unit of measurement."""
@@ -820,11 +866,14 @@ class VersatileThermostat(ClimateEntity, RestoreEntity):
@property
def _is_device_active(self):
"""If the toggleable device is currently active."""
if self._is_over_climate and self._underlying_climate:
return self._underlying_climate.hvac_action not in [
CURRENT_HVAC_IDLE,
CURRENT_HVAC_OFF,
]
if self._is_over_climate:
if self._underlying_climate:
return self._underlying_climate.hvac_action not in [
CURRENT_HVAC_IDLE,
CURRENT_HVAC_OFF,
]
else:
return None
else:
return self.hass.states.is_state(self._heater_entity_id, STATE_ON)
@@ -837,6 +886,9 @@ class VersatileThermostat(ClimateEntity, RestoreEntity):
"""Set new target hvac mode."""
_LOGGER.info("%s - Set hvac mode: %s", self, hvac_mode)
if hvac_mode is None:
return
if self._is_over_climate and self._underlying_climate:
data = {ATTR_ENTITY_ID: self._climate_entity_id, "hvac_mode": hvac_mode}
await self.hass.services.async_call(
@@ -209,5 +209,17 @@
"thermostat_over_climate": "Thermostat over another thermostat"
}
}
},
"entity": {
"climate": {
"versatile_thermostat": {
"states_attributes": {
"preset_mode": {
"power": "Shedding",
"security": "Security"
}
}
}
}
}
}
@@ -209,5 +209,17 @@
"thermostat_over_climate": "Thermostat over another thermostat"
}
}
},
"entity": {
"climate": {
"versatile_thermostat": {
"states_attributes": {
"preset_mode": {
"power": "Shedding",
"security": "Security"
}
}
}
}
}
}
@@ -209,5 +209,17 @@
"thermostat_over_climate": "Thermostat sur un autre thermostat"
}
}
},
"entity": {
"climate": {
"versatile_thermostat": {
"states_attributes": {
"preset_mode": {
"power": "Délestage",
"security": "Sécurité"
}
}
}
}
}
}