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 ( from homeassistant.components.binary_sensor import (
DEVICE_CLASSES_SCHEMA as BINARY_SENSOR_DEVICE_CLASSES_SCHEMA, DEVICE_CLASSES_SCHEMA as BINARY_SENSOR_DEVICE_CLASSES_SCHEMA,
) )
from homeassistant.components.climate import HVACMode
from homeassistant.components.cover import ( from homeassistant.components.cover import (
DEVICE_CLASSES_SCHEMA as COVER_DEVICE_CLASSES_SCHEMA, DEVICE_CLASSES_SCHEMA as COVER_DEVICE_CLASSES_SCHEMA,
) )
@ -66,6 +65,13 @@ from .const import ( # noqa: F401
CONF_DATA_TYPE, CONF_DATA_TYPE,
CONF_FANS, CONF_FANS,
CONF_HUB, 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_REGISTER,
CONF_HVAC_MODE_VALUES, CONF_HVAC_MODE_VALUES,
CONF_HVAC_ONOFF_REGISTER, CONF_HVAC_ONOFF_REGISTER,
@ -227,13 +233,13 @@ CLIMATE_SCHEMA = vol.All(
{ {
CONF_ADDRESS: cv.positive_int, CONF_ADDRESS: cv.positive_int,
CONF_HVAC_MODE_VALUES: { CONF_HVAC_MODE_VALUES: {
vol.Optional(HVACMode.OFF.value): cv.positive_int, vol.Optional(CONF_HVAC_MODE_OFF): cv.positive_int,
vol.Optional(HVACMode.HEAT.value): cv.positive_int, vol.Optional(CONF_HVAC_MODE_HEAT): cv.positive_int,
vol.Optional(HVACMode.COOL.value): cv.positive_int, vol.Optional(CONF_HVAC_MODE_COOL): cv.positive_int,
vol.Optional(HVACMode.HEAT_COOL.value): cv.positive_int, vol.Optional(CONF_HVAC_MODE_HEAT_COOL): cv.positive_int,
vol.Optional(HVACMode.AUTO.value): cv.positive_int, vol.Optional(CONF_HVAC_MODE_AUTO): cv.positive_int,
vol.Optional(HVACMode.DRY.value): cv.positive_int, vol.Optional(CONF_HVAC_MODE_DRY): cv.positive_int,
vol.Optional(HVACMode.FAN_ONLY.value): 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_REGISTER,
CALL_TYPE_WRITE_REGISTERS, CALL_TYPE_WRITE_REGISTERS,
CONF_CLIMATES, 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_REGISTER,
CONF_HVAC_MODE_VALUES, CONF_HVAC_MODE_VALUES,
CONF_HVAC_ONOFF_REGISTER, CONF_HVAC_ONOFF_REGISTER,
@ -99,10 +106,19 @@ class ModbusThermostat(BaseStructPlatform, RestoreEntity, ClimateEntity):
self._attr_hvac_mode = None self._attr_hvac_mode = None
self._hvac_mode_mapping: list[tuple[int, HVACMode]] = [] self._hvac_mode_mapping: list[tuple[int, HVACMode]] = []
mode_value_config = mode_config[CONF_HVAC_MODE_VALUES] 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( 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) 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_REGISTER = "hvac_mode_register"
CONF_HVAC_MODE_VALUES = "values" CONF_HVAC_MODE_VALUES = "values"
CONF_HVAC_ONOFF_REGISTER = "hvac_onoff_register" 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 = "verify"
CONF_VERIFY_REGISTER = "verify_register" CONF_VERIFY_REGISTER = "verify_register"
CONF_VERIFY_STATE = "verify_state" CONF_VERIFY_STATE = "verify_state"

View File

@ -10,6 +10,13 @@ from homeassistant.components.climate.const import (
from homeassistant.components.modbus.const import ( from homeassistant.components.modbus.const import (
CONF_CLIMATES, CONF_CLIMATES,
CONF_DATA_TYPE, 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_REGISTER,
CONF_HVAC_MODE_VALUES, CONF_HVAC_MODE_VALUES,
CONF_HVAC_ONOFF_REGISTER, CONF_HVAC_ONOFF_REGISTER,
@ -82,13 +89,13 @@ ENTITY_ID = f"{CLIMATE_DOMAIN}.{TEST_ENTITY_NAME}".replace(" ", "_")
CONF_HVAC_MODE_REGISTER: { CONF_HVAC_MODE_REGISTER: {
CONF_ADDRESS: 11, CONF_ADDRESS: 11,
CONF_HVAC_MODE_VALUES: { CONF_HVAC_MODE_VALUES: {
HVACMode.OFF.value: 0, "state_off": 0,
HVACMode.HEAT.value: 1, "state_heat": 1,
HVACMode.COOL.value: 2, "state_cool": 2,
HVACMode.HEAT_COOL.value: 3, "state_heat_cool": 3,
HVACMode.DRY.value: 4, "state_dry": 4,
HVACMode.FAN_ONLY.value: 5, "state_fan_only": 5,
HVACMode.AUTO.value: 6, "state_auto": 6,
}, },
}, },
} }
@ -114,10 +121,12 @@ async def test_config_climate(hass, mock_modbus):
CONF_HVAC_MODE_REGISTER: { CONF_HVAC_MODE_REGISTER: {
CONF_ADDRESS: 11, CONF_ADDRESS: 11,
CONF_HVAC_MODE_VALUES: { CONF_HVAC_MODE_VALUES: {
HVACMode.OFF.value: 0, CONF_HVAC_MODE_OFF: 0,
HVACMode.HEAT.value: 1, CONF_HVAC_MODE_HEAT: 1,
HVACMode.COOL.value: 2, CONF_HVAC_MODE_COOL: 2,
HVACMode.HEAT_COOL.value: 3, 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.HEAT in state.attributes[ATTR_HVAC_MODES]
assert HVACMode.COOL 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.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( @pytest.mark.parametrize(
@ -203,9 +214,9 @@ async def test_temperature_climate(hass, expected, mock_do_cycle):
CONF_HVAC_MODE_REGISTER: { CONF_HVAC_MODE_REGISTER: {
CONF_ADDRESS: 118, CONF_ADDRESS: 118,
CONF_HVAC_MODE_VALUES: { CONF_HVAC_MODE_VALUES: {
HVACMode.COOL.value: 0, CONF_HVAC_MODE_COOL: 0,
HVACMode.HEAT.value: 1, CONF_HVAC_MODE_HEAT: 1,
HVACMode.DRY.value: 2, CONF_HVAC_MODE_DRY: 2,
}, },
}, },
}, },
@ -227,9 +238,9 @@ async def test_temperature_climate(hass, expected, mock_do_cycle):
CONF_HVAC_MODE_REGISTER: { CONF_HVAC_MODE_REGISTER: {
CONF_ADDRESS: 118, CONF_ADDRESS: 118,
CONF_HVAC_MODE_VALUES: { CONF_HVAC_MODE_VALUES: {
HVACMode.COOL.value: 0, CONF_HVAC_MODE_COOL: 0,
HVACMode.HEAT.value: 1, CONF_HVAC_MODE_HEAT: 1,
HVACMode.DRY.value: 2, CONF_HVAC_MODE_DRY: 2,
}, },
}, },
}, },
@ -251,9 +262,9 @@ async def test_temperature_climate(hass, expected, mock_do_cycle):
CONF_HVAC_MODE_REGISTER: { CONF_HVAC_MODE_REGISTER: {
CONF_ADDRESS: 118, CONF_ADDRESS: 118,
CONF_HVAC_MODE_VALUES: { CONF_HVAC_MODE_VALUES: {
HVACMode.COOL.value: 0, CONF_HVAC_MODE_COOL: 0,
HVACMode.HEAT.value: 2, CONF_HVAC_MODE_HEAT: 2,
HVACMode.DRY.value: 3, CONF_HVAC_MODE_DRY: 3,
}, },
}, },
CONF_HVAC_ONOFF_REGISTER: 119, CONF_HVAC_ONOFF_REGISTER: 119,
@ -374,8 +385,8 @@ async def test_service_climate_set_temperature(
CONF_HVAC_MODE_REGISTER: { CONF_HVAC_MODE_REGISTER: {
CONF_ADDRESS: 118, CONF_ADDRESS: 118,
CONF_HVAC_MODE_VALUES: { CONF_HVAC_MODE_VALUES: {
HVACMode.COOL.value: 1, CONF_HVAC_MODE_COOL: 1,
HVACMode.HEAT.value: 2, CONF_HVAC_MODE_HEAT: 2,
}, },
}, },
} }
@ -395,8 +406,8 @@ async def test_service_climate_set_temperature(
CONF_HVAC_MODE_REGISTER: { CONF_HVAC_MODE_REGISTER: {
CONF_ADDRESS: 118, CONF_ADDRESS: 118,
CONF_HVAC_MODE_VALUES: { CONF_HVAC_MODE_VALUES: {
HVACMode.COOL.value: 1, CONF_HVAC_MODE_COOL: 1,
HVACMode.HEAT.value: 2, CONF_HVAC_MODE_HEAT: 2,
}, },
}, },
CONF_HVAC_ONOFF_REGISTER: 119, CONF_HVAC_ONOFF_REGISTER: 119,