diff --git a/tests/components/modbus/conftest.py b/tests/components/modbus/conftest.py index ca3e44dbe1d..ce6e6585512 100644 --- a/tests/components/modbus/conftest.py +++ b/tests/components/modbus/conftest.py @@ -64,6 +64,8 @@ async def setup_base_test( entity_id = f"{entity_domain}.{sensor_name}" device = hass.states.get(entity_id) + if device is None: + pytest.fail("CONFIG failed, see output") return entity_id, now, device diff --git a/tests/components/modbus/test_modbus_switch.py b/tests/components/modbus/test_modbus_switch.py index 75255389bea..da2ff953660 100644 --- a/tests/components/modbus/test_modbus_switch.py +++ b/tests/components/modbus/test_modbus_switch.py @@ -3,9 +3,22 @@ from datetime import timedelta import pytest -from homeassistant.components.modbus.const import CALL_TYPE_COIL, CONF_COILS +from homeassistant.components.modbus.const import ( + CALL_TYPE_COIL, + CALL_TYPE_REGISTER_HOLDING, + CONF_COILS, + CONF_REGISTER, + CONF_REGISTERS, +) from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN -from homeassistant.const import CONF_NAME, CONF_SLAVE, STATE_OFF, STATE_ON +from homeassistant.const import ( + CONF_COMMAND_OFF, + CONF_COMMAND_ON, + CONF_NAME, + CONF_SLAVE, + STATE_OFF, + STATE_ON, +) from .conftest import run_base_read_test, setup_base_test @@ -61,3 +74,113 @@ async def test_coil_switch(hass, mock_hub, regs, expected): expected, now + timedelta(seconds=scan_interval + 1), ) + + +@pytest.mark.parametrize( + "regs,expected", + [ + ( + [0x00], + STATE_OFF, + ), + ( + [0x80], + STATE_OFF, + ), + ( + [0xFE], + STATE_OFF, + ), + ( + [0xFF], + STATE_OFF, + ), + ( + [0x01], + STATE_ON, + ), + ], +) +async def test_register_switch(hass, mock_hub, regs, expected): + """Run test for given config.""" + switch_name = "modbus_test_switch" + scan_interval = 5 + entity_id, now, device = await setup_base_test( + switch_name, + hass, + mock_hub, + { + CONF_REGISTERS: [ + { + CONF_NAME: switch_name, + CONF_REGISTER: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + }, + ] + }, + SWITCH_DOMAIN, + scan_interval, + ) + + await run_base_read_test( + entity_id, + hass, + mock_hub, + CALL_TYPE_REGISTER_HOLDING, + regs, + expected, + now + timedelta(seconds=scan_interval + 1), + ) + + +@pytest.mark.parametrize( + "regs,expected", + [ + ( + [0x40], + STATE_ON, + ), + ( + [0x04], + STATE_OFF, + ), + ( + [0xFF], + STATE_OFF, + ), + ], +) +async def test_register_state_switch(hass, mock_hub, regs, expected): + """Run test for given config.""" + switch_name = "modbus_test_switch" + scan_interval = 5 + entity_id, now, device = await setup_base_test( + switch_name, + hass, + mock_hub, + { + CONF_REGISTERS: [ + { + CONF_NAME: switch_name, + CONF_REGISTER: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x04, + CONF_COMMAND_ON: 0x40, + }, + ] + }, + SWITCH_DOMAIN, + scan_interval, + ) + + await run_base_read_test( + entity_id, + hass, + mock_hub, + CALL_TYPE_REGISTER_HOLDING, + regs, + expected, + now + timedelta(seconds=scan_interval + 1), + )