diff --git a/.coveragerc b/.coveragerc index 1eb922b52e5..d884e6e8c13 100644 --- a/.coveragerc +++ b/.coveragerc @@ -94,6 +94,7 @@ omit = homeassistant/components/azure_devops/sensor.py homeassistant/components/azure_service_bus/* homeassistant/components/baf/__init__.py + homeassistant/components/baf/climate.py homeassistant/components/baf/entity.py homeassistant/components/baf/fan.py homeassistant/components/baf/sensor.py diff --git a/homeassistant/components/baf/__init__.py b/homeassistant/components/baf/__init__.py index 6e76014f0b7..30de2582af1 100644 --- a/homeassistant/components/baf/__init__.py +++ b/homeassistant/components/baf/__init__.py @@ -14,7 +14,12 @@ from homeassistant.exceptions import ConfigEntryNotReady from .const import DOMAIN, QUERY_INTERVAL, RUN_TIMEOUT from .models import BAFData -PLATFORMS: list[Platform] = [Platform.FAN, Platform.SENSOR, Platform.SWITCH] +PLATFORMS: list[Platform] = [ + Platform.CLIMATE, + Platform.FAN, + Platform.SENSOR, + Platform.SWITCH, +] async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: diff --git a/homeassistant/components/baf/climate.py b/homeassistant/components/baf/climate.py new file mode 100644 index 00000000000..f785d18e06f --- /dev/null +++ b/homeassistant/components/baf/climate.py @@ -0,0 +1,60 @@ +"""Support for Big Ass Fans auto comfort.""" +from __future__ import annotations + +from typing import Any + +from homeassistant import config_entries +from homeassistant.components.climate import ( + ClimateEntity, + ClimateEntityFeature, + HVACAction, + HVACMode, +) +from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers.entity_platform import AddEntitiesCallback + +from .const import DOMAIN +from .entity import BAFEntity +from .models import BAFData + + +async def async_setup_entry( + hass: HomeAssistant, + entry: config_entries.ConfigEntry, + async_add_entities: AddEntitiesCallback, +) -> None: + """Set up BAF fan auto comfort.""" + data: BAFData = hass.data[DOMAIN][entry.entry_id] + if data.device.has_fan: + async_add_entities( + [BAFAutoComfort(data.device, f"{data.device.name} Auto Comfort")] + ) + + +class BAFAutoComfort(BAFEntity, ClimateEntity): + """BAF climate auto comfort.""" + + _attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE + _attr_temperature_unit = TEMP_CELSIUS + _attr_hvac_modes = [HVACMode.OFF, HVACMode.FAN_ONLY] + + @callback + def _async_update_attrs(self) -> None: + """Update attrs from device.""" + device = self._device + auto_on = device.auto_comfort_enable + self._attr_hvac_mode = HVACMode.FAN_ONLY if auto_on else HVACMode.OFF + self._attr_hvac_action = HVACAction.FAN if device.speed else HVACAction.OFF + self._attr_target_temperature = device.comfort_ideal_temperature + self._attr_current_temperature = device.temperature + + async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None: + """Set the HVAC mode.""" + self._device.auto_comfort_enable = hvac_mode == HVACMode.FAN_ONLY + + async def async_set_temperature(self, **kwargs: Any) -> None: + """Set the target temperature.""" + if not self._device.auto_comfort_enable: + self._device.auto_comfort_enable = True + self._device.comfort_ideal_temperature = kwargs[ATTR_TEMPERATURE]