mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 09:47:13 +00:00
Use climate enums in deconz (#70630)
* Use climate enums in deconz * Adjust tests * Adjust type hint * Update climate.py * Update climate.py * Update climate.py * Don't edit files in Github!
This commit is contained in:
parent
b2b99417c9
commit
9dcbc8469e
@ -25,7 +25,7 @@ from pydeconz.models.sensor.thermostat import (
|
||||
Thermostat,
|
||||
)
|
||||
|
||||
from homeassistant.components.climate import DOMAIN, ClimateEntity, ClimateEntityFeature
|
||||
from homeassistant.components.climate import DOMAIN, ClimateEntity
|
||||
from homeassistant.components.climate.const import (
|
||||
FAN_AUTO,
|
||||
FAN_HIGH,
|
||||
@ -33,13 +33,11 @@ from homeassistant.components.climate.const import (
|
||||
FAN_MEDIUM,
|
||||
FAN_OFF,
|
||||
FAN_ON,
|
||||
HVAC_MODE_AUTO,
|
||||
HVAC_MODE_COOL,
|
||||
HVAC_MODE_HEAT,
|
||||
HVAC_MODE_OFF,
|
||||
PRESET_BOOST,
|
||||
PRESET_COMFORT,
|
||||
PRESET_ECO,
|
||||
ClimateEntityFeature,
|
||||
HVACMode,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS
|
||||
@ -64,11 +62,11 @@ FAN_MODE_TO_DECONZ = {
|
||||
}
|
||||
DECONZ_TO_FAN_MODE = {value: key for key, value in FAN_MODE_TO_DECONZ.items()}
|
||||
|
||||
HVAC_MODE_TO_DECONZ: dict[str, str] = {
|
||||
HVAC_MODE_AUTO: THERMOSTAT_MODE_AUTO,
|
||||
HVAC_MODE_COOL: THERMOSTAT_MODE_COOL,
|
||||
HVAC_MODE_HEAT: THERMOSTAT_MODE_HEAT,
|
||||
HVAC_MODE_OFF: THERMOSTAT_MODE_OFF,
|
||||
HVAC_MODE_TO_DECONZ: dict[HVACMode, str] = {
|
||||
HVACMode.AUTO: THERMOSTAT_MODE_AUTO,
|
||||
HVACMode.COOL: THERMOSTAT_MODE_COOL,
|
||||
HVACMode.HEAT: THERMOSTAT_MODE_HEAT,
|
||||
HVACMode.OFF: THERMOSTAT_MODE_OFF,
|
||||
}
|
||||
|
||||
DECONZ_PRESET_AUTO = "auto"
|
||||
@ -146,14 +144,14 @@ class DeconzThermostat(DeconzDevice, ClimateEntity):
|
||||
super().__init__(device, gateway)
|
||||
|
||||
self._attr_hvac_modes = [
|
||||
HVAC_MODE_HEAT,
|
||||
HVAC_MODE_OFF,
|
||||
HVACMode.HEAT,
|
||||
HVACMode.OFF,
|
||||
]
|
||||
if device.mode:
|
||||
self._attr_hvac_modes.append(HVAC_MODE_AUTO)
|
||||
self._attr_hvac_modes.append(HVACMode.AUTO)
|
||||
|
||||
if "coolsetpoint" in device.raw["config"]:
|
||||
self._attr_hvac_modes.append(HVAC_MODE_COOL)
|
||||
self._attr_hvac_modes.append(HVACMode.COOL)
|
||||
|
||||
self._deconz_to_hvac_mode = {
|
||||
HVAC_MODE_TO_DECONZ[item]: item for item in self._attr_hvac_modes
|
||||
@ -188,22 +186,22 @@ class DeconzThermostat(DeconzDevice, ClimateEntity):
|
||||
# HVAC control
|
||||
|
||||
@property
|
||||
def hvac_mode(self) -> str:
|
||||
def hvac_mode(self) -> HVACMode:
|
||||
"""Return hvac operation ie. heat, cool mode.
|
||||
|
||||
Need to be one of HVAC_MODE_*.
|
||||
"""
|
||||
if self._device.mode in self._deconz_to_hvac_mode:
|
||||
return self._deconz_to_hvac_mode[self._device.mode]
|
||||
return HVAC_MODE_HEAT if self._device.state_on else HVAC_MODE_OFF
|
||||
return HVACMode.HEAT if self._device.state_on else HVACMode.OFF
|
||||
|
||||
async def async_set_hvac_mode(self, hvac_mode: str) -> None:
|
||||
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
|
||||
"""Set new target hvac mode."""
|
||||
if hvac_mode not in self._attr_hvac_modes:
|
||||
raise ValueError(f"Unsupported HVAC mode {hvac_mode}")
|
||||
|
||||
if len(self._attr_hvac_modes) == 2: # Only allow turn on and off thermostat
|
||||
await self._device.set_config(on=hvac_mode != HVAC_MODE_OFF)
|
||||
await self._device.set_config(on=hvac_mode != HVACMode.OFF)
|
||||
else:
|
||||
await self._device.set_config(mode=HVAC_MODE_TO_DECONZ[hvac_mode])
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
"""deCONZ climate platform tests."""
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@ -23,13 +22,10 @@ from homeassistant.components.climate.const import (
|
||||
FAN_MEDIUM,
|
||||
FAN_OFF,
|
||||
FAN_ON,
|
||||
HVAC_MODE_AUTO,
|
||||
HVAC_MODE_COOL,
|
||||
HVAC_MODE_HEAT,
|
||||
HVAC_MODE_OFF,
|
||||
PRESET_BOOST,
|
||||
PRESET_COMFORT,
|
||||
PRESET_ECO,
|
||||
HVACMode,
|
||||
)
|
||||
from homeassistant.components.deconz.climate import (
|
||||
DECONZ_FAN_SMART,
|
||||
@ -103,10 +99,10 @@ async def test_simple_climate_device(hass, aioclient_mock, mock_deconz_websocket
|
||||
|
||||
assert len(hass.states.async_all()) == 2
|
||||
climate_thermostat = hass.states.get("climate.thermostat")
|
||||
assert climate_thermostat.state == HVAC_MODE_HEAT
|
||||
assert climate_thermostat.state == HVACMode.HEAT
|
||||
assert climate_thermostat.attributes["hvac_modes"] == [
|
||||
HVAC_MODE_HEAT,
|
||||
HVAC_MODE_OFF,
|
||||
HVACMode.HEAT,
|
||||
HVACMode.OFF,
|
||||
]
|
||||
assert climate_thermostat.attributes["current_temperature"] == 21.0
|
||||
assert climate_thermostat.attributes["temperature"] == 21.0
|
||||
@ -139,7 +135,7 @@ async def test_simple_climate_device(hass, aioclient_mock, mock_deconz_websocket
|
||||
await mock_deconz_websocket(data=event_changed_sensor)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert hass.states.get("climate.thermostat").state == HVAC_MODE_HEAT
|
||||
assert hass.states.get("climate.thermostat").state == HVACMode.HEAT
|
||||
|
||||
# Verify service calls
|
||||
|
||||
@ -150,7 +146,7 @@ async def test_simple_climate_device(hass, aioclient_mock, mock_deconz_websocket
|
||||
await hass.services.async_call(
|
||||
CLIMATE_DOMAIN,
|
||||
SERVICE_SET_HVAC_MODE,
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_HEAT},
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.HEAT},
|
||||
blocking=True,
|
||||
)
|
||||
assert aioclient_mock.mock_calls[1][2] == {"on": True}
|
||||
@ -160,7 +156,7 @@ async def test_simple_climate_device(hass, aioclient_mock, mock_deconz_websocket
|
||||
await hass.services.async_call(
|
||||
CLIMATE_DOMAIN,
|
||||
SERVICE_SET_HVAC_MODE,
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_OFF},
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.OFF},
|
||||
blocking=True,
|
||||
)
|
||||
assert aioclient_mock.mock_calls[2][2] == {"on": False}
|
||||
@ -171,7 +167,7 @@ async def test_simple_climate_device(hass, aioclient_mock, mock_deconz_websocket
|
||||
await hass.services.async_call(
|
||||
CLIMATE_DOMAIN,
|
||||
SERVICE_SET_HVAC_MODE,
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_AUTO},
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.AUTO},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
@ -202,11 +198,11 @@ async def test_climate_device_without_cooling_support(
|
||||
|
||||
assert len(hass.states.async_all()) == 2
|
||||
climate_thermostat = hass.states.get("climate.thermostat")
|
||||
assert climate_thermostat.state == HVAC_MODE_AUTO
|
||||
assert climate_thermostat.state == HVACMode.AUTO
|
||||
assert climate_thermostat.attributes["hvac_modes"] == [
|
||||
HVAC_MODE_HEAT,
|
||||
HVAC_MODE_OFF,
|
||||
HVAC_MODE_AUTO,
|
||||
HVACMode.HEAT,
|
||||
HVACMode.OFF,
|
||||
HVACMode.AUTO,
|
||||
]
|
||||
assert climate_thermostat.attributes["current_temperature"] == 22.6
|
||||
assert climate_thermostat.attributes["temperature"] == 22.0
|
||||
@ -242,7 +238,7 @@ async def test_climate_device_without_cooling_support(
|
||||
await mock_deconz_websocket(data=event_changed_sensor)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert hass.states.get("climate.thermostat").state == HVAC_MODE_HEAT
|
||||
assert hass.states.get("climate.thermostat").state == HVACMode.HEAT
|
||||
|
||||
# Event signals thermostat state off
|
||||
|
||||
@ -267,7 +263,7 @@ async def test_climate_device_without_cooling_support(
|
||||
await hass.services.async_call(
|
||||
CLIMATE_DOMAIN,
|
||||
SERVICE_SET_HVAC_MODE,
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_AUTO},
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.AUTO},
|
||||
blocking=True,
|
||||
)
|
||||
assert aioclient_mock.mock_calls[1][2] == {"mode": "auto"}
|
||||
@ -277,7 +273,7 @@ async def test_climate_device_without_cooling_support(
|
||||
await hass.services.async_call(
|
||||
CLIMATE_DOMAIN,
|
||||
SERVICE_SET_HVAC_MODE,
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_HEAT},
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.HEAT},
|
||||
blocking=True,
|
||||
)
|
||||
assert aioclient_mock.mock_calls[2][2] == {"mode": "heat"}
|
||||
@ -287,7 +283,7 @@ async def test_climate_device_without_cooling_support(
|
||||
await hass.services.async_call(
|
||||
CLIMATE_DOMAIN,
|
||||
SERVICE_SET_HVAC_MODE,
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_OFF},
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.OFF},
|
||||
blocking=True,
|
||||
)
|
||||
assert aioclient_mock.mock_calls[3][2] == {"mode": "off"}
|
||||
@ -298,7 +294,7 @@ async def test_climate_device_without_cooling_support(
|
||||
await hass.services.async_call(
|
||||
CLIMATE_DOMAIN,
|
||||
SERVICE_SET_HVAC_MODE,
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_COOL},
|
||||
{ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.COOL},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
@ -376,12 +372,12 @@ async def test_climate_device_with_cooling_support(
|
||||
|
||||
assert len(hass.states.async_all()) == 2
|
||||
climate_thermostat = hass.states.get("climate.zen_01")
|
||||
assert climate_thermostat.state == HVAC_MODE_HEAT
|
||||
assert climate_thermostat.state == HVACMode.HEAT
|
||||
assert climate_thermostat.attributes["hvac_modes"] == [
|
||||
HVAC_MODE_HEAT,
|
||||
HVAC_MODE_OFF,
|
||||
HVAC_MODE_AUTO,
|
||||
HVAC_MODE_COOL,
|
||||
HVACMode.HEAT,
|
||||
HVACMode.OFF,
|
||||
HVACMode.AUTO,
|
||||
HVACMode.COOL,
|
||||
]
|
||||
assert climate_thermostat.attributes["current_temperature"] == 23.2
|
||||
assert climate_thermostat.attributes["temperature"] == 22.2
|
||||
@ -400,7 +396,7 @@ async def test_climate_device_with_cooling_support(
|
||||
await hass.async_block_till_done()
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert hass.states.get("climate.zen_01").state == HVAC_MODE_COOL
|
||||
assert hass.states.get("climate.zen_01").state == HVACMode.COOL
|
||||
assert hass.states.get("climate.zen_01").attributes["temperature"] == 11.1
|
||||
|
||||
# Verify service calls
|
||||
@ -456,7 +452,7 @@ async def test_climate_device_with_fan_support(
|
||||
|
||||
assert len(hass.states.async_all()) == 2
|
||||
climate_thermostat = hass.states.get("climate.zen_01")
|
||||
assert climate_thermostat.state == HVAC_MODE_HEAT
|
||||
assert climate_thermostat.state == HVACMode.HEAT
|
||||
assert climate_thermostat.attributes["fan_mode"] == FAN_AUTO
|
||||
assert climate_thermostat.attributes["fan_modes"] == [
|
||||
DECONZ_FAN_SMART,
|
||||
@ -584,7 +580,7 @@ async def test_climate_device_with_preset(hass, aioclient_mock, mock_deconz_webs
|
||||
assert len(hass.states.async_all()) == 2
|
||||
|
||||
climate_zen_01 = hass.states.get("climate.zen_01")
|
||||
assert climate_zen_01.state == HVAC_MODE_HEAT
|
||||
assert climate_zen_01.state == HVACMode.HEAT
|
||||
assert climate_zen_01.attributes["current_temperature"] == 23.2
|
||||
assert climate_zen_01.attributes["temperature"] == 22.2
|
||||
assert climate_zen_01.attributes["preset_mode"] == DECONZ_PRESET_AUTO
|
||||
@ -696,7 +692,7 @@ async def test_clip_climate_device(hass, aioclient_mock):
|
||||
)
|
||||
|
||||
assert len(hass.states.async_all()) == 3
|
||||
assert hass.states.get("climate.clip_thermostat").state == HVAC_MODE_HEAT
|
||||
assert hass.states.get("climate.clip_thermostat").state == HVACMode.HEAT
|
||||
|
||||
# Disallow clip sensors
|
||||
|
||||
@ -716,7 +712,7 @@ async def test_clip_climate_device(hass, aioclient_mock):
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert len(hass.states.async_all()) == 3
|
||||
assert hass.states.get("climate.clip_thermostat").state == HVAC_MODE_HEAT
|
||||
assert hass.states.get("climate.clip_thermostat").state == HVACMode.HEAT
|
||||
|
||||
|
||||
async def test_verify_state_update(hass, aioclient_mock, mock_deconz_websocket):
|
||||
@ -741,7 +737,7 @@ async def test_verify_state_update(hass, aioclient_mock, mock_deconz_websocket):
|
||||
with patch.dict(DECONZ_WEB_REQUEST, data):
|
||||
await setup_deconz_integration(hass, aioclient_mock)
|
||||
|
||||
assert hass.states.get("climate.thermostat").state == HVAC_MODE_AUTO
|
||||
assert hass.states.get("climate.thermostat").state == HVACMode.AUTO
|
||||
|
||||
event_changed_sensor = {
|
||||
"t": "event",
|
||||
@ -753,7 +749,7 @@ async def test_verify_state_update(hass, aioclient_mock, mock_deconz_websocket):
|
||||
await mock_deconz_websocket(data=event_changed_sensor)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert hass.states.get("climate.thermostat").state == HVAC_MODE_AUTO
|
||||
assert hass.states.get("climate.thermostat").state == HVACMode.AUTO
|
||||
|
||||
|
||||
async def test_add_new_climate_device(hass, aioclient_mock, mock_deconz_websocket):
|
||||
@ -786,7 +782,7 @@ async def test_add_new_climate_device(hass, aioclient_mock, mock_deconz_websocke
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert len(hass.states.async_all()) == 2
|
||||
assert hass.states.get("climate.thermostat").state == HVAC_MODE_AUTO
|
||||
assert hass.states.get("climate.thermostat").state == HVACMode.AUTO
|
||||
assert hass.states.get("sensor.thermostat_battery").state == "100"
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user