New apps Added
This commit is contained in:
+87
@@ -0,0 +1,87 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user