77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
"""
|
|
Place this code in custom_components/heat_pump_monitor/climate.py
|
|
"""
|
|
import logging
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
from homeassistant.components.climate import (
|
|
ClimateEntity,
|
|
ClimateEntityFeature,
|
|
HVACMode,
|
|
HVACAction,
|
|
)
|
|
from homeassistant.const import (
|
|
ATTR_TEMPERATURE,
|
|
UnitOfTemperature,
|
|
)
|
|
|
|
from . import DOMAIN
|
|
from .__init__ import HeatPumpEntity
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
HVAC_MODES = [HVACMode.HEAT]
|
|
|
|
async def async_setup_entry(hass, entry, async_add_entities):
|
|
"""Set up the heat pump climate."""
|
|
coordinator = hass.data[DOMAIN][entry.entry_id]
|
|
async_add_entities([HeatPumpClimate(coordinator)])
|
|
|
|
class HeatPumpClimate(HeatPumpEntity, ClimateEntity):
|
|
"""Heat pump climate entity."""
|
|
|
|
def __init__(self, coordinator):
|
|
"""Initialize the heat pump climate entity."""
|
|
super().__init__(coordinator)
|
|
self._attr_name = "Heat Pump Water Temperature"
|
|
self._attr_unique_id = f"{DOMAIN}_climate"
|
|
self._attr_temperature_unit = UnitOfTemperature.CELSIUS
|
|
self._attr_hvac_modes = HVAC_MODES
|
|
self._attr_hvac_mode = HVACMode.HEAT
|
|
self._attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
|
|
self._attr_min_temp = 35
|
|
self._attr_max_temp = 60
|
|
self._attr_target_temperature_step = 0.5
|
|
|
|
@property
|
|
def current_temperature(self) -> Optional[float]:
|
|
"""Return the current temperature."""
|
|
return self.coordinator.data.get("current_temperature")
|
|
|
|
@property
|
|
def target_temperature(self) -> Optional[float]:
|
|
"""Return the target temperature."""
|
|
return self.coordinator.data.get("watersetpoint")
|
|
|
|
@property
|
|
def hvac_action(self) -> Optional[str]:
|
|
"""Return the current HVAC action."""
|
|
if self.coordinator.data.get("is_heating"):
|
|
return HVACAction.HEATING
|
|
if self.coordinator.data.get("is_operating"):
|
|
return HVACAction.IDLE
|
|
return HVACAction.OFF
|
|
|
|
async def async_set_temperature(self, **kwargs) -> None:
|
|
"""Set new target temperature."""
|
|
if ATTR_TEMPERATURE not in kwargs:
|
|
return
|
|
|
|
temperature = kwargs[ATTR_TEMPERATURE]
|
|
await self.coordinator.set_water_setpoint(temperature)
|
|
self.async_write_ha_state()
|
|
|
|
async def async_set_hvac_mode(self, hvac_mode: str) -> None:
|
|
"""Set HVAC mode."""
|
|
# This integration only supports HEAT mode, so we don't need to implement any changes
|
|
pass |