Fix modbus hvac mode keys (#81747)

Change the HVAC mode register conf constants
This commit is contained in:
Avishay 2022-11-09 12:09:21 +02:00 committed by GitHub
parent 21d96e00a2
commit 92b5721f80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 75 additions and 35 deletions

View File

@ -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,
},
}
),

View File

@ -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)

View File

@ -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"

View File

@ -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,