Home Assistant Unofficial Reference 2024.12.1
climate.py
Go to the documentation of this file.
1 """Support for Vera thermostats."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 import pyvera as veraApi
8 
10  ENTITY_ID_FORMAT,
11  FAN_AUTO,
12  FAN_ON,
13  ClimateEntity,
14  ClimateEntityFeature,
15  HVACMode,
16 )
17 from homeassistant.config_entries import ConfigEntry
18 from homeassistant.const import ATTR_TEMPERATURE, Platform, UnitOfTemperature
19 from homeassistant.core import HomeAssistant
20 from homeassistant.helpers.entity_platform import AddEntitiesCallback
21 
22 from .common import ControllerData, get_controller_data
23 from .entity import VeraEntity
24 
25 FAN_OPERATION_LIST = [FAN_ON, FAN_AUTO]
26 
27 SUPPORT_HVAC = [HVACMode.COOL, HVACMode.HEAT, HVACMode.HEAT_COOL, HVACMode.OFF]
28 
29 
31  hass: HomeAssistant,
32  entry: ConfigEntry,
33  async_add_entities: AddEntitiesCallback,
34 ) -> None:
35  """Set up the sensor config entry."""
36  controller_data = get_controller_data(hass, entry)
38  [
39  VeraThermostat(device, controller_data)
40  for device in controller_data.devices[Platform.CLIMATE]
41  ],
42  True,
43  )
44 
45 
46 class VeraThermostat(VeraEntity[veraApi.VeraThermostat], ClimateEntity):
47  """Representation of a Vera Thermostat."""
48 
49  _attr_hvac_modes = SUPPORT_HVAC
50  _attr_fan_modes = FAN_OPERATION_LIST
51  _attr_supported_features = (
52  ClimateEntityFeature.TARGET_TEMPERATURE
53  | ClimateEntityFeature.FAN_MODE
54  | ClimateEntityFeature.TURN_OFF
55  | ClimateEntityFeature.TURN_ON
56  )
57  _enable_turn_on_off_backwards_compatibility = False
58 
59  def __init__(
60  self, vera_device: veraApi.VeraThermostat, controller_data: ControllerData
61  ) -> None:
62  """Initialize the Vera device."""
63  VeraEntity.__init__(self, vera_device, controller_data)
64  self.entity_identity_identity_id = ENTITY_ID_FORMAT.format(self.vera_id)
65 
66  @property
67  def hvac_mode(self) -> HVACMode:
68  """Return hvac operation ie. heat, cool mode.
69 
70  Need to be one of HVAC_MODE_*.
71  """
72  mode = self.vera_device.get_hvac_mode()
73  if mode == "HeatOn":
74  return HVACMode.HEAT
75  if mode == "CoolOn":
76  return HVACMode.COOL
77  if mode == "AutoChangeOver":
78  return HVACMode.HEAT_COOL
79  return HVACMode.OFF
80 
81  @property
82  def fan_mode(self) -> str | None:
83  """Return the fan setting."""
84  if self.vera_device.get_fan_mode() == "ContinuousOn":
85  return FAN_ON
86  return FAN_AUTO
87 
88  def set_fan_mode(self, fan_mode: str) -> None:
89  """Set new target temperature."""
90  if fan_mode == FAN_ON:
91  self.vera_device.fan_on()
92  else:
93  self.vera_device.fan_auto()
94 
95  self.schedule_update_ha_stateschedule_update_ha_state()
96 
97  @property
98  def temperature_unit(self) -> str:
99  """Return the unit of measurement."""
100  vera_temp_units = self.vera_device.vera_controller.temperature_units
101 
102  if vera_temp_units == "F":
103  return UnitOfTemperature.FAHRENHEIT
104 
105  return UnitOfTemperature.CELSIUS
106 
107  @property
108  def current_temperature(self) -> float | None:
109  """Return the current temperature."""
110  return self.vera_device.get_current_temperature()
111 
112  @property
113  def operation(self) -> str:
114  """Return current operation ie. heat, cool, idle."""
115  return self.vera_device.get_hvac_mode()
116 
117  @property
118  def target_temperature(self) -> float | None:
119  """Return the temperature we try to reach."""
120  return self.vera_device.get_current_goal_temperature()
121 
122  def set_temperature(self, **kwargs: Any) -> None:
123  """Set new target temperatures."""
124  if kwargs.get(ATTR_TEMPERATURE) is not None:
125  self.vera_device.set_temperature(kwargs.get(ATTR_TEMPERATURE))
126 
127  self.schedule_update_ha_stateschedule_update_ha_state()
128 
129  def set_hvac_mode(self, hvac_mode: HVACMode) -> None:
130  """Set new target hvac mode."""
131  if hvac_mode == HVACMode.OFF:
132  self.vera_device.turn_off()
133  elif hvac_mode == HVACMode.HEAT_COOL:
134  self.vera_device.turn_auto_on()
135  elif hvac_mode == HVACMode.COOL:
136  self.vera_device.turn_cool_on()
137  elif hvac_mode == HVACMode.HEAT:
138  self.vera_device.turn_heat_on()
139 
140  self.schedule_update_ha_stateschedule_update_ha_state()
None set_hvac_mode(self, HVACMode hvac_mode)
Definition: climate.py:129
None __init__(self, veraApi.VeraThermostat vera_device, ControllerData controller_data)
Definition: climate.py:61
None schedule_update_ha_state(self, bool force_refresh=False)
Definition: entity.py:1244
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: climate.py:34
ControllerData get_controller_data(HomeAssistant hass, ConfigEntry config_entry)
Definition: common.py:40