1 """Code to handle a Livisi Virtual Climate Control."""
3 from __future__
import annotations
7 from aiolivisi.const
import CAPABILITY_CONFIG
29 from .coordinator
import LivisiDataUpdateCoordinator
30 from .entity
import LivisiEntity
35 config_entry: ConfigEntry,
36 async_add_entities: AddEntitiesCallback,
38 """Set up climate device."""
39 coordinator: LivisiDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
42 def handle_coordinator_update() -> None:
43 """Add climate device."""
44 shc_devices: list[dict[str, Any]] = coordinator.data
45 entities: list[ClimateEntity] = []
46 for device
in shc_devices:
48 device[
"type"] == VRCC_DEVICE_TYPE
49 and device[
"id"]
not in coordinator.devices
52 config_entry, coordinator, device
54 LOGGER.debug(
"Include device type: %s", device.get(
"type"))
55 coordinator.devices.add(device[
"id"])
56 entities.append(livisi_climate)
59 config_entry.async_on_unload(
60 coordinator.async_add_listener(handle_coordinator_update)
65 """Represents the Livisi Climate."""
67 _attr_hvac_modes = [HVACMode.HEAT]
68 _attr_hvac_mode = HVACMode.HEAT
69 _attr_temperature_unit = UnitOfTemperature.CELSIUS
70 _attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
71 _enable_turn_on_off_backwards_compatibility =
False
75 config_entry: ConfigEntry,
76 coordinator: LivisiDataUpdateCoordinator,
77 device: dict[str, Any],
79 """Initialize the Livisi Climate."""
81 config_entry, coordinator, device, use_room_as_device_name=
True
88 config = device.get(CAPABILITY_CONFIG, {}).
get(
"RoomSetpoint", {})
89 self.
_attr_max_temp_attr_max_temp = config.get(
"maxTemperature", MAX_TEMPERATURE)
90 self.
_attr_min_temp_attr_min_temp = config.get(
"minTemperature", MIN_TEMPERATURE)
93 """Set new target temperature."""
94 response = await self.
aio_livisiaio_livisi.async_vrcc_set_temperature(
96 kwargs.get(ATTR_TEMPERATURE),
97 self.coordinator.is_avatar,
104 """Register callbacks."""
110 "setpointTemperature" if self.coordinator.is_avatar
else "pointTemperature",
118 if temperature
is None:
128 f
"{LIVISI_STATE_CHANGE}_{self._target_temperature_capability}",
135 f
"{LIVISI_STATE_CHANGE}_{self._temperature_capability}",
142 f
"{LIVISI_STATE_CHANGE}_{self._humidity_capability}",
148 """Do nothing as LIVISI devices do not support changing the hvac mode."""
152 """Update the target temperature of the climate device."""
158 """Update the current temperature of the climate device."""
164 """Update the humidity of the climate device."""
_attr_current_temperature
None async_added_to_hass(self)
None update_target_temperature(self, float target_temperature)
None async_set_temperature(self, **Any kwargs)
None update_humidity(self, int humidity)
_target_temperature_capability
None update_temperature(self, float current_temperature)
None set_hvac_mode(self, HVACMode hvac_mode)
None __init__(self, ConfigEntry config_entry, LivisiDataUpdateCoordinator coordinator, dict[str, Any] device)
Any|None async_get_device_state(self, str capability, str key)
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
web.Response get(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)