1 """Support for Rheem EcoNet water heaters."""
3 from datetime
import timedelta
7 from pyeconet.equipment
import EquipmentType
8 from pyeconet.equipment.water_heater
import WaterHeaterOperationMode
18 WaterHeaterEntityFeature,
25 from .const
import DOMAIN, EQUIPMENT
26 from .entity
import EcoNetEntity
30 _LOGGER = logging.getLogger(__name__)
32 ECONET_STATE_TO_HA = {
33 WaterHeaterOperationMode.ENERGY_SAVING: STATE_ECO,
34 WaterHeaterOperationMode.HIGH_DEMAND: STATE_HIGH_DEMAND,
35 WaterHeaterOperationMode.OFF: STATE_OFF,
36 WaterHeaterOperationMode.HEAT_PUMP_ONLY: STATE_HEAT_PUMP,
37 WaterHeaterOperationMode.ELECTRIC_MODE: STATE_ELECTRIC,
38 WaterHeaterOperationMode.GAS: STATE_GAS,
39 WaterHeaterOperationMode.PERFORMANCE: STATE_PERFORMANCE,
41 HA_STATE_TO_ECONET = {value: key
for key, value
in ECONET_STATE_TO_HA.items()}
43 SUPPORT_FLAGS_HEATER = (
44 WaterHeaterEntityFeature.TARGET_TEMPERATURE
45 | WaterHeaterEntityFeature.OPERATION_MODE
50 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
52 """Set up EcoNet water heater based on a config entry."""
53 equipment = hass.data[DOMAIN][EQUIPMENT][entry.entry_id]
57 for water_heater
in equipment[EquipmentType.WATER_HEATER]
59 update_before_add=
True,
64 """Define an Econet water heater."""
66 _attr_should_poll =
True
67 _attr_temperature_unit = UnitOfTemperature.FAHRENHEIT
76 """Return true if away mode is on."""
81 """Return current operation."""
83 _current_op = STATE_OFF
84 if econet_mode
is not None:
85 _current_op = ECONET_STATE_TO_HA[econet_mode]
91 """List of available operation modes."""
94 for mode
in econet_modes:
96 mode
is not WaterHeaterOperationMode.UNKNOWN
97 and mode
is not WaterHeaterOperationMode.VACATION
99 ha_mode = ECONET_STATE_TO_HA[mode]
100 op_list.append(ha_mode)
105 """Return the list of supported features."""
108 return SUPPORT_FLAGS_HEATER | WaterHeaterEntityFeature.AWAY_MODE
109 return SUPPORT_FLAGS_HEATER
112 WaterHeaterEntityFeature.TARGET_TEMPERATURE
113 | WaterHeaterEntityFeature.AWAY_MODE
115 return WaterHeaterEntityFeature.TARGET_TEMPERATURE
118 """Set new target temperature."""
119 if (target_temp := kwargs.get(ATTR_TEMPERATURE))
is not None:
120 self.
water_heaterwater_heater.set_set_point(target_temp)
122 _LOGGER.error(
"A target temperature must be provided")
125 """Set operation mode."""
126 op_mode_to_set = HA_STATE_TO_ECONET.get(operation_mode)
127 if op_mode_to_set
is not None:
130 _LOGGER.error(
"Invalid operation mode: %s", operation_mode)
134 """Return the temperature we try to reach."""
139 """Return the minimum temperature."""
140 return self.
water_heaterwater_heater.set_point_limits[0]
144 """Return the maximum temperature."""
145 return self.
water_heaterwater_heater.set_point_limits[1]
148 """Get the latest energy usage."""
153 """Turn away mode on."""
157 """Turn away mode off."""
None turn_away_mode_off(self)
def current_operation(self)
None turn_away_mode_on(self)
def is_away_mode_on(self)
WaterHeaterEntityFeature supported_features(self)
def target_temperature(self)
def __init__(self, water_heater)
None set_operation_mode(self, str operation_mode)
None set_temperature(self, **Any kwargs)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)