Home Assistant Unofficial Reference 2024.12.1
climate.py
Go to the documentation of this file.
1 """Platform for climate integration."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from devolo_home_control_api.devices.zwave import Zwave
8 from devolo_home_control_api.homecontrol import HomeControl
9 
11  ATTR_TEMPERATURE,
12  ClimateEntity,
13  ClimateEntityFeature,
14  HVACMode,
15 )
16 from homeassistant.const import PRECISION_HALVES, PRECISION_TENTHS, UnitOfTemperature
17 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.entity_platform import AddEntitiesCallback
19 
20 from . import DevoloHomeControlConfigEntry
21 from .devolo_multi_level_switch import DevoloMultiLevelSwitchDeviceEntity
22 
23 
25  hass: HomeAssistant,
26  entry: DevoloHomeControlConfigEntry,
27  async_add_entities: AddEntitiesCallback,
28 ) -> None:
29  """Get all cover devices and setup them via config entry."""
30 
33  homecontrol=gateway,
34  device_instance=device,
35  element_uid=multi_level_switch,
36  )
37  for gateway in entry.runtime_data
38  for device in gateway.multi_level_switch_devices
39  for multi_level_switch in device.multi_level_switch_property
40  if device.device_model_uid
41  in (
42  "devolo.model.Thermostat:Valve",
43  "devolo.model.Room:Thermostat",
44  "devolo.model.Eurotronic:Spirit:Device",
45  "unk.model.Danfoss:Thermostat",
46  )
47  )
48 
49 
51  """Representation of a climate/thermostat device within devolo Home Control."""
52 
53  _attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
54  _attr_target_temperature_step = PRECISION_HALVES
55  _attr_temperature_unit = UnitOfTemperature.CELSIUS
56  _attr_precision = PRECISION_TENTHS
57  _attr_hvac_mode = HVACMode.HEAT
58  _attr_hvac_modes = [HVACMode.HEAT]
59  _enable_turn_on_off_backwards_compatibility = False
60 
61  def __init__(
62  self, homecontrol: HomeControl, device_instance: Zwave, element_uid: str
63  ) -> None:
64  """Initialize a climate entity within devolo Home Control."""
65  super().__init__(
66  homecontrol=homecontrol,
67  device_instance=device_instance,
68  element_uid=element_uid,
69  )
70 
71  self._attr_min_temp_attr_min_temp = self._multi_level_switch_property_multi_level_switch_property.min
72  self._attr_max_temp_attr_max_temp = self._multi_level_switch_property_multi_level_switch_property.max
73 
74  @property
75  def current_temperature(self) -> float | None:
76  """Return the current temperature."""
77  if hasattr(self._device_instance_device_instance, "multi_level_sensor_property"):
78  return next(
79  (
80  multi_level_sensor.value
81  for multi_level_sensor in self._device_instance_device_instance.multi_level_sensor_property.values()
82  if multi_level_sensor.sensor_type == "temperature"
83  ),
84  None,
85  )
86 
87  return None
88 
89  @property
90  def target_temperature(self) -> float | None:
91  """Return the target temperature."""
92  return self._value_value_value
93 
94  def set_hvac_mode(self, hvac_mode: HVACMode) -> None:
95  """Do nothing as devolo devices do not support changing the hvac mode."""
96 
97  def set_temperature(self, **kwargs: Any) -> None:
98  """Set new target temperature."""
99  self._multi_level_switch_property_multi_level_switch_property.set(kwargs[ATTR_TEMPERATURE])
None __init__(self, HomeControl homecontrol, Zwave device_instance, str element_uid)
Definition: climate.py:63
None async_setup_entry(HomeAssistant hass, DevoloHomeControlConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: climate.py:28