From 92b5721f8067ad9141737d39b0d9e6eeccaae45e Mon Sep 17 00:00:00 2001 From: Avishay Date: Wed, 9 Nov 2022 12:09:21 +0200 Subject: [PATCH] Fix modbus hvac mode keys (#81747) Change the HVAC mode register conf constants --- homeassistant/components/modbus/__init__.py | 22 +++++--- homeassistant/components/modbus/climate.py | 22 ++++++-- homeassistant/components/modbus/const.py | 7 +++ tests/components/modbus/test_climate.py | 59 ++++++++++++--------- 4 files changed, 75 insertions(+), 35 deletions(-) diff --git a/homeassistant/components/modbus/__init__.py b/homeassistant/components/modbus/__init__.py index cda0bb64703..d905a5f9423 100644 --- a/homeassistant/components/modbus/__init__.py +++ b/homeassistant/components/modbus/__init__.py @@ -9,7 +9,6 @@ import voluptuous as vol from homeassistant.components.binary_sensor import ( DEVICE_CLASSES_SCHEMA as BINARY_SENSOR_DEVICE_CLASSES_SCHEMA, ) -from homeassistant.components.climate import HVACMode from homeassistant.components.cover import ( DEVICE_CLASSES_SCHEMA as COVER_DEVICE_CLASSES_SCHEMA, ) @@ -66,6 +65,13 @@ from .const import ( # noqa: F401 CONF_DATA_TYPE, CONF_FANS, CONF_HUB, + CONF_HVAC_MODE_AUTO, + CONF_HVAC_MODE_COOL, + CONF_HVAC_MODE_DRY, + CONF_HVAC_MODE_FAN_ONLY, + CONF_HVAC_MODE_HEAT, + CONF_HVAC_MODE_HEAT_COOL, + CONF_HVAC_MODE_OFF, CONF_HVAC_MODE_REGISTER, CONF_HVAC_MODE_VALUES, CONF_HVAC_ONOFF_REGISTER, @@ -227,13 +233,13 @@ CLIMATE_SCHEMA = vol.All( { CONF_ADDRESS: cv.positive_int, CONF_HVAC_MODE_VALUES: { - vol.Optional(HVACMode.OFF.value): cv.positive_int, - vol.Optional(HVACMode.HEAT.value): cv.positive_int, - vol.Optional(HVACMode.COOL.value): cv.positive_int, - vol.Optional(HVACMode.HEAT_COOL.value): cv.positive_int, - vol.Optional(HVACMode.AUTO.value): cv.positive_int, - vol.Optional(HVACMode.DRY.value): cv.positive_int, - vol.Optional(HVACMode.FAN_ONLY.value): cv.positive_int, + vol.Optional(CONF_HVAC_MODE_OFF): cv.positive_int, + vol.Optional(CONF_HVAC_MODE_HEAT): cv.positive_int, + vol.Optional(CONF_HVAC_MODE_COOL): cv.positive_int, + vol.Optional(CONF_HVAC_MODE_HEAT_COOL): cv.positive_int, + vol.Optional(CONF_HVAC_MODE_AUTO): cv.positive_int, + vol.Optional(CONF_HVAC_MODE_DRY): cv.positive_int, + vol.Optional(CONF_HVAC_MODE_FAN_ONLY): cv.positive_int, }, } ), diff --git a/homeassistant/components/modbus/climate.py b/homeassistant/components/modbus/climate.py index 92efcfb17d5..4e6fdf6cae7 100644 --- a/homeassistant/components/modbus/climate.py +++ b/homeassistant/components/modbus/climate.py @@ -32,6 +32,13 @@ from .const import ( CALL_TYPE_WRITE_REGISTER, CALL_TYPE_WRITE_REGISTERS, CONF_CLIMATES, + CONF_HVAC_MODE_AUTO, + CONF_HVAC_MODE_COOL, + CONF_HVAC_MODE_DRY, + CONF_HVAC_MODE_FAN_ONLY, + CONF_HVAC_MODE_HEAT, + CONF_HVAC_MODE_HEAT_COOL, + CONF_HVAC_MODE_OFF, CONF_HVAC_MODE_REGISTER, CONF_HVAC_MODE_VALUES, CONF_HVAC_ONOFF_REGISTER, @@ -99,10 +106,19 @@ class ModbusThermostat(BaseStructPlatform, RestoreEntity, ClimateEntity): self._attr_hvac_mode = None self._hvac_mode_mapping: list[tuple[int, HVACMode]] = [] mode_value_config = mode_config[CONF_HVAC_MODE_VALUES] - for hvac_mode in HVACMode: - if hvac_mode.value in mode_value_config: + + for hvac_mode_kw, hvac_mode in ( + (CONF_HVAC_MODE_OFF, HVACMode.OFF), + (CONF_HVAC_MODE_HEAT, HVACMode.HEAT), + (CONF_HVAC_MODE_COOL, HVACMode.COOL), + (CONF_HVAC_MODE_HEAT_COOL, HVACMode.HEAT_COOL), + (CONF_HVAC_MODE_AUTO, HVACMode.AUTO), + (CONF_HVAC_MODE_DRY, HVACMode.DRY), + (CONF_HVAC_MODE_FAN_ONLY, HVACMode.FAN_ONLY), + ): + if hvac_mode_kw in mode_value_config: self._hvac_mode_mapping.append( - (mode_value_config[hvac_mode.value], hvac_mode) + (mode_value_config[hvac_mode_kw], hvac_mode) ) self._attr_hvac_modes.append(hvac_mode) diff --git a/homeassistant/components/modbus/const.py b/homeassistant/components/modbus/const.py index 2ad36f908ce..6ed52ae0544 100644 --- a/homeassistant/components/modbus/const.py +++ b/homeassistant/components/modbus/const.py @@ -56,6 +56,13 @@ CONF_TARGET_TEMP = "target_temp_register" CONF_HVAC_MODE_REGISTER = "hvac_mode_register" CONF_HVAC_MODE_VALUES = "values" CONF_HVAC_ONOFF_REGISTER = "hvac_onoff_register" +CONF_HVAC_MODE_OFF = "state_off" +CONF_HVAC_MODE_HEAT = "state_heat" +CONF_HVAC_MODE_COOL = "state_cool" +CONF_HVAC_MODE_HEAT_COOL = "state_heat_cool" +CONF_HVAC_MODE_AUTO = "state_auto" +CONF_HVAC_MODE_DRY = "state_dry" +CONF_HVAC_MODE_FAN_ONLY = "state_fan_only" CONF_VERIFY = "verify" CONF_VERIFY_REGISTER = "verify_register" CONF_VERIFY_STATE = "verify_state" diff --git a/tests/components/modbus/test_climate.py b/tests/components/modbus/test_climate.py index e554160d5bb..f9e43ae077b 100644 --- a/tests/components/modbus/test_climate.py +++ b/tests/components/modbus/test_climate.py @@ -10,6 +10,13 @@ from homeassistant.components.climate.const import ( from homeassistant.components.modbus.const import ( CONF_CLIMATES, CONF_DATA_TYPE, + CONF_HVAC_MODE_AUTO, + CONF_HVAC_MODE_COOL, + CONF_HVAC_MODE_DRY, + CONF_HVAC_MODE_FAN_ONLY, + CONF_HVAC_MODE_HEAT, + CONF_HVAC_MODE_HEAT_COOL, + CONF_HVAC_MODE_OFF, CONF_HVAC_MODE_REGISTER, CONF_HVAC_MODE_VALUES, CONF_HVAC_ONOFF_REGISTER, @@ -82,13 +89,13 @@ ENTITY_ID = f"{CLIMATE_DOMAIN}.{TEST_ENTITY_NAME}".replace(" ", "_") CONF_HVAC_MODE_REGISTER: { CONF_ADDRESS: 11, CONF_HVAC_MODE_VALUES: { - HVACMode.OFF.value: 0, - HVACMode.HEAT.value: 1, - HVACMode.COOL.value: 2, - HVACMode.HEAT_COOL.value: 3, - HVACMode.DRY.value: 4, - HVACMode.FAN_ONLY.value: 5, - HVACMode.AUTO.value: 6, + "state_off": 0, + "state_heat": 1, + "state_cool": 2, + "state_heat_cool": 3, + "state_dry": 4, + "state_fan_only": 5, + "state_auto": 6, }, }, } @@ -114,10 +121,12 @@ async def test_config_climate(hass, mock_modbus): CONF_HVAC_MODE_REGISTER: { CONF_ADDRESS: 11, CONF_HVAC_MODE_VALUES: { - HVACMode.OFF.value: 0, - HVACMode.HEAT.value: 1, - HVACMode.COOL.value: 2, - HVACMode.HEAT_COOL.value: 3, + CONF_HVAC_MODE_OFF: 0, + CONF_HVAC_MODE_HEAT: 1, + CONF_HVAC_MODE_COOL: 2, + CONF_HVAC_MODE_HEAT_COOL: 3, + CONF_HVAC_MODE_AUTO: 4, + CONF_HVAC_MODE_FAN_ONLY: 5, }, }, } @@ -132,6 +141,8 @@ async def test_config_hvac_mode_register(hass, mock_modbus): assert HVACMode.HEAT in state.attributes[ATTR_HVAC_MODES] assert HVACMode.COOL in state.attributes[ATTR_HVAC_MODES] assert HVACMode.HEAT_COOL in state.attributes[ATTR_HVAC_MODES] + assert HVACMode.AUTO in state.attributes[ATTR_HVAC_MODES] + assert HVACMode.FAN_ONLY in state.attributes[ATTR_HVAC_MODES] @pytest.mark.parametrize( @@ -203,9 +214,9 @@ async def test_temperature_climate(hass, expected, mock_do_cycle): CONF_HVAC_MODE_REGISTER: { CONF_ADDRESS: 118, CONF_HVAC_MODE_VALUES: { - HVACMode.COOL.value: 0, - HVACMode.HEAT.value: 1, - HVACMode.DRY.value: 2, + CONF_HVAC_MODE_COOL: 0, + CONF_HVAC_MODE_HEAT: 1, + CONF_HVAC_MODE_DRY: 2, }, }, }, @@ -227,9 +238,9 @@ async def test_temperature_climate(hass, expected, mock_do_cycle): CONF_HVAC_MODE_REGISTER: { CONF_ADDRESS: 118, CONF_HVAC_MODE_VALUES: { - HVACMode.COOL.value: 0, - HVACMode.HEAT.value: 1, - HVACMode.DRY.value: 2, + CONF_HVAC_MODE_COOL: 0, + CONF_HVAC_MODE_HEAT: 1, + CONF_HVAC_MODE_DRY: 2, }, }, }, @@ -251,9 +262,9 @@ async def test_temperature_climate(hass, expected, mock_do_cycle): CONF_HVAC_MODE_REGISTER: { CONF_ADDRESS: 118, CONF_HVAC_MODE_VALUES: { - HVACMode.COOL.value: 0, - HVACMode.HEAT.value: 2, - HVACMode.DRY.value: 3, + CONF_HVAC_MODE_COOL: 0, + CONF_HVAC_MODE_HEAT: 2, + CONF_HVAC_MODE_DRY: 3, }, }, CONF_HVAC_ONOFF_REGISTER: 119, @@ -374,8 +385,8 @@ async def test_service_climate_set_temperature( CONF_HVAC_MODE_REGISTER: { CONF_ADDRESS: 118, CONF_HVAC_MODE_VALUES: { - HVACMode.COOL.value: 1, - HVACMode.HEAT.value: 2, + CONF_HVAC_MODE_COOL: 1, + CONF_HVAC_MODE_HEAT: 2, }, }, } @@ -395,8 +406,8 @@ async def test_service_climate_set_temperature( CONF_HVAC_MODE_REGISTER: { CONF_ADDRESS: 118, CONF_HVAC_MODE_VALUES: { - HVACMode.COOL.value: 1, - HVACMode.HEAT.value: 2, + CONF_HVAC_MODE_COOL: 1, + CONF_HVAC_MODE_HEAT: 2, }, }, CONF_HVAC_ONOFF_REGISTER: 119,