mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Fix Home Connect actions keys (#137027)
* Fix actions * Use coerce Co-authored-by: Martin Hjelmare <marhje52@gmail.com> --------- Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
012f7112d7
commit
285a0a6c81
@ -6,7 +6,7 @@ import logging
|
|||||||
from typing import Any, cast
|
from typing import Any, cast
|
||||||
|
|
||||||
from aiohomeconnect.client import Client as HomeConnectClient
|
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
|
from aiohomeconnect.model.error import HomeConnectError
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
@ -50,7 +50,10 @@ CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
|
|||||||
SERVICE_SETTING_SCHEMA = vol.Schema(
|
SERVICE_SETTING_SCHEMA = vol.Schema(
|
||||||
{
|
{
|
||||||
vol.Required(ATTR_DEVICE_ID): str,
|
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),
|
vol.Required(ATTR_VALUE): vol.Any(str, int, bool),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -58,7 +61,10 @@ SERVICE_SETTING_SCHEMA = vol.Schema(
|
|||||||
SERVICE_OPTION_SCHEMA = vol.Schema(
|
SERVICE_OPTION_SCHEMA = vol.Schema(
|
||||||
{
|
{
|
||||||
vol.Required(ATTR_DEVICE_ID): str,
|
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.Required(ATTR_VALUE): vol.Any(str, int, bool),
|
||||||
vol.Optional(ATTR_UNIT): str,
|
vol.Optional(ATTR_UNIT): str,
|
||||||
}
|
}
|
||||||
@ -67,14 +73,23 @@ SERVICE_OPTION_SCHEMA = vol.Schema(
|
|||||||
SERVICE_PROGRAM_SCHEMA = vol.Any(
|
SERVICE_PROGRAM_SCHEMA = vol.Any(
|
||||||
{
|
{
|
||||||
vol.Required(ATTR_DEVICE_ID): str,
|
vol.Required(ATTR_DEVICE_ID): str,
|
||||||
vol.Required(ATTR_PROGRAM): str,
|
vol.Required(ATTR_PROGRAM): vol.All(
|
||||||
vol.Required(ATTR_KEY): str,
|
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.Required(ATTR_VALUE): vol.Any(int, str),
|
||||||
vol.Optional(ATTR_UNIT): str,
|
vol.Optional(ATTR_UNIT): str,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
vol.Required(ATTR_DEVICE_ID): 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 = (
|
options = (
|
||||||
[
|
[
|
||||||
Option(
|
Option(
|
||||||
OptionKey(option_key),
|
option_key,
|
||||||
call.data[ATTR_VALUE],
|
call.data[ATTR_VALUE],
|
||||||
unit=call.data.get(ATTR_UNIT),
|
unit=call.data.get(ATTR_UNIT),
|
||||||
)
|
)
|
||||||
@ -178,14 +193,14 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
if active:
|
if active:
|
||||||
await client.set_active_program_option(
|
await client.set_active_program_option(
|
||||||
ha_id,
|
ha_id,
|
||||||
option_key=OptionKey(option_key),
|
option_key=option_key,
|
||||||
value=value,
|
value=value,
|
||||||
unit=unit,
|
unit=unit,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
await client.set_selected_program_option(
|
await client.set_selected_program_option(
|
||||||
ha_id,
|
ha_id,
|
||||||
option_key=OptionKey(option_key),
|
option_key=option_key,
|
||||||
value=value,
|
value=value,
|
||||||
unit=unit,
|
unit=unit,
|
||||||
)
|
)
|
||||||
|
@ -5,7 +5,7 @@ from typing import Any
|
|||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
from aiohomeconnect.const import OAUTH2_TOKEN
|
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
|
from aiohomeconnect.model.error import HomeConnectError
|
||||||
import pytest
|
import pytest
|
||||||
import requests_mock
|
import requests_mock
|
||||||
@ -41,9 +41,9 @@ SERVICE_KV_CALL_PARAMS = [
|
|||||||
"service": "set_option_active",
|
"service": "set_option_active",
|
||||||
"service_data": {
|
"service_data": {
|
||||||
"device_id": "DEVICE_ID",
|
"device_id": "DEVICE_ID",
|
||||||
"key": "",
|
"key": OptionKey.BSH_COMMON_FINISH_IN_RELATIVE.value,
|
||||||
"value": "",
|
"value": 43200,
|
||||||
"unit": "",
|
"unit": "seconds",
|
||||||
},
|
},
|
||||||
"blocking": True,
|
"blocking": True,
|
||||||
},
|
},
|
||||||
@ -52,8 +52,8 @@ SERVICE_KV_CALL_PARAMS = [
|
|||||||
"service": "set_option_selected",
|
"service": "set_option_selected",
|
||||||
"service_data": {
|
"service_data": {
|
||||||
"device_id": "DEVICE_ID",
|
"device_id": "DEVICE_ID",
|
||||||
"key": "",
|
"key": OptionKey.LAUNDRY_CARE_WASHER_TEMPERATURE.value,
|
||||||
"value": "",
|
"value": "LaundryCare.Washer.EnumType.Temperature.GC40",
|
||||||
},
|
},
|
||||||
"blocking": True,
|
"blocking": True,
|
||||||
},
|
},
|
||||||
@ -62,8 +62,8 @@ SERVICE_KV_CALL_PARAMS = [
|
|||||||
"service": "change_setting",
|
"service": "change_setting",
|
||||||
"service_data": {
|
"service_data": {
|
||||||
"device_id": "DEVICE_ID",
|
"device_id": "DEVICE_ID",
|
||||||
"key": "",
|
"key": SettingKey.BSH_COMMON_CHILD_LOCK.value,
|
||||||
"value": "",
|
"value": True,
|
||||||
},
|
},
|
||||||
"blocking": True,
|
"blocking": True,
|
||||||
},
|
},
|
||||||
@ -95,9 +95,9 @@ SERVICE_PROGRAM_CALL_PARAMS = [
|
|||||||
"service": "select_program",
|
"service": "select_program",
|
||||||
"service_data": {
|
"service_data": {
|
||||||
"device_id": "DEVICE_ID",
|
"device_id": "DEVICE_ID",
|
||||||
"program": "",
|
"program": ProgramKey.LAUNDRY_CARE_WASHER_COTTON.value,
|
||||||
"key": "",
|
"key": OptionKey.LAUNDRY_CARE_WASHER_TEMPERATURE.value,
|
||||||
"value": "",
|
"value": "LaundryCare.Washer.EnumType.Temperature.GC40",
|
||||||
},
|
},
|
||||||
"blocking": True,
|
"blocking": True,
|
||||||
},
|
},
|
||||||
@ -106,10 +106,10 @@ SERVICE_PROGRAM_CALL_PARAMS = [
|
|||||||
"service": "start_program",
|
"service": "start_program",
|
||||||
"service_data": {
|
"service_data": {
|
||||||
"device_id": "DEVICE_ID",
|
"device_id": "DEVICE_ID",
|
||||||
"program": "",
|
"program": ProgramKey.LAUNDRY_CARE_WASHER_COTTON.value,
|
||||||
"key": "",
|
"key": OptionKey.BSH_COMMON_FINISH_IN_RELATIVE.value,
|
||||||
"value": "",
|
"value": 43200,
|
||||||
"unit": "C",
|
"unit": "seconds",
|
||||||
},
|
},
|
||||||
"blocking": True,
|
"blocking": True,
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user