Skip to content

Commit c96bb45

Browse files
Use pyephember2 library in ephember (home-assistant#140459)
* multiple homes support, all zones visible * Update homes and zones * set zone, target temp, curent temp, hot water type fixes * Hotwater devices added * Mode ajust * next version could be 0.4.4 * depricated climate feature removed ClimateEntityFeature * Migrate to pyephember2 * HEAT_COOL mode * Revert EPH_TO_HA_STATE to HEAT_COOL * homes and ember declaretion removed * cleaning try catch blocks, flatten list on zones * refactored * Version updated * try catch returned * pyephember2==0.4.12 * Update homeassistant/components/ephember/climate.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * reverting unique_id and depricated vClimateEntityFeature.AUX_HEAT * Update homeassistant/components/ephember/climate.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> --------- Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
1 parent 50796a6 commit c96bb45

File tree

4 files changed

+34
-27
lines changed

4 files changed

+34
-27
lines changed

CODEOWNERS

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

homeassistant/components/ephember/climate.py

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
import logging
77
from typing import Any
88

9-
from pyephember.pyephember import (
9+
from pyephember2.pyephember2 import (
1010
EphEmber,
1111
ZoneMode,
1212
zone_current_temperature,
1313
zone_is_active,
1414
zone_is_boost_active,
15-
zone_is_hot_water,
15+
zone_is_hotwater,
1616
zone_mode,
1717
zone_name,
1818
zone_target_temperature,
@@ -69,14 +69,18 @@ def setup_platform(
6969

7070
try:
7171
ember = EphEmber(username, password)
72-
zones = ember.get_zones()
73-
for zone in zones:
74-
add_entities([EphEmberThermostat(ember, zone)])
7572
except RuntimeError:
76-
_LOGGER.error("Cannot connect to EphEmber")
73+
_LOGGER.error("Cannot login to EphEmber")
74+
75+
try:
76+
homes = ember.get_zones()
77+
except RuntimeError:
78+
_LOGGER.error("Fail to get zones")
7779
return
7880

79-
return
81+
add_entities(
82+
EphEmberThermostat(ember, zone) for home in homes for zone in home["zones"]
83+
)
8084

8185

8286
class EphEmberThermostat(ClimateEntity):
@@ -85,33 +89,35 @@ class EphEmberThermostat(ClimateEntity):
8589
_attr_hvac_modes = OPERATION_LIST
8690
_attr_temperature_unit = UnitOfTemperature.CELSIUS
8791

88-
def __init__(self, ember, zone):
92+
def __init__(self, ember, zone) -> None:
8993
"""Initialize the thermostat."""
9094
self._ember = ember
9195
self._zone_name = zone_name(zone)
9296
self._zone = zone
93-
self._hot_water = zone_is_hot_water(zone)
97+
98+
# hot water = true, is immersive device without target temperature control.
99+
self._hot_water = zone_is_hotwater(zone)
94100

95101
self._attr_name = self._zone_name
96102

97-
self._attr_supported_features = (
98-
ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.AUX_HEAT
99-
)
100-
self._attr_target_temperature_step = 0.5
101103
if self._hot_water:
102104
self._attr_supported_features = ClimateEntityFeature.AUX_HEAT
103105
self._attr_target_temperature_step = None
104-
self._attr_supported_features |= (
105-
ClimateEntityFeature.TURN_OFF | ClimateEntityFeature.TURN_ON
106-
)
106+
else:
107+
self._attr_target_temperature_step = 0.5
108+
self._attr_supported_features = (
109+
ClimateEntityFeature.TURN_OFF
110+
| ClimateEntityFeature.TURN_ON
111+
| ClimateEntityFeature.TARGET_TEMPERATURE
112+
)
107113

108114
@property
109-
def current_temperature(self):
115+
def current_temperature(self) -> float | None:
110116
"""Return the current temperature."""
111117
return zone_current_temperature(self._zone)
112118

113119
@property
114-
def target_temperature(self):
120+
def target_temperature(self) -> float | None:
115121
"""Return the temperature we try to reach."""
116122
return zone_target_temperature(self._zone)
117123

@@ -133,12 +139,12 @@ def set_hvac_mode(self, hvac_mode: HVACMode) -> None:
133139
"""Set the operation mode."""
134140
mode = self.map_mode_hass_eph(hvac_mode)
135141
if mode is not None:
136-
self._ember.set_mode_by_name(self._zone_name, mode)
142+
self._ember.set_zone_mode(self._zone["zoneid"], mode)
137143
else:
138144
_LOGGER.error("Invalid operation mode provided %s", hvac_mode)
139145

140146
@property
141-
def is_aux_heat(self):
147+
def is_aux_heat(self) -> bool:
142148
"""Return true if aux heater."""
143149

144150
return zone_is_boost_active(self._zone)
@@ -167,7 +173,7 @@ def set_temperature(self, **kwargs: Any) -> None:
167173
if temperature > self.max_temp or temperature < self.min_temp:
168174
return
169175

170-
self._ember.set_target_temperture_by_name(self._zone_name, temperature)
176+
self._ember.set_zone_target_temperature(self._zone["zoneid"], temperature)
171177

172178
@property
173179
def min_temp(self):
@@ -188,7 +194,8 @@ def max_temp(self):
188194

189195
def update(self) -> None:
190196
"""Get the latest data."""
191-
self._zone = self._ember.get_zone(self._zone_name)
197+
self._ember.get_zones()
198+
self._zone = self._ember.get_zone(self._zone["zoneid"])
192199

193200
@staticmethod
194201
def map_mode_hass_eph(operation_mode):
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"domain": "ephember",
33
"name": "EPH Controls",
4-
"codeowners": ["@ttroy50"],
4+
"codeowners": ["@ttroy50", "@roberty99"],
55
"documentation": "https://www.home-assistant.io/integrations/ephember",
66
"iot_class": "local_polling",
7-
"loggers": ["pyephember"],
7+
"loggers": ["pyephember2"],
88
"quality_scale": "legacy",
9-
"requirements": ["pyephember==0.3.1"]
9+
"requirements": ["pyephember2==0.4.12"]
1010
}

requirements_all.txt

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)