Files
HomeAssistantVS/custom_components/intelligent_heating_pilot/infrastructure/adapters/climate_commander.py
T
2026-07-08 10:43:39 -04:00

88 lines
2.4 KiB
Python

"""Home Assistant climate commander adapter.
This adapter implements the ability to control climate entities (VTherm)
from the domain layer.
"""
from __future__ import annotations
import logging
from typing import TYPE_CHECKING
from homeassistant.core import HomeAssistant
from .utils import get_entity_name
if TYPE_CHECKING:
pass
_LOGGER = logging.getLogger(__name__)
class HAClimateCommander:
"""Controls climate entities (VTherm) from domain layer.
This adapter translates domain heating control commands into
Home Assistant climate service calls. No business logic.
"""
def __init__(self, hass: HomeAssistant, climate_entity_id: str) -> None:
"""Initialize the climate commander.
Args:
hass: Home Assistant instance
climate_entity_id: The VTherm/climate entity to control
"""
self._hass = hass
self._climate_entity_id = climate_entity_id
self._device_name = get_entity_name(hass, climate_entity_id)
async def set_temperature(self, target_temp: float) -> None:
"""Set target temperature for the climate entity.
Args:
target_temp: Target temperature in Celsius
"""
_LOGGER.info("[%s] Setting temperature to %.1f°C", self._device_name, target_temp)
await self._hass.services.async_call(
"climate",
"set_temperature",
{
"entity_id": self._climate_entity_id,
"temperature": target_temp,
},
blocking=True,
)
async def set_hvac_mode(self, mode: str) -> None:
"""Set HVAC mode (heat, off, etc.).
Args:
mode: HVAC mode (heat, off, auto, etc.)
"""
_LOGGER.info("[%s] Setting HVAC mode to %s", self._device_name, mode)
await self._hass.services.async_call(
"climate",
"set_hvac_mode",
{
"entity_id": self._climate_entity_id,
"hvac_mode": mode,
},
blocking=True,
)
async def turn_off(self) -> None:
"""Turn off heating."""
await self.set_hvac_mode("off")
async def turn_on_heat(self, target_temp: float) -> None:
"""Turn on heating with target temperature.
Args:
target_temp: Target temperature in Celsius
"""
await self.set_hvac_mode("heat")
await self.set_temperature(target_temp)