Allow homekit_controller to set Ecobee's mode (#65032)

This commit is contained in:
Jc2k 2022-01-27 17:02:38 +00:00 committed by GitHub
parent 70321ed795
commit a65694457a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 184 additions and 0 deletions

View 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