90 lines
2.9 KiB
Python
90 lines
2.9 KiB
Python
"""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
|