1 """Support for Homematic thermostats."""
3 from __future__
import annotations
21 from .const
import ATTR_DISCOVER_DEVICES, HM_ATTRIBUTE_SUPPORT
22 from .entity
import HMDevice
24 HM_TEMP_MAP = [
"ACTUAL_TEMPERATURE",
"TEMPERATURE"]
26 HM_HUMI_MAP = [
"ACTUAL_HUMIDITY",
"HUMIDITY"]
29 "BOOST_MODE": PRESET_BOOST,
30 "COMFORT_MODE": PRESET_COMFORT,
31 "LOWERING_MODE": PRESET_ECO,
34 HM_CONTROL_MODE =
"CONTROL_MODE"
35 HMIP_CONTROL_MODE =
"SET_POINT_MODE"
41 add_entities: AddEntitiesCallback,
42 discovery_info: DiscoveryInfoType |
None =
None,
44 """Set up the Homematic thermostat platform."""
45 if discovery_info
is None:
49 for conf
in discovery_info[ATTR_DISCOVER_DEVICES]:
51 devices.append(new_device)
57 """Representation of a Homematic thermostat."""
59 _attr_supported_features = (
60 ClimateEntityFeature.TARGET_TEMPERATURE
61 | ClimateEntityFeature.PRESET_MODE
62 | ClimateEntityFeature.TURN_OFF
63 | ClimateEntityFeature.TURN_ON
65 _attr_temperature_unit = UnitOfTemperature.CELSIUS
66 _enable_turn_on_off_backwards_compatibility =
False
70 """Return hvac operation ie. heat, cool mode.
72 Need to be one of HVAC_MODE_*.
76 if "MANU_MODE" in self.
_hmdevice_hmdevice.ACTIONNODE:
82 if self._data.
get(
"BOOST_MODE"):
88 """Return the list of available hvac operation modes.
90 Need to be a subset of HVAC_MODES.
92 if "AUTO_MODE" in self.
_hmdevice_hmdevice.ACTIONNODE:
93 return [HVACMode.AUTO, HVACMode.HEAT, HVACMode.OFF]
94 return [HVACMode.HEAT, HVACMode.OFF]
98 """Return the current preset mode, e.g., home, away, temp."""
99 if self._data.
get(
"BOOST_MODE",
False):
109 if mode
not in (HVACMode.AUTO, HVACMode.HEAT):
115 """Return a list of available preset modes."""
118 for mode
in self.
_hmdevice_hmdevice.ACTIONNODE
119 if mode
in HM_PRESET_MAP
124 """Return the current humidity."""
125 for node
in HM_HUMI_MAP:
126 if node
in self._data:
127 return self._data[node]
132 """Return the current temperature."""
133 for node
in HM_TEMP_MAP:
134 if node
in self._data:
135 return self._data[node]
140 """Return the target temperature."""
144 """Set new target temperature."""
145 if (temperature := kwargs.get(ATTR_TEMPERATURE))
is None:
151 """Set new target hvac mode."""
152 if hvac_mode == HVACMode.AUTO:
154 elif hvac_mode == HVACMode.HEAT:
156 elif hvac_mode == HVACMode.OFF:
160 """Set new preset mode."""
161 if preset_mode == PRESET_BOOST:
163 elif preset_mode == PRESET_COMFORT:
165 elif preset_mode == PRESET_ECO:
170 """Return the minimum temperature."""
175 """Return the maximum temperature."""
180 """Return the supported step of target temperature."""
185 """Return Control mode."""
186 if HMIP_CONTROL_MODE
in self._data:
187 return self._data[HMIP_CONTROL_MODE]
190 return self._data.
get(
"CONTROL_MODE")
193 """Generate a data dict (self._data) from the Homematic metadata."""
198 HM_CONTROL_MODE
in self.
_hmdevice_hmdevice.ATTRIBUTENODE
199 or HMIP_CONTROL_MODE
in self.
_hmdevice_hmdevice.ATTRIBUTENODE
201 self._data[HM_CONTROL_MODE] =
None
203 for node
in self.
_hmdevice_hmdevice.SENSORNODE:
204 self._data[node] =
None
float|None target_temperature(self)
def target_temperature_step(self)
None set_temperature(self, **Any kwargs)
def target_temperature(self)
None set_hvac_mode(self, HVACMode hvac_mode)
None set_preset_mode(self, str preset_mode)
def _init_data_struct(self)
def _hm_control_mode(self)
def current_humidity(self)
list[HVACMode] hvac_modes(self)
def current_temperature(self)
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
web.Response get(self, web.Request request, str config_key)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)