Use shorthand attributes for Elkm1 (#99275)
This commit is contained in:
parent
dac77040a2
commit
98cb5b4b5d
2 changed files with 27 additions and 79 deletions
|
@ -5,7 +5,6 @@ from typing import Any
|
||||||
|
|
||||||
from elkm1_lib.const import ThermostatFan, ThermostatMode, ThermostatSetting
|
from elkm1_lib.const import ThermostatFan, ThermostatMode, ThermostatSetting
|
||||||
from elkm1_lib.elements import Element
|
from elkm1_lib.elements import Element
|
||||||
from elkm1_lib.elk import Elk
|
|
||||||
from elkm1_lib.thermostats import Thermostat
|
from elkm1_lib.thermostats import Thermostat
|
||||||
|
|
||||||
from homeassistant.components.climate import (
|
from homeassistant.components.climate import (
|
||||||
|
@ -80,13 +79,14 @@ class ElkThermostat(ElkEntity, ClimateEntity):
|
||||||
| ClimateEntityFeature.AUX_HEAT
|
| ClimateEntityFeature.AUX_HEAT
|
||||||
| ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
|
| ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
|
||||||
)
|
)
|
||||||
|
_attr_min_temp = 1
|
||||||
|
_attr_max_temp = 99
|
||||||
|
_attr_hvac_modes = SUPPORT_HVAC
|
||||||
|
_attr_hvac_mode: HVACMode | None = None
|
||||||
|
_attr_target_temperature_step = 1
|
||||||
|
_attr_fan_modes = [FAN_AUTO, FAN_ON]
|
||||||
_element: Thermostat
|
_element: Thermostat
|
||||||
|
|
||||||
def __init__(self, element: Element, elk: Elk, elk_data: dict[str, Any]) -> None:
|
|
||||||
"""Initialize climate entity."""
|
|
||||||
super().__init__(element, elk, elk_data)
|
|
||||||
self._state: HVACMode | None = None
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def temperature_unit(self) -> str:
|
def temperature_unit(self) -> str:
|
||||||
"""Return the temperature unit."""
|
"""Return the temperature unit."""
|
||||||
|
@ -119,41 +119,16 @@ class ElkThermostat(ElkEntity, ClimateEntity):
|
||||||
"""Return the low target temperature."""
|
"""Return the low target temperature."""
|
||||||
return self._element.heat_setpoint
|
return self._element.heat_setpoint
|
||||||
|
|
||||||
@property
|
|
||||||
def target_temperature_step(self) -> float:
|
|
||||||
"""Return the supported step of target temperature."""
|
|
||||||
return 1
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def current_humidity(self) -> int | None:
|
def current_humidity(self) -> int | None:
|
||||||
"""Return the current humidity."""
|
"""Return the current humidity."""
|
||||||
return self._element.humidity
|
return self._element.humidity
|
||||||
|
|
||||||
@property
|
|
||||||
def hvac_mode(self) -> HVACMode | None:
|
|
||||||
"""Return current operation ie. heat, cool, idle."""
|
|
||||||
return self._state
|
|
||||||
|
|
||||||
@property
|
|
||||||
def hvac_modes(self) -> list[HVACMode]:
|
|
||||||
"""Return the list of available operation modes."""
|
|
||||||
return SUPPORT_HVAC
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_aux_heat(self) -> bool:
|
def is_aux_heat(self) -> bool:
|
||||||
"""Return if aux heater is on."""
|
"""Return if aux heater is on."""
|
||||||
return self._element.mode == ThermostatMode.EMERGENCY_HEAT
|
return self._element.mode == ThermostatMode.EMERGENCY_HEAT
|
||||||
|
|
||||||
@property
|
|
||||||
def min_temp(self) -> float:
|
|
||||||
"""Return the minimum temperature supported."""
|
|
||||||
return 1
|
|
||||||
|
|
||||||
@property
|
|
||||||
def max_temp(self) -> float:
|
|
||||||
"""Return the maximum temperature supported."""
|
|
||||||
return 99
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def fan_mode(self) -> str | None:
|
def fan_mode(self) -> str | None:
|
||||||
"""Return the fan setting."""
|
"""Return the fan setting."""
|
||||||
|
@ -180,11 +155,6 @@ class ElkThermostat(ElkEntity, ClimateEntity):
|
||||||
"""Turn auxiliary heater off."""
|
"""Turn auxiliary heater off."""
|
||||||
self._elk_set(ThermostatMode.HEAT, None)
|
self._elk_set(ThermostatMode.HEAT, None)
|
||||||
|
|
||||||
@property
|
|
||||||
def fan_modes(self) -> list[str]:
|
|
||||||
"""Return the list of available fan modes."""
|
|
||||||
return [FAN_AUTO, FAN_ON]
|
|
||||||
|
|
||||||
async def async_set_fan_mode(self, fan_mode: str) -> None:
|
async def async_set_fan_mode(self, fan_mode: str) -> None:
|
||||||
"""Set new target fan mode."""
|
"""Set new target fan mode."""
|
||||||
thermostat_mode, elk_fan_mode = HASS_TO_ELK_FAN_MODES[fan_mode]
|
thermostat_mode, elk_fan_mode = HASS_TO_ELK_FAN_MODES[fan_mode]
|
||||||
|
@ -201,8 +171,11 @@ class ElkThermostat(ElkEntity, ClimateEntity):
|
||||||
|
|
||||||
def _element_changed(self, element: Element, changeset: Any) -> None:
|
def _element_changed(self, element: Element, changeset: Any) -> None:
|
||||||
if self._element.mode is None:
|
if self._element.mode is None:
|
||||||
self._state = None
|
self._attr_hvac_mode = None
|
||||||
else:
|
else:
|
||||||
self._state = ELK_TO_HASS_HVAC_MODES[self._element.mode]
|
self._attr_hvac_mode = ELK_TO_HASS_HVAC_MODES[self._element.mode]
|
||||||
if self._state == HVACMode.OFF and self._element.fan == ThermostatFan.ON:
|
if (
|
||||||
self._state = HVACMode.FAN_ONLY
|
self._attr_hvac_mode == HVACMode.OFF
|
||||||
|
and self._element.fan == ThermostatFan.ON
|
||||||
|
):
|
||||||
|
self._attr_hvac_mode = HVACMode.FAN_ONLY
|
||||||
|
|
|
@ -6,7 +6,6 @@ from typing import Any
|
||||||
from elkm1_lib.const import SettingFormat, ZoneType
|
from elkm1_lib.const import SettingFormat, ZoneType
|
||||||
from elkm1_lib.counters import Counter
|
from elkm1_lib.counters import Counter
|
||||||
from elkm1_lib.elements import Element
|
from elkm1_lib.elements import Element
|
||||||
from elkm1_lib.elk import Elk
|
|
||||||
from elkm1_lib.keypads import Keypad
|
from elkm1_lib.keypads import Keypad
|
||||||
from elkm1_lib.panel import Panel
|
from elkm1_lib.panel import Panel
|
||||||
from elkm1_lib.settings import Setting
|
from elkm1_lib.settings import Setting
|
||||||
|
@ -84,15 +83,7 @@ def temperature_to_state(temperature: int, undefined_temperature: int) -> str |
|
||||||
class ElkSensor(ElkAttachedEntity, SensorEntity):
|
class ElkSensor(ElkAttachedEntity, SensorEntity):
|
||||||
"""Base representation of Elk-M1 sensor."""
|
"""Base representation of Elk-M1 sensor."""
|
||||||
|
|
||||||
def __init__(self, element: Element, elk: Elk, elk_data: dict[str, Any]) -> None:
|
_attr_native_value: str | None = None
|
||||||
"""Initialize the base of all Elk sensors."""
|
|
||||||
super().__init__(element, elk, elk_data)
|
|
||||||
self._state: str | None = None
|
|
||||||
|
|
||||||
@property
|
|
||||||
def native_value(self) -> str | None:
|
|
||||||
"""Return the state of the sensor."""
|
|
||||||
return self._state
|
|
||||||
|
|
||||||
async def async_counter_refresh(self) -> None:
|
async def async_counter_refresh(self) -> None:
|
||||||
"""Refresh the value of a counter from the panel."""
|
"""Refresh the value of a counter from the panel."""
|
||||||
|
@ -124,20 +115,17 @@ class ElkSensor(ElkAttachedEntity, SensorEntity):
|
||||||
class ElkCounter(ElkSensor):
|
class ElkCounter(ElkSensor):
|
||||||
"""Representation of an Elk-M1 Counter."""
|
"""Representation of an Elk-M1 Counter."""
|
||||||
|
|
||||||
|
_attr_icon = "mdi:numeric"
|
||||||
_element: Counter
|
_element: Counter
|
||||||
|
|
||||||
@property
|
|
||||||
def icon(self) -> str:
|
|
||||||
"""Icon to use in the frontend."""
|
|
||||||
return "mdi:numeric"
|
|
||||||
|
|
||||||
def _element_changed(self, _: Element, changeset: Any) -> None:
|
def _element_changed(self, _: Element, changeset: Any) -> None:
|
||||||
self._state = self._element.value
|
self._attr_native_value = self._element.value
|
||||||
|
|
||||||
|
|
||||||
class ElkKeypad(ElkSensor):
|
class ElkKeypad(ElkSensor):
|
||||||
"""Representation of an Elk-M1 Keypad."""
|
"""Representation of an Elk-M1 Keypad."""
|
||||||
|
|
||||||
|
_attr_icon = "mdi:thermometer-lines"
|
||||||
_element: Keypad
|
_element: Keypad
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -150,17 +138,12 @@ class ElkKeypad(ElkSensor):
|
||||||
"""Return the unit of measurement."""
|
"""Return the unit of measurement."""
|
||||||
return self._temperature_unit
|
return self._temperature_unit
|
||||||
|
|
||||||
@property
|
|
||||||
def icon(self) -> str:
|
|
||||||
"""Icon to use in the frontend."""
|
|
||||||
return "mdi:thermometer-lines"
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def extra_state_attributes(self) -> dict[str, Any]:
|
def extra_state_attributes(self) -> dict[str, Any]:
|
||||||
"""Attributes of the sensor."""
|
"""Attributes of the sensor."""
|
||||||
attrs: dict[str, Any] = self.initial_attrs()
|
attrs: dict[str, Any] = self.initial_attrs()
|
||||||
attrs["area"] = self._element.area + 1
|
attrs["area"] = self._element.area + 1
|
||||||
attrs["temperature"] = self._state
|
attrs["temperature"] = self._attr_native_value
|
||||||
attrs["last_user_time"] = self._element.last_user_time.isoformat()
|
attrs["last_user_time"] = self._element.last_user_time.isoformat()
|
||||||
attrs["last_user"] = self._element.last_user + 1
|
attrs["last_user"] = self._element.last_user + 1
|
||||||
attrs["code"] = self._element.code
|
attrs["code"] = self._element.code
|
||||||
|
@ -169,7 +152,7 @@ class ElkKeypad(ElkSensor):
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
def _element_changed(self, _: Element, changeset: Any) -> None:
|
def _element_changed(self, _: Element, changeset: Any) -> None:
|
||||||
self._state = temperature_to_state(
|
self._attr_native_value = temperature_to_state(
|
||||||
self._element.temperature, UNDEFINED_TEMPERATURE
|
self._element.temperature, UNDEFINED_TEMPERATURE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -177,14 +160,10 @@ class ElkKeypad(ElkSensor):
|
||||||
class ElkPanel(ElkSensor):
|
class ElkPanel(ElkSensor):
|
||||||
"""Representation of an Elk-M1 Panel."""
|
"""Representation of an Elk-M1 Panel."""
|
||||||
|
|
||||||
|
_attr_icon = "mdi:home"
|
||||||
_attr_entity_category = EntityCategory.DIAGNOSTIC
|
_attr_entity_category = EntityCategory.DIAGNOSTIC
|
||||||
_element: Panel
|
_element: Panel
|
||||||
|
|
||||||
@property
|
|
||||||
def icon(self) -> str:
|
|
||||||
"""Icon to use in the frontend."""
|
|
||||||
return "mdi:home"
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def extra_state_attributes(self) -> dict[str, Any]:
|
def extra_state_attributes(self) -> dict[str, Any]:
|
||||||
"""Attributes of the sensor."""
|
"""Attributes of the sensor."""
|
||||||
|
@ -194,25 +173,21 @@ class ElkPanel(ElkSensor):
|
||||||
|
|
||||||
def _element_changed(self, _: Element, changeset: Any) -> None:
|
def _element_changed(self, _: Element, changeset: Any) -> None:
|
||||||
if self._elk.is_connected():
|
if self._elk.is_connected():
|
||||||
self._state = (
|
self._attr_native_value = (
|
||||||
"Paused" if self._element.remote_programming_status else "Connected"
|
"Paused" if self._element.remote_programming_status else "Connected"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self._state = "Disconnected"
|
self._attr_native_value = "Disconnected"
|
||||||
|
|
||||||
|
|
||||||
class ElkSetting(ElkSensor):
|
class ElkSetting(ElkSensor):
|
||||||
"""Representation of an Elk-M1 Setting."""
|
"""Representation of an Elk-M1 Setting."""
|
||||||
|
|
||||||
|
_attr_icon = "mdi:numeric"
|
||||||
_element: Setting
|
_element: Setting
|
||||||
|
|
||||||
@property
|
|
||||||
def icon(self) -> str:
|
|
||||||
"""Icon to use in the frontend."""
|
|
||||||
return "mdi:numeric"
|
|
||||||
|
|
||||||
def _element_changed(self, _: Element, changeset: Any) -> None:
|
def _element_changed(self, _: Element, changeset: Any) -> None:
|
||||||
self._state = self._element.value
|
self._attr_native_value = self._element.value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def extra_state_attributes(self) -> dict[str, Any]:
|
def extra_state_attributes(self) -> dict[str, Any]:
|
||||||
|
@ -282,10 +257,10 @@ class ElkZone(ElkSensor):
|
||||||
|
|
||||||
def _element_changed(self, _: Element, changeset: Any) -> None:
|
def _element_changed(self, _: Element, changeset: Any) -> None:
|
||||||
if self._element.definition == ZoneType.TEMPERATURE:
|
if self._element.definition == ZoneType.TEMPERATURE:
|
||||||
self._state = temperature_to_state(
|
self._attr_native_value = temperature_to_state(
|
||||||
self._element.temperature, UNDEFINED_TEMPERATURE
|
self._element.temperature, UNDEFINED_TEMPERATURE
|
||||||
)
|
)
|
||||||
elif self._element.definition == ZoneType.ANALOG_ZONE:
|
elif self._element.definition == ZoneType.ANALOG_ZONE:
|
||||||
self._state = f"{self._element.voltage}"
|
self._attr_native_value = f"{self._element.voltage}"
|
||||||
else:
|
else:
|
||||||
self._state = pretty_const(self._element.logical_status.name)
|
self._attr_native_value = pretty_const(self._element.logical_status.name)
|
||||||
|
|
Loading…
Add table
Reference in a new issue