Home Assistant Unofficial Reference 2024.12.1
climate.py
Go to the documentation of this file.
1 """OpenEnergyMonitor Thermostat Support."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from oemthermostat import Thermostat
8 import requests
9 import voluptuous as vol
10 
12  PLATFORM_SCHEMA as CLIMATE_PLATFORM_SCHEMA,
13  ClimateEntity,
14  ClimateEntityFeature,
15  HVACAction,
16  HVACMode,
17 )
18 from homeassistant.const import (
19  ATTR_TEMPERATURE,
20  CONF_HOST,
21  CONF_NAME,
22  CONF_PASSWORD,
23  CONF_PORT,
24  CONF_USERNAME,
25  UnitOfTemperature,
26 )
27 from homeassistant.core import HomeAssistant
29 from homeassistant.helpers.entity_platform import AddEntitiesCallback
30 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
31 
32 PLATFORM_SCHEMA = CLIMATE_PLATFORM_SCHEMA.extend(
33  {
34  vol.Required(CONF_HOST): cv.string,
35  vol.Optional(CONF_NAME, default="Thermostat"): cv.string,
36  vol.Optional(CONF_PORT, default=80): cv.port,
37  vol.Inclusive(CONF_USERNAME, "authentication"): cv.string,
38  vol.Inclusive(CONF_PASSWORD, "authentication"): cv.string,
39  }
40 )
41 
42 SUPPORT_HVAC = [HVACMode.AUTO, HVACMode.HEAT, HVACMode.OFF]
43 
44 
46  hass: HomeAssistant,
47  config: ConfigType,
48  add_entities: AddEntitiesCallback,
49  discovery_info: DiscoveryInfoType | None = None,
50 ) -> None:
51  """Set up the oemthermostat platform."""
52  name = config.get(CONF_NAME)
53  host = config.get(CONF_HOST)
54  port = config.get(CONF_PORT)
55  username = config.get(CONF_USERNAME)
56  password = config.get(CONF_PASSWORD)
57 
58  try:
59  therm = Thermostat(host, port=port, username=username, password=password)
60  except (ValueError, AssertionError, requests.RequestException):
61  return
62 
63  add_entities((ThermostatDevice(therm, name),), True)
64 
65 
67  """Interface class for the oemthermostat module."""
68 
69  _attr_hvac_modes = SUPPORT_HVAC
70  _attr_supported_features = (
71  ClimateEntityFeature.TARGET_TEMPERATURE
72  | ClimateEntityFeature.TURN_OFF
73  | ClimateEntityFeature.TURN_ON
74  )
75  _attr_temperature_unit = UnitOfTemperature.CELSIUS
76  _enable_turn_on_off_backwards_compatibility = False
77 
78  def __init__(self, thermostat, name):
79  """Initialize the device."""
80  self._name_name = name
81  self.thermostatthermostat = thermostat
82 
83  # set up internal state varS
84  self._state_state = None
85  self._temperature_temperature = None
86  self._setpoint_setpoint = None
87  self._mode_mode = None
88 
89  @property
90  def hvac_mode(self) -> HVACMode:
91  """Return hvac operation ie. heat, cool mode.
92 
93  Need to be one of HVAC_MODE_*.
94  """
95  if self._mode_mode == 2:
96  return HVACMode.HEAT
97  if self._mode_mode == 1:
98  return HVACMode.AUTO
99  return HVACMode.OFF
100 
101  @property
102  def name(self):
103  """Return the name of this Thermostat."""
104  return self._name_name
105 
106  @property
107  def hvac_action(self) -> HVACAction:
108  """Return current hvac i.e. heat, cool, idle."""
109  if not self._mode_mode:
110  return HVACAction.OFF
111  if self._state_state:
112  return HVACAction.HEATING
113  return HVACAction.IDLE
114 
115  @property
117  """Return the current temperature."""
118  return self._temperature_temperature
119 
120  @property
122  """Return the temperature we try to reach."""
123  return self._setpoint_setpoint
124 
125  def set_hvac_mode(self, hvac_mode: HVACMode) -> None:
126  """Set new target hvac mode."""
127  if hvac_mode == HVACMode.AUTO:
128  self.thermostatthermostat.mode = 1
129  elif hvac_mode == HVACMode.HEAT:
130  self.thermostatthermostat.mode = 2
131  elif hvac_mode == HVACMode.OFF:
132  self.thermostatthermostat.mode = 0
133 
134  def set_temperature(self, **kwargs: Any) -> None:
135  """Set the temperature."""
136  temp = kwargs.get(ATTR_TEMPERATURE)
137  self.thermostatthermostat.setpoint = temp
138 
139  def update(self) -> None:
140  """Update local state."""
141  self._setpoint_setpoint = self.thermostatthermostat.setpoint
142  self._temperature_temperature = self.thermostatthermostat.temperature
143  self._state_state = self.thermostatthermostat.state
144  self._mode_mode = self.thermostatthermostat.mode
None set_hvac_mode(self, HVACMode hvac_mode)
Definition: climate.py:125
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:50