core/tests/components/knx/test_fan.py

146 lines
4.2 KiB
Python

"""Test KNX fan."""
from homeassistant.components.knx.const import KNX_ADDRESS
from homeassistant.components.knx.schema import FanSchema
from homeassistant.const import CONF_NAME, STATE_OFF, STATE_ON
from homeassistant.core import HomeAssistant
from .conftest import KNXTestKit
async def test_fan_percent(hass: HomeAssistant, knx: KNXTestKit) -> None:
"""Test KNX fan with percentage speed."""
await knx.setup_integration(
{
FanSchema.PLATFORM: {
CONF_NAME: "test",
KNX_ADDRESS: "1/2/3",
}
}
)
# turn on fan with default speed (50%)
await hass.services.async_call(
"fan", "turn_on", {"entity_id": "fan.test"}, blocking=True
)
await knx.assert_write("1/2/3", (128,))
# turn off fan
await hass.services.async_call(
"fan", "turn_off", {"entity_id": "fan.test"}, blocking=True
)
await knx.assert_write("1/2/3", (0,))
# receive 100% telegram
await knx.receive_write("1/2/3", (0xFF,))
state = hass.states.get("fan.test")
assert state.state is STATE_ON
# receive 80% telegram
await knx.receive_write("1/2/3", (0xCC,))
state = hass.states.get("fan.test")
assert state.state is STATE_ON
assert state.attributes.get("percentage") == 80
# receive 0% telegram
await knx.receive_write("1/2/3", (0,))
state = hass.states.get("fan.test")
assert state.state is STATE_OFF
# fan does not respond to read
await knx.receive_read("1/2/3")
await knx.assert_telegram_count(0)
async def test_fan_step(hass: HomeAssistant, knx: KNXTestKit) -> None:
"""Test KNX fan with speed steps."""
await knx.setup_integration(
{
FanSchema.PLATFORM: {
CONF_NAME: "test",
KNX_ADDRESS: "1/2/3",
FanSchema.CONF_MAX_STEP: 4,
}
}
)
# turn on fan with default speed (50% - step 2)
await hass.services.async_call(
"fan", "turn_on", {"entity_id": "fan.test"}, blocking=True
)
await knx.assert_write("1/2/3", (2,))
# turn up speed to 75% - step 3
await hass.services.async_call(
"fan", "turn_on", {"entity_id": "fan.test", "percentage": 75}, blocking=True
)
await knx.assert_write("1/2/3", (3,))
# turn off fan
await hass.services.async_call(
"fan", "turn_off", {"entity_id": "fan.test"}, blocking=True
)
await knx.assert_write("1/2/3", (0,))
# receive step 4 (100%) telegram
await knx.receive_write("1/2/3", (4,))
state = hass.states.get("fan.test")
assert state.state is STATE_ON
assert state.attributes.get("percentage") == 100
# receive step 1 (25%) telegram
await knx.receive_write("1/2/3", (1,))
state = hass.states.get("fan.test")
assert state.state is STATE_ON
assert state.attributes.get("percentage") == 25
# receive step 0 (off) telegram
await knx.receive_write("1/2/3", (0,))
state = hass.states.get("fan.test")
assert state.state is STATE_OFF
# fan does not respond to read
await knx.receive_read("1/2/3")
await knx.assert_telegram_count(0)
async def test_fan_oscillation(hass: HomeAssistant, knx: KNXTestKit) -> None:
"""Test KNX fan oscillation."""
await knx.setup_integration(
{
FanSchema.PLATFORM: {
CONF_NAME: "test",
KNX_ADDRESS: "1/1/1",
FanSchema.CONF_OSCILLATION_ADDRESS: "2/2/2",
}
}
)
# turn on oscillation
await hass.services.async_call(
"fan",
"oscillate",
{"entity_id": "fan.test", "oscillating": True},
blocking=True,
)
await knx.assert_write("2/2/2", True)
# turn off oscillation
await hass.services.async_call(
"fan",
"oscillate",
{"entity_id": "fan.test", "oscillating": False},
blocking=True,
)
await knx.assert_write("2/2/2", False)
# receive oscillation on
await knx.receive_write("2/2/2", True)
state = hass.states.get("fan.test")
assert state.attributes.get("oscillating") is True
# receive oscillation off
await knx.receive_write("2/2/2", False)
state = hass.states.get("fan.test")
assert state.attributes.get("oscillating") is False