diff --git a/homeassistant/components/home_connect/__init__.py b/homeassistant/components/home_connect/__init__.py index a019ae0f250..becc78cef90 100644 --- a/homeassistant/components/home_connect/__init__.py +++ b/homeassistant/components/home_connect/__init__.py @@ -6,7 +6,7 @@ import logging from typing import Any, cast from aiohomeconnect.client import Client as HomeConnectClient -from aiohomeconnect.model import CommandKey, Option, OptionKey +from aiohomeconnect.model import CommandKey, Option, OptionKey, ProgramKey, SettingKey from aiohomeconnect.model.error import HomeConnectError import voluptuous as vol @@ -50,7 +50,10 @@ CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN) SERVICE_SETTING_SCHEMA = vol.Schema( { vol.Required(ATTR_DEVICE_ID): str, - vol.Required(ATTR_KEY): str, + vol.Required(ATTR_KEY): vol.All( + vol.Coerce(SettingKey), + vol.NotIn([SettingKey.UNKNOWN]), + ), vol.Required(ATTR_VALUE): vol.Any(str, int, bool), } ) @@ -58,7 +61,10 @@ SERVICE_SETTING_SCHEMA = vol.Schema( SERVICE_OPTION_SCHEMA = vol.Schema( { vol.Required(ATTR_DEVICE_ID): str, - vol.Required(ATTR_KEY): str, + vol.Required(ATTR_KEY): vol.All( + vol.Coerce(OptionKey), + vol.NotIn([OptionKey.UNKNOWN]), + ), vol.Required(ATTR_VALUE): vol.Any(str, int, bool), vol.Optional(ATTR_UNIT): str, } @@ -67,14 +73,23 @@ SERVICE_OPTION_SCHEMA = vol.Schema( SERVICE_PROGRAM_SCHEMA = vol.Any( { vol.Required(ATTR_DEVICE_ID): str, - vol.Required(ATTR_PROGRAM): str, - vol.Required(ATTR_KEY): str, + vol.Required(ATTR_PROGRAM): vol.All( + vol.Coerce(ProgramKey), + vol.NotIn([ProgramKey.UNKNOWN]), + ), + vol.Required(ATTR_KEY): vol.All( + vol.Coerce(OptionKey), + vol.NotIn([OptionKey.UNKNOWN]), + ), vol.Required(ATTR_VALUE): vol.Any(int, str), vol.Optional(ATTR_UNIT): str, }, { vol.Required(ATTR_DEVICE_ID): str, - vol.Required(ATTR_PROGRAM): str, + vol.Required(ATTR_PROGRAM): vol.All( + vol.Coerce(ProgramKey), + vol.NotIn([ProgramKey.UNKNOWN]), + ), }, ) @@ -141,7 +156,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: options = ( [ Option( - OptionKey(option_key), + option_key, call.data[ATTR_VALUE], unit=call.data.get(ATTR_UNIT), ) @@ -178,14 +193,14 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: if active: await client.set_active_program_option( ha_id, - option_key=OptionKey(option_key), + option_key=option_key, value=value, unit=unit, ) else: await client.set_selected_program_option( ha_id, - option_key=OptionKey(option_key), + option_key=option_key, value=value, unit=unit, ) diff --git a/tests/components/home_connect/test_init.py b/tests/components/home_connect/test_init.py index f62feca700a..b3d1c4e531f 100644 --- a/tests/components/home_connect/test_init.py +++ b/tests/components/home_connect/test_init.py @@ -5,7 +5,7 @@ from typing import Any from unittest.mock import MagicMock, patch from aiohomeconnect.const import OAUTH2_TOKEN -from aiohomeconnect.model import SettingKey, StatusKey +from aiohomeconnect.model import OptionKey, ProgramKey, SettingKey, StatusKey from aiohomeconnect.model.error import HomeConnectError import pytest import requests_mock @@ -41,9 +41,9 @@ SERVICE_KV_CALL_PARAMS = [ "service": "set_option_active", "service_data": { "device_id": "DEVICE_ID", - "key": "", - "value": "", - "unit": "", + "key": OptionKey.BSH_COMMON_FINISH_IN_RELATIVE.value, + "value": 43200, + "unit": "seconds", }, "blocking": True, }, @@ -52,8 +52,8 @@ SERVICE_KV_CALL_PARAMS = [ "service": "set_option_selected", "service_data": { "device_id": "DEVICE_ID", - "key": "", - "value": "", + "key": OptionKey.LAUNDRY_CARE_WASHER_TEMPERATURE.value, + "value": "LaundryCare.Washer.EnumType.Temperature.GC40", }, "blocking": True, }, @@ -62,8 +62,8 @@ SERVICE_KV_CALL_PARAMS = [ "service": "change_setting", "service_data": { "device_id": "DEVICE_ID", - "key": "", - "value": "", + "key": SettingKey.BSH_COMMON_CHILD_LOCK.value, + "value": True, }, "blocking": True, }, @@ -95,9 +95,9 @@ SERVICE_PROGRAM_CALL_PARAMS = [ "service": "select_program", "service_data": { "device_id": "DEVICE_ID", - "program": "", - "key": "", - "value": "", + "program": ProgramKey.LAUNDRY_CARE_WASHER_COTTON.value, + "key": OptionKey.LAUNDRY_CARE_WASHER_TEMPERATURE.value, + "value": "LaundryCare.Washer.EnumType.Temperature.GC40", }, "blocking": True, }, @@ -106,10 +106,10 @@ SERVICE_PROGRAM_CALL_PARAMS = [ "service": "start_program", "service_data": { "device_id": "DEVICE_ID", - "program": "", - "key": "", - "value": "", - "unit": "C", + "program": ProgramKey.LAUNDRY_CARE_WASHER_COTTON.value, + "key": OptionKey.BSH_COMMON_FINISH_IN_RELATIVE.value, + "value": 43200, + "unit": "seconds", }, "blocking": True, },