Home Assistant Unofficial Reference 2024.12.1
climate.py
Go to the documentation of this file.
1 """Support for Proliphix NT10e Thermostats."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 import proliphix
8 import voluptuous as vol
9 
11  PLATFORM_SCHEMA as CLIMATE_PLATFORM_SCHEMA,
12  ClimateEntity,
13  ClimateEntityFeature,
14  HVACAction,
15  HVACMode,
16 )
17 from homeassistant.const import (
18  ATTR_TEMPERATURE,
19  CONF_HOST,
20  CONF_PASSWORD,
21  CONF_USERNAME,
22  PRECISION_TENTHS,
23  UnitOfTemperature,
24 )
25 from homeassistant.core import HomeAssistant
27 from homeassistant.helpers.entity_platform import AddEntitiesCallback
28 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
29 
30 ATTR_FAN = "fan"
31 
32 PLATFORM_SCHEMA = CLIMATE_PLATFORM_SCHEMA.extend(
33  {
34  vol.Required(CONF_HOST): cv.string,
35  vol.Required(CONF_USERNAME): cv.string,
36  vol.Required(CONF_PASSWORD): cv.string,
37  }
38 )
39 
40 
42  hass: HomeAssistant,
43  config: ConfigType,
44  add_entities: AddEntitiesCallback,
45  discovery_info: DiscoveryInfoType | None = None,
46 ) -> None:
47  """Set up the Proliphix thermostats."""
48  username = config.get(CONF_USERNAME)
49  password = config.get(CONF_PASSWORD)
50  host = config.get(CONF_HOST)
51 
52  pdp = proliphix.PDP(host, username, password)
53  pdp.update()
54 
55  add_entities([ProliphixThermostat(pdp)], True)
56 
57 
59  """Representation a Proliphix thermostat."""
60 
61  _attr_precision = PRECISION_TENTHS
62  _attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
63  _attr_temperature_unit = UnitOfTemperature.FAHRENHEIT
64  _enable_turn_on_off_backwards_compatibility = False
65 
66  def __init__(self, pdp):
67  """Initialize the thermostat."""
68  self._pdp_pdp = pdp
69  self._name_name = None
70 
71  def update(self) -> None:
72  """Update the data from the thermostat."""
73  self._pdp_pdp.update()
74  self._name_name = self._pdp_pdp.name
75 
76  @property
77  def name(self):
78  """Return the name of the thermostat."""
79  return self._name_name
80 
81  @property
83  """Return the device specific state attributes."""
84  return {ATTR_FAN: self._pdp_pdp.fan_state}
85 
86  @property
88  """Return the current temperature."""
89  return self._pdp_pdp.cur_temp
90 
91  @property
92  def target_temperature(self):
93  """Return the temperature we try to reach."""
94  return self._pdp_pdp.setback
95 
96  @property
97  def hvac_action(self) -> HVACAction:
98  """Return the current state of the thermostat."""
99  state = self._pdp_pdp.hvac_state
100  if state == 1:
101  return HVACAction.OFF
102  if state in (3, 4, 5):
103  return HVACAction.HEATING
104  if state in (6, 7):
105  return HVACAction.COOLING
106  return HVACAction.IDLE
107 
108  @property
109  def hvac_mode(self) -> HVACMode:
110  """Return the current state of the thermostat."""
111  if self._pdp_pdp.is_heating:
112  return HVACMode.HEAT
113  if self._pdp_pdp.is_cooling:
114  return HVACMode.COOL
115  return HVACMode.OFF
116 
117  @property
118  def hvac_modes(self) -> list[HVACMode]:
119  """Return available HVAC modes."""
120  return []
121 
122  def set_temperature(self, **kwargs: Any) -> None:
123  """Set new target temperature."""
124  if (temperature := kwargs.get(ATTR_TEMPERATURE)) is None:
125  return
126  self._pdp_pdp.setback = temperature
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: climate.py:46