mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 20:27:08 +00:00
Use pyephember2 library in ephember (#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>
This commit is contained in:
parent
50796a6a77
commit
c96bb45940
2
CODEOWNERS
generated
2
CODEOWNERS
generated
@ -432,7 +432,7 @@ build.json @home-assistant/supervisor
|
|||||||
/homeassistant/components/entur_public_transport/ @hfurubotten
|
/homeassistant/components/entur_public_transport/ @hfurubotten
|
||||||
/homeassistant/components/environment_canada/ @gwww @michaeldavie
|
/homeassistant/components/environment_canada/ @gwww @michaeldavie
|
||||||
/tests/components/environment_canada/ @gwww @michaeldavie
|
/tests/components/environment_canada/ @gwww @michaeldavie
|
||||||
/homeassistant/components/ephember/ @ttroy50
|
/homeassistant/components/ephember/ @ttroy50 @roberty99
|
||||||
/homeassistant/components/epic_games_store/ @hacf-fr @Quentame
|
/homeassistant/components/epic_games_store/ @hacf-fr @Quentame
|
||||||
/tests/components/epic_games_store/ @hacf-fr @Quentame
|
/tests/components/epic_games_store/ @hacf-fr @Quentame
|
||||||
/homeassistant/components/epion/ @lhgravendeel
|
/homeassistant/components/epion/ @lhgravendeel
|
||||||
|
@ -6,13 +6,13 @@ from datetime import timedelta
|
|||||||
import logging
|
import logging
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from pyephember.pyephember import (
|
from pyephember2.pyephember2 import (
|
||||||
EphEmber,
|
EphEmber,
|
||||||
ZoneMode,
|
ZoneMode,
|
||||||
zone_current_temperature,
|
zone_current_temperature,
|
||||||
zone_is_active,
|
zone_is_active,
|
||||||
zone_is_boost_active,
|
zone_is_boost_active,
|
||||||
zone_is_hot_water,
|
zone_is_hotwater,
|
||||||
zone_mode,
|
zone_mode,
|
||||||
zone_name,
|
zone_name,
|
||||||
zone_target_temperature,
|
zone_target_temperature,
|
||||||
@ -69,14 +69,18 @@ def setup_platform(
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
ember = EphEmber(username, password)
|
ember = EphEmber(username, password)
|
||||||
zones = ember.get_zones()
|
|
||||||
for zone in zones:
|
|
||||||
add_entities([EphEmberThermostat(ember, zone)])
|
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
_LOGGER.error("Cannot connect to EphEmber")
|
_LOGGER.error("Cannot login to EphEmber")
|
||||||
|
|
||||||
|
try:
|
||||||
|
homes = ember.get_zones()
|
||||||
|
except RuntimeError:
|
||||||
|
_LOGGER.error("Fail to get zones")
|
||||||
return
|
return
|
||||||
|
|
||||||
return
|
add_entities(
|
||||||
|
EphEmberThermostat(ember, zone) for home in homes for zone in home["zones"]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class EphEmberThermostat(ClimateEntity):
|
class EphEmberThermostat(ClimateEntity):
|
||||||
@ -85,33 +89,35 @@ class EphEmberThermostat(ClimateEntity):
|
|||||||
_attr_hvac_modes = OPERATION_LIST
|
_attr_hvac_modes = OPERATION_LIST
|
||||||
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
||||||
|
|
||||||
def __init__(self, ember, zone):
|
def __init__(self, ember, zone) -> None:
|
||||||
"""Initialize the thermostat."""
|
"""Initialize the thermostat."""
|
||||||
self._ember = ember
|
self._ember = ember
|
||||||
self._zone_name = zone_name(zone)
|
self._zone_name = zone_name(zone)
|
||||||
self._zone = zone
|
self._zone = zone
|
||||||
self._hot_water = zone_is_hot_water(zone)
|
|
||||||
|
# hot water = true, is immersive device without target temperature control.
|
||||||
|
self._hot_water = zone_is_hotwater(zone)
|
||||||
|
|
||||||
self._attr_name = self._zone_name
|
self._attr_name = self._zone_name
|
||||||
|
|
||||||
self._attr_supported_features = (
|
|
||||||
ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.AUX_HEAT
|
|
||||||
)
|
|
||||||
self._attr_target_temperature_step = 0.5
|
|
||||||
if self._hot_water:
|
if self._hot_water:
|
||||||
self._attr_supported_features = ClimateEntityFeature.AUX_HEAT
|
self._attr_supported_features = ClimateEntityFeature.AUX_HEAT
|
||||||
self._attr_target_temperature_step = None
|
self._attr_target_temperature_step = None
|
||||||
self._attr_supported_features |= (
|
else:
|
||||||
ClimateEntityFeature.TURN_OFF | ClimateEntityFeature.TURN_ON
|
self._attr_target_temperature_step = 0.5
|
||||||
)
|
self._attr_supported_features = (
|
||||||
|
ClimateEntityFeature.TURN_OFF
|
||||||
|
| ClimateEntityFeature.TURN_ON
|
||||||
|
| ClimateEntityFeature.TARGET_TEMPERATURE
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def current_temperature(self):
|
def current_temperature(self) -> float | None:
|
||||||
"""Return the current temperature."""
|
"""Return the current temperature."""
|
||||||
return zone_current_temperature(self._zone)
|
return zone_current_temperature(self._zone)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def target_temperature(self):
|
def target_temperature(self) -> float | None:
|
||||||
"""Return the temperature we try to reach."""
|
"""Return the temperature we try to reach."""
|
||||||
return zone_target_temperature(self._zone)
|
return zone_target_temperature(self._zone)
|
||||||
|
|
||||||
@ -133,12 +139,12 @@ class EphEmberThermostat(ClimateEntity):
|
|||||||
"""Set the operation mode."""
|
"""Set the operation mode."""
|
||||||
mode = self.map_mode_hass_eph(hvac_mode)
|
mode = self.map_mode_hass_eph(hvac_mode)
|
||||||
if mode is not None:
|
if mode is not None:
|
||||||
self._ember.set_mode_by_name(self._zone_name, mode)
|
self._ember.set_zone_mode(self._zone["zoneid"], mode)
|
||||||
else:
|
else:
|
||||||
_LOGGER.error("Invalid operation mode provided %s", hvac_mode)
|
_LOGGER.error("Invalid operation mode provided %s", hvac_mode)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_aux_heat(self):
|
def is_aux_heat(self) -> bool:
|
||||||
"""Return true if aux heater."""
|
"""Return true if aux heater."""
|
||||||
|
|
||||||
return zone_is_boost_active(self._zone)
|
return zone_is_boost_active(self._zone)
|
||||||
@ -167,7 +173,7 @@ class EphEmberThermostat(ClimateEntity):
|
|||||||
if temperature > self.max_temp or temperature < self.min_temp:
|
if temperature > self.max_temp or temperature < self.min_temp:
|
||||||
return
|
return
|
||||||
|
|
||||||
self._ember.set_target_temperture_by_name(self._zone_name, temperature)
|
self._ember.set_zone_target_temperature(self._zone["zoneid"], temperature)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def min_temp(self):
|
def min_temp(self):
|
||||||
@ -188,7 +194,8 @@ class EphEmberThermostat(ClimateEntity):
|
|||||||
|
|
||||||
def update(self) -> None:
|
def update(self) -> None:
|
||||||
"""Get the latest data."""
|
"""Get the latest data."""
|
||||||
self._zone = self._ember.get_zone(self._zone_name)
|
self._ember.get_zones()
|
||||||
|
self._zone = self._ember.get_zone(self._zone["zoneid"])
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def map_mode_hass_eph(operation_mode):
|
def map_mode_hass_eph(operation_mode):
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"domain": "ephember",
|
"domain": "ephember",
|
||||||
"name": "EPH Controls",
|
"name": "EPH Controls",
|
||||||
"codeowners": ["@ttroy50"],
|
"codeowners": ["@ttroy50", "@roberty99"],
|
||||||
"documentation": "https://www.home-assistant.io/integrations/ephember",
|
"documentation": "https://www.home-assistant.io/integrations/ephember",
|
||||||
"iot_class": "local_polling",
|
"iot_class": "local_polling",
|
||||||
"loggers": ["pyephember"],
|
"loggers": ["pyephember2"],
|
||||||
"quality_scale": "legacy",
|
"quality_scale": "legacy",
|
||||||
"requirements": ["pyephember==0.3.1"]
|
"requirements": ["pyephember2==0.4.12"]
|
||||||
}
|
}
|
||||||
|
2
requirements_all.txt
generated
2
requirements_all.txt
generated
@ -1957,7 +1957,7 @@ pyenphase==1.25.5
|
|||||||
pyenvisalink==4.7
|
pyenvisalink==4.7
|
||||||
|
|
||||||
# homeassistant.components.ephember
|
# homeassistant.components.ephember
|
||||||
pyephember==0.3.1
|
pyephember2==0.4.12
|
||||||
|
|
||||||
# homeassistant.components.everlights
|
# homeassistant.components.everlights
|
||||||
pyeverlights==0.1.0
|
pyeverlights==0.1.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user