Allow homekit_controller to set Ecobee's mode (#65032)
This commit is contained in:
parent
70321ed795
commit
a65694457a
5 changed files with 184 additions and 0 deletions
90
tests/components/homekit_controller/test_select.py
Normal file
90
tests/components/homekit_controller/test_select.py
Normal file
|
@ -0,0 +1,90 @@
|
|||
"""Basic checks for HomeKit select entities."""
|
||||
from aiohomekit.model import Accessory
|
||||
from aiohomekit.model.characteristics import CharacteristicsTypes
|
||||
from aiohomekit.model.services import ServicesTypes
|
||||
|
||||
from tests.components.homekit_controller.common import Helper, setup_test_component
|
||||
|
||||
|
||||
def create_service_with_ecobee_mode(accessory: Accessory):
|
||||
"""Define a thermostat with ecobee mode characteristics."""
|
||||
service = accessory.add_service(ServicesTypes.THERMOSTAT, add_required=True)
|
||||
|
||||
current_mode = service.add_char(CharacteristicsTypes.Vendor.ECOBEE_CURRENT_MODE)
|
||||
current_mode.value = 0
|
||||
|
||||
service.add_char(CharacteristicsTypes.Vendor.ECOBEE_SET_HOLD_SCHEDULE)
|
||||
|
||||
return service
|
||||
|
||||
|
||||
async def test_read_current_mode(hass, utcnow):
|
||||
"""Test that Ecobee mode can be correctly read and show as human readable text."""
|
||||
helper = await setup_test_component(hass, create_service_with_ecobee_mode)
|
||||
service = helper.accessory.services.first(service_type=ServicesTypes.THERMOSTAT)
|
||||
|
||||
# Helper will be for the primary entity, which is the service. Make a helper for the sensor.
|
||||
energy_helper = Helper(
|
||||
hass,
|
||||
"select.testdevice_current_mode",
|
||||
helper.pairing,
|
||||
helper.accessory,
|
||||
helper.config_entry,
|
||||
)
|
||||
|
||||
mode = service[CharacteristicsTypes.Vendor.ECOBEE_CURRENT_MODE]
|
||||
|
||||
state = await energy_helper.poll_and_get_state()
|
||||
assert state.state == "home"
|
||||
|
||||
mode.value = 1
|
||||
state = await energy_helper.poll_and_get_state()
|
||||
assert state.state == "sleep"
|
||||
|
||||
mode.value = 2
|
||||
state = await energy_helper.poll_and_get_state()
|
||||
assert state.state == "away"
|
||||
|
||||
|
||||
async def test_write_current_mode(hass, utcnow):
|
||||
"""Test can set a specific mode."""
|
||||
helper = await setup_test_component(hass, create_service_with_ecobee_mode)
|
||||
service = helper.accessory.services.first(service_type=ServicesTypes.THERMOSTAT)
|
||||
|
||||
# Helper will be for the primary entity, which is the service. Make a helper for the sensor.
|
||||
energy_helper = Helper(
|
||||
hass,
|
||||
"select.testdevice_current_mode",
|
||||
helper.pairing,
|
||||
helper.accessory,
|
||||
helper.config_entry,
|
||||
)
|
||||
|
||||
service = energy_helper.accessory.services.first(
|
||||
service_type=ServicesTypes.THERMOSTAT
|
||||
)
|
||||
mode = service[CharacteristicsTypes.Vendor.ECOBEE_SET_HOLD_SCHEDULE]
|
||||
|
||||
await hass.services.async_call(
|
||||
"select",
|
||||
"select_option",
|
||||
{"entity_id": "select.testdevice_current_mode", "option": "home"},
|
||||
blocking=True,
|
||||
)
|
||||
assert mode.value == 0
|
||||
|
||||
await hass.services.async_call(
|
||||
"select",
|
||||
"select_option",
|
||||
{"entity_id": "select.testdevice_current_mode", "option": "sleep"},
|
||||
blocking=True,
|
||||
)
|
||||
assert mode.value == 1
|
||||
|
||||
await hass.services.async_call(
|
||||
"select",
|
||||
"select_option",
|
||||
{"entity_id": "select.testdevice_current_mode", "option": "away"},
|
||||
blocking=True,
|
||||
)
|
||||
assert mode.value == 2
|
Loading…
Add table
Add a link
Reference in a new issue