mirror of https://github.com/home-assistant/core
146 lines
4.2 KiB
Python
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
|