core/tests/components/knx/test_button.py

92 lines
2.7 KiB
Python

"""Test KNX button."""
from datetime import timedelta
from homeassistant.components.knx.const import (
CONF_PAYLOAD,
CONF_PAYLOAD_LENGTH,
KNX_ADDRESS,
)
from homeassistant.components.knx.schema import ButtonSchema
from homeassistant.const import CONF_NAME, CONF_TYPE
from homeassistant.core import HomeAssistant
from homeassistant.util import dt
from .conftest import KNXTestKit
from tests.common import async_capture_events, async_fire_time_changed
async def test_button_simple(hass: HomeAssistant, knx: KNXTestKit):
"""Test KNX button with default payload."""
events = async_capture_events(hass, "state_changed")
await knx.setup_integration(
{
ButtonSchema.PLATFORM: {
CONF_NAME: "test",
KNX_ADDRESS: "1/2/3",
}
}
)
assert len(hass.states.async_all()) == 1
assert len(events) == 1
events.pop()
# press button
await hass.services.async_call(
"button", "press", {"entity_id": "button.test"}, blocking=True
)
await knx.assert_write("1/2/3", True)
assert len(events) == 1
events.pop()
# received telegrams on button GA are ignored by the entity
old_state = hass.states.get("button.test")
async_fire_time_changed(hass, dt.utcnow() + timedelta(seconds=3))
await knx.receive_write("1/2/3", False)
await knx.receive_write("1/2/3", True)
new_state = hass.states.get("button.test")
assert old_state == new_state
assert len(events) == 0
# button does not respond to read
await knx.receive_read("1/2/3")
await knx.assert_telegram_count(0)
async def test_button_raw(hass: HomeAssistant, knx: KNXTestKit):
"""Test KNX button with raw payload."""
await knx.setup_integration(
{
ButtonSchema.PLATFORM: {
CONF_NAME: "test",
KNX_ADDRESS: "1/2/3",
CONF_PAYLOAD: False,
CONF_PAYLOAD_LENGTH: 0,
}
}
)
# press button
await hass.services.async_call(
"button", "press", {"entity_id": "button.test"}, blocking=True
)
await knx.assert_write("1/2/3", False)
async def test_button_type(hass: HomeAssistant, knx: KNXTestKit):
"""Test KNX button with encoded payload."""
await knx.setup_integration(
{
ButtonSchema.PLATFORM: {
CONF_NAME: "test",
KNX_ADDRESS: "1/2/3",
ButtonSchema.CONF_VALUE: 21.5,
CONF_TYPE: "2byte_float",
}
}
)
# press button
await hass.services.async_call(
"button", "press", {"entity_id": "button.test"}, blocking=True
)
await knx.assert_write("1/2/3", (0x0C, 0x33))