set common test entity name. (#54697)

This commit is contained in:
jan iversen
2021-08-17 20:43:27 +02:00
committed by GitHub
parent 8bf79d61ee
commit 71b0f6d095
9 changed files with 226 additions and 198 deletions

View File

@@ -7,7 +7,11 @@ from unittest import mock
from pymodbus.exceptions import ModbusException from pymodbus.exceptions import ModbusException
import pytest import pytest
from homeassistant.components.modbus.const import DEFAULT_HUB, MODBUS_DOMAIN as DOMAIN from homeassistant.components.modbus.const import (
CONF_TCP,
DEFAULT_HUB,
MODBUS_DOMAIN as DOMAIN,
)
from homeassistant.const import ( from homeassistant.const import (
CONF_HOST, CONF_HOST,
CONF_NAME, CONF_NAME,
@@ -22,6 +26,11 @@ import homeassistant.util.dt as dt_util
from tests.common import async_fire_time_changed, mock_restore_cache from tests.common import async_fire_time_changed, mock_restore_cache
TEST_MODBUS_NAME = "modbusTest" TEST_MODBUS_NAME = "modbusTest"
TEST_ENTITY_NAME = "test_entity"
TEST_MODBUS_HOST = "modbusHost"
TEST_PORT_TCP = 5501
TEST_PORT_SERIAL = "usb01"
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@@ -62,9 +71,9 @@ async def mock_modbus(hass, caplog, request, do_config):
config = { config = {
DOMAIN: [ DOMAIN: [
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: "modbusTestHost", CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_NAME: TEST_MODBUS_NAME, CONF_NAME: TEST_MODBUS_NAME,
**do_config, **do_config,
} }
@@ -122,9 +131,9 @@ async def base_test(
config_modbus = { config_modbus = {
DOMAIN: { DOMAIN: {
CONF_NAME: DEFAULT_HUB, CONF_NAME: DEFAULT_HUB,
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: "modbusTest", CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5001, CONF_PORT: TEST_PORT_TCP,
}, },
} }

View File

@@ -20,10 +20,9 @@ from homeassistant.const import (
) )
from homeassistant.core import State from homeassistant.core import State
from .conftest import ReadResult, base_test from .conftest import TEST_ENTITY_NAME, ReadResult, base_test
SENSOR_NAME = "test_binary_sensor" ENTITY_ID = f"{SENSOR_DOMAIN}.{TEST_ENTITY_NAME}"
ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
@pytest.mark.parametrize( @pytest.mark.parametrize(
@@ -32,7 +31,7 @@ ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
{ {
CONF_BINARY_SENSORS: [ CONF_BINARY_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
} }
] ]
@@ -40,7 +39,7 @@ ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
{ {
CONF_BINARY_SENSORS: [ CONF_BINARY_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_SLAVE: 10, CONF_SLAVE: 10,
CONF_INPUT_TYPE: CALL_TYPE_DISCRETE, CONF_INPUT_TYPE: CALL_TYPE_DISCRETE,
@@ -89,8 +88,8 @@ async def test_all_binary_sensor(hass, do_type, regs, expected):
"""Run test for given config.""" """Run test for given config."""
state = await base_test( state = await base_test(
hass, hass,
{CONF_NAME: SENSOR_NAME, CONF_ADDRESS: 1234, CONF_INPUT_TYPE: do_type}, {CONF_NAME: TEST_ENTITY_NAME, CONF_ADDRESS: 1234, CONF_INPUT_TYPE: do_type},
SENSOR_NAME, TEST_ENTITY_NAME,
SENSOR_DOMAIN, SENSOR_DOMAIN,
CONF_BINARY_SENSORS, CONF_BINARY_SENSORS,
None, None,
@@ -108,7 +107,7 @@ async def test_all_binary_sensor(hass, do_type, regs, expected):
{ {
CONF_BINARY_SENSORS: [ CONF_BINARY_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_INPUT_TYPE: CALL_TYPE_COIL, CONF_INPUT_TYPE: CALL_TYPE_COIL,
} }
@@ -144,7 +143,7 @@ async def test_service_binary_sensor_update(hass, mock_modbus, mock_ha):
{ {
CONF_BINARY_SENSORS: [ CONF_BINARY_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
} }

View File

@@ -22,10 +22,9 @@ from homeassistant.const import (
) )
from homeassistant.core import State from homeassistant.core import State
from .conftest import ReadResult, base_test from .conftest import TEST_ENTITY_NAME, ReadResult, base_test
CLIMATE_NAME = "test_climate" ENTITY_ID = f"{CLIMATE_DOMAIN}.{TEST_ENTITY_NAME}"
ENTITY_ID = f"{CLIMATE_DOMAIN}.{CLIMATE_NAME}"
@pytest.mark.parametrize( @pytest.mark.parametrize(
@@ -34,7 +33,7 @@ ENTITY_ID = f"{CLIMATE_DOMAIN}.{CLIMATE_NAME}"
{ {
CONF_CLIMATES: [ CONF_CLIMATES: [
{ {
CONF_NAME: CLIMATE_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_TARGET_TEMP: 117, CONF_TARGET_TEMP: 117,
CONF_ADDRESS: 117, CONF_ADDRESS: 117,
CONF_SLAVE: 10, CONF_SLAVE: 10,
@@ -44,7 +43,7 @@ ENTITY_ID = f"{CLIMATE_DOMAIN}.{CLIMATE_NAME}"
{ {
CONF_CLIMATES: [ CONF_CLIMATES: [
{ {
CONF_NAME: CLIMATE_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_TARGET_TEMP: 117, CONF_TARGET_TEMP: 117,
CONF_ADDRESS: 117, CONF_ADDRESS: 117,
CONF_SLAVE: 10, CONF_SLAVE: 10,
@@ -71,18 +70,17 @@ async def test_config_climate(hass, mock_modbus):
) )
async def test_temperature_climate(hass, regs, expected): async def test_temperature_climate(hass, regs, expected):
"""Run test for given config.""" """Run test for given config."""
CLIMATE_NAME = "modbus_test_climate"
return return
state = await base_test( state = await base_test(
hass, hass,
{ {
CONF_NAME: CLIMATE_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_TARGET_TEMP: 117, CONF_TARGET_TEMP: 117,
CONF_ADDRESS: 117, CONF_ADDRESS: 117,
CONF_COUNT: 2, CONF_COUNT: 2,
}, },
CLIMATE_NAME, TEST_ENTITY_NAME,
CLIMATE_DOMAIN, CLIMATE_DOMAIN,
CONF_CLIMATES, CONF_CLIMATES,
None, None,
@@ -100,7 +98,7 @@ async def test_temperature_climate(hass, regs, expected):
{ {
CONF_CLIMATES: [ CONF_CLIMATES: [
{ {
CONF_NAME: CLIMATE_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_TARGET_TEMP: 117, CONF_TARGET_TEMP: 117,
CONF_ADDRESS: 117, CONF_ADDRESS: 117,
CONF_SLAVE: 10, CONF_SLAVE: 10,
@@ -127,7 +125,7 @@ async def test_service_climate_update(hass, mock_modbus, mock_ha):
{ {
CONF_CLIMATES: [ CONF_CLIMATES: [
{ {
CONF_NAME: CLIMATE_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_TARGET_TEMP: 117, CONF_TARGET_TEMP: 117,
CONF_ADDRESS: 117, CONF_ADDRESS: 117,
CONF_SLAVE: 10, CONF_SLAVE: 10,
@@ -142,7 +140,7 @@ async def test_service_climate_update(hass, mock_modbus, mock_ha):
{ {
CONF_CLIMATES: [ CONF_CLIMATES: [
{ {
CONF_NAME: CLIMATE_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_TARGET_TEMP: 117, CONF_TARGET_TEMP: 117,
CONF_ADDRESS: 117, CONF_ADDRESS: 117,
CONF_SLAVE: 10, CONF_SLAVE: 10,
@@ -157,7 +155,7 @@ async def test_service_climate_update(hass, mock_modbus, mock_ha):
{ {
CONF_CLIMATES: [ CONF_CLIMATES: [
{ {
CONF_NAME: CLIMATE_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_TARGET_TEMP: 117, CONF_TARGET_TEMP: 117,
CONF_ADDRESS: 117, CONF_ADDRESS: 117,
CONF_SLAVE: 10, CONF_SLAVE: 10,
@@ -172,7 +170,7 @@ async def test_service_climate_update(hass, mock_modbus, mock_ha):
{ {
CONF_CLIMATES: [ CONF_CLIMATES: [
{ {
CONF_NAME: CLIMATE_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_TARGET_TEMP: 117, CONF_TARGET_TEMP: 117,
CONF_ADDRESS: 117, CONF_ADDRESS: 117,
CONF_SLAVE: 10, CONF_SLAVE: 10,
@@ -214,7 +212,7 @@ test_value.attributes = {ATTR_TEMPERATURE: 37}
{ {
CONF_CLIMATES: [ CONF_CLIMATES: [
{ {
CONF_NAME: CLIMATE_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_TARGET_TEMP: 117, CONF_TARGET_TEMP: 117,
CONF_ADDRESS: 117, CONF_ADDRESS: 117,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,

View File

@@ -29,10 +29,9 @@ from homeassistant.const import (
) )
from homeassistant.core import State from homeassistant.core import State
from .conftest import ReadResult, base_test from .conftest import TEST_ENTITY_NAME, ReadResult, base_test
COVER_NAME = "test_cover" ENTITY_ID = f"{COVER_DOMAIN}.{TEST_ENTITY_NAME}"
ENTITY_ID = f"{COVER_DOMAIN}.{COVER_NAME}"
@pytest.mark.parametrize( @pytest.mark.parametrize(
@@ -41,7 +40,7 @@ ENTITY_ID = f"{COVER_DOMAIN}.{COVER_NAME}"
{ {
CONF_COVERS: [ CONF_COVERS: [
{ {
CONF_NAME: COVER_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_INPUT_TYPE: CALL_TYPE_COIL, CONF_INPUT_TYPE: CALL_TYPE_COIL,
} }
@@ -50,7 +49,7 @@ ENTITY_ID = f"{COVER_DOMAIN}.{COVER_NAME}"
{ {
CONF_COVERS: [ CONF_COVERS: [
{ {
CONF_NAME: COVER_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING, CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING,
CONF_SLAVE: 10, CONF_SLAVE: 10,
@@ -95,12 +94,12 @@ async def test_coil_cover(hass, regs, expected):
state = await base_test( state = await base_test(
hass, hass,
{ {
CONF_NAME: COVER_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_INPUT_TYPE: CALL_TYPE_COIL, CONF_INPUT_TYPE: CALL_TYPE_COIL,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
}, },
COVER_NAME, TEST_ENTITY_NAME,
COVER_DOMAIN, COVER_DOMAIN,
CONF_COVERS, CONF_COVERS,
None, None,
@@ -142,11 +141,11 @@ async def test_register_cover(hass, regs, expected):
state = await base_test( state = await base_test(
hass, hass,
{ {
CONF_NAME: COVER_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
}, },
COVER_NAME, TEST_ENTITY_NAME,
COVER_DOMAIN, COVER_DOMAIN,
CONF_COVERS, CONF_COVERS,
None, None,
@@ -164,7 +163,7 @@ async def test_register_cover(hass, regs, expected):
{ {
CONF_COVERS: [ CONF_COVERS: [
{ {
CONF_NAME: COVER_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_STATUS_REGISTER_TYPE: CALL_TYPE_REGISTER_HOLDING, CONF_STATUS_REGISTER_TYPE: CALL_TYPE_REGISTER_HOLDING,
} }
@@ -201,7 +200,7 @@ async def test_service_cover_update(hass, mock_modbus, mock_ha):
{ {
CONF_COVERS: [ CONF_COVERS: [
{ {
CONF_NAME: COVER_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_INPUT_TYPE: CALL_TYPE_COIL, CONF_INPUT_TYPE: CALL_TYPE_COIL,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_STATE_OPEN: 1, CONF_STATE_OPEN: 1,
@@ -228,13 +227,13 @@ async def test_restore_state_cover(hass, mock_test_state, mock_modbus):
{ {
CONF_COVERS: [ CONF_COVERS: [
{ {
CONF_NAME: COVER_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_STATUS_REGISTER_TYPE: CALL_TYPE_REGISTER_HOLDING, CONF_STATUS_REGISTER_TYPE: CALL_TYPE_REGISTER_HOLDING,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
}, },
{ {
CONF_NAME: f"{COVER_NAME}2", CONF_NAME: f"{TEST_ENTITY_NAME}2",
CONF_INPUT_TYPE: CALL_TYPE_COIL, CONF_INPUT_TYPE: CALL_TYPE_COIL,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,

View File

@@ -12,6 +12,7 @@ from homeassistant.components.modbus.const import (
CONF_INPUT_TYPE, CONF_INPUT_TYPE,
CONF_STATE_OFF, CONF_STATE_OFF,
CONF_STATE_ON, CONF_STATE_ON,
CONF_TCP,
CONF_VERIFY, CONF_VERIFY,
CONF_WRITE_TYPE, CONF_WRITE_TYPE,
MODBUS_DOMAIN, MODBUS_DOMAIN,
@@ -33,10 +34,15 @@ from homeassistant.const import (
from homeassistant.core import State from homeassistant.core import State
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from .conftest import ReadResult, base_test from .conftest import (
TEST_ENTITY_NAME,
TEST_MODBUS_HOST,
TEST_PORT_TCP,
ReadResult,
base_test,
)
FAN_NAME = "test_fan" ENTITY_ID = f"{FAN_DOMAIN}.{TEST_ENTITY_NAME}"
ENTITY_ID = f"{FAN_DOMAIN}.{FAN_NAME}"
@pytest.mark.parametrize( @pytest.mark.parametrize(
@@ -45,7 +51,7 @@ ENTITY_ID = f"{FAN_DOMAIN}.{FAN_NAME}"
{ {
CONF_FANS: [ CONF_FANS: [
{ {
CONF_NAME: FAN_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
} }
] ]
@@ -53,7 +59,7 @@ ENTITY_ID = f"{FAN_DOMAIN}.{FAN_NAME}"
{ {
CONF_FANS: [ CONF_FANS: [
{ {
CONF_NAME: FAN_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_WRITE_TYPE: CALL_TYPE_COIL, CONF_WRITE_TYPE: CALL_TYPE_COIL,
} }
@@ -62,7 +68,7 @@ ENTITY_ID = f"{FAN_DOMAIN}.{FAN_NAME}"
{ {
CONF_FANS: [ CONF_FANS: [
{ {
CONF_NAME: FAN_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -79,7 +85,7 @@ ENTITY_ID = f"{FAN_DOMAIN}.{FAN_NAME}"
{ {
CONF_FANS: [ CONF_FANS: [
{ {
CONF_NAME: FAN_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -96,7 +102,7 @@ ENTITY_ID = f"{FAN_DOMAIN}.{FAN_NAME}"
{ {
CONF_FANS: [ CONF_FANS: [
{ {
CONF_NAME: FAN_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -113,7 +119,7 @@ ENTITY_ID = f"{FAN_DOMAIN}.{FAN_NAME}"
{ {
CONF_FANS: [ CONF_FANS: [
{ {
CONF_NAME: FAN_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -165,13 +171,13 @@ async def test_all_fan(hass, call_type, regs, verify, expected):
state = await base_test( state = await base_test(
hass, hass,
{ {
CONF_NAME: FAN_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_WRITE_TYPE: call_type, CONF_WRITE_TYPE: call_type,
**verify, **verify,
}, },
FAN_NAME, TEST_ENTITY_NAME,
FAN_DOMAIN, FAN_DOMAIN,
CONF_FANS, CONF_FANS,
None, None,
@@ -194,7 +200,7 @@ async def test_all_fan(hass, call_type, regs, verify, expected):
{ {
CONF_FANS: [ CONF_FANS: [
{ {
CONF_NAME: FAN_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
} }
@@ -210,21 +216,21 @@ async def test_restore_state_fan(hass, mock_test_state, mock_modbus):
async def test_fan_service_turn(hass, caplog, mock_pymodbus): async def test_fan_service_turn(hass, caplog, mock_pymodbus):
"""Run test for service turn_on/turn_off.""" """Run test for service turn_on/turn_off."""
ENTITY_ID2 = f"{FAN_DOMAIN}.{FAN_NAME}2" ENTITY_ID2 = f"{FAN_DOMAIN}.{TEST_ENTITY_NAME}2"
config = { config = {
MODBUS_DOMAIN: { MODBUS_DOMAIN: {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: "modbusTestHost", CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_FANS: [ CONF_FANS: [
{ {
CONF_NAME: FAN_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 17, CONF_ADDRESS: 17,
CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING, CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
}, },
{ {
CONF_NAME: f"{FAN_NAME}2", CONF_NAME: f"{TEST_ENTITY_NAME}2",
CONF_ADDRESS: 17, CONF_ADDRESS: 17,
CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING, CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
@@ -283,7 +289,7 @@ async def test_fan_service_turn(hass, caplog, mock_pymodbus):
{ {
CONF_FANS: [ CONF_FANS: [
{ {
CONF_NAME: FAN_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_WRITE_TYPE: CALL_TYPE_COIL, CONF_WRITE_TYPE: CALL_TYPE_COIL,
CONF_VERIFY: {}, CONF_VERIFY: {},

View File

@@ -42,10 +42,14 @@ from homeassistant.components.modbus.const import (
CONF_INPUT_TYPE, CONF_INPUT_TYPE,
CONF_MSG_WAIT, CONF_MSG_WAIT,
CONF_PARITY, CONF_PARITY,
CONF_RTUOVERTCP,
CONF_SERIAL,
CONF_STOPBITS, CONF_STOPBITS,
CONF_SWAP, CONF_SWAP,
CONF_SWAP_BYTE, CONF_SWAP_BYTE,
CONF_SWAP_WORD, CONF_SWAP_WORD,
CONF_TCP,
CONF_UDP,
DATA_TYPE_CUSTOM, DATA_TYPE_CUSTOM,
DATA_TYPE_INT, DATA_TYPE_INT,
DATA_TYPE_STRING, DATA_TYPE_STRING,
@@ -79,15 +83,17 @@ from homeassistant.const import (
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
from .conftest import ReadResult from .conftest import (
TEST_ENTITY_NAME,
TEST_MODBUS_HOST,
TEST_MODBUS_NAME,
TEST_PORT_SERIAL,
TEST_PORT_TCP,
ReadResult,
)
from tests.common import async_fire_time_changed from tests.common import async_fire_time_changed
TEST_SENSOR_NAME = "testSensor"
TEST_ENTITY_ID = f"{SENSOR_DOMAIN}.{TEST_SENSOR_NAME}"
TEST_HOST = "modbusTestHost"
TEST_MODBUS_NAME = "modbusTest"
@pytest.fixture @pytest.fixture
async def mock_modbus_with_pymodbus(hass, caplog, do_config, mock_pymodbus): async def mock_modbus_with_pymodbus(hass, caplog, do_config, mock_pymodbus):
@@ -128,17 +134,17 @@ async def test_number_validator():
"do_config", "do_config",
[ [
{ {
CONF_NAME: TEST_SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_COUNT: 2, CONF_COUNT: 2,
CONF_DATA_TYPE: DATA_TYPE_STRING, CONF_DATA_TYPE: DATA_TYPE_STRING,
}, },
{ {
CONF_NAME: TEST_SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_COUNT: 2, CONF_COUNT: 2,
CONF_DATA_TYPE: DATA_TYPE_INT, CONF_DATA_TYPE: DATA_TYPE_INT,
}, },
{ {
CONF_NAME: TEST_SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_COUNT: 2, CONF_COUNT: 2,
CONF_DATA_TYPE: DATA_TYPE_INT, CONF_DATA_TYPE: DATA_TYPE_INT,
CONF_SWAP: CONF_SWAP_BYTE, CONF_SWAP: CONF_SWAP_BYTE,
@@ -157,29 +163,29 @@ async def test_ok_struct_validator(do_config):
"do_config", "do_config",
[ [
{ {
CONF_NAME: TEST_SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_COUNT: 8, CONF_COUNT: 8,
CONF_DATA_TYPE: DATA_TYPE_INT, CONF_DATA_TYPE: DATA_TYPE_INT,
}, },
{ {
CONF_NAME: TEST_SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_COUNT: 8, CONF_COUNT: 8,
CONF_DATA_TYPE: DATA_TYPE_CUSTOM, CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
}, },
{ {
CONF_NAME: TEST_SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_COUNT: 8, CONF_COUNT: 8,
CONF_DATA_TYPE: DATA_TYPE_CUSTOM, CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
CONF_STRUCTURE: "no good", CONF_STRUCTURE: "no good",
}, },
{ {
CONF_NAME: TEST_SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_COUNT: 20, CONF_COUNT: 20,
CONF_DATA_TYPE: DATA_TYPE_CUSTOM, CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
CONF_STRUCTURE: ">f", CONF_STRUCTURE: ">f",
}, },
{ {
CONF_NAME: TEST_SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_COUNT: 1, CONF_COUNT: 1,
CONF_DATA_TYPE: DATA_TYPE_CUSTOM, CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
CONF_STRUCTURE: ">f", CONF_STRUCTURE: ">f",
@@ -200,60 +206,60 @@ async def test_exception_struct_validator(do_config):
"do_config", "do_config",
[ [
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
}, },
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_NAME: TEST_MODBUS_NAME, CONF_NAME: TEST_MODBUS_NAME,
CONF_TIMEOUT: 30, CONF_TIMEOUT: 30,
CONF_DELAY: 10, CONF_DELAY: 10,
}, },
{ {
CONF_TYPE: "udp", CONF_TYPE: CONF_UDP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
}, },
{ {
CONF_TYPE: "udp", CONF_TYPE: CONF_UDP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_NAME: TEST_MODBUS_NAME, CONF_NAME: TEST_MODBUS_NAME,
CONF_TIMEOUT: 30, CONF_TIMEOUT: 30,
CONF_DELAY: 10, CONF_DELAY: 10,
}, },
{ {
CONF_TYPE: "rtuovertcp", CONF_TYPE: CONF_RTUOVERTCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
}, },
{ {
CONF_TYPE: "rtuovertcp", CONF_TYPE: CONF_RTUOVERTCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_NAME: TEST_MODBUS_NAME, CONF_NAME: TEST_MODBUS_NAME,
CONF_TIMEOUT: 30, CONF_TIMEOUT: 30,
CONF_DELAY: 10, CONF_DELAY: 10,
}, },
{ {
CONF_TYPE: "serial", CONF_TYPE: CONF_SERIAL,
CONF_BAUDRATE: 9600, CONF_BAUDRATE: 9600,
CONF_BYTESIZE: 8, CONF_BYTESIZE: 8,
CONF_METHOD: "rtu", CONF_METHOD: "rtu",
CONF_PORT: "usb01", CONF_PORT: TEST_PORT_SERIAL,
CONF_PARITY: "E", CONF_PARITY: "E",
CONF_STOPBITS: 1, CONF_STOPBITS: 1,
CONF_MSG_WAIT: 100, CONF_MSG_WAIT: 100,
}, },
{ {
CONF_TYPE: "serial", CONF_TYPE: CONF_SERIAL,
CONF_BAUDRATE: 9600, CONF_BAUDRATE: 9600,
CONF_BYTESIZE: 8, CONF_BYTESIZE: 8,
CONF_METHOD: "rtu", CONF_METHOD: "rtu",
CONF_PORT: "usb01", CONF_PORT: TEST_PORT_SERIAL,
CONF_PARITY: "E", CONF_PARITY: "E",
CONF_STOPBITS: 1, CONF_STOPBITS: 1,
CONF_NAME: TEST_MODBUS_NAME, CONF_NAME: TEST_MODBUS_NAME,
@@ -261,43 +267,43 @@ async def test_exception_struct_validator(do_config):
CONF_DELAY: 10, CONF_DELAY: 10,
}, },
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_DELAY: 5, CONF_DELAY: 5,
}, },
[ [
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_NAME: TEST_MODBUS_NAME, CONF_NAME: TEST_MODBUS_NAME,
}, },
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_NAME: TEST_MODBUS_NAME + "2", CONF_NAME: f"{TEST_MODBUS_NAME}2",
}, },
{ {
CONF_TYPE: "serial", CONF_TYPE: CONF_SERIAL,
CONF_BAUDRATE: 9600, CONF_BAUDRATE: 9600,
CONF_BYTESIZE: 8, CONF_BYTESIZE: 8,
CONF_METHOD: "rtu", CONF_METHOD: "rtu",
CONF_PORT: "usb01", CONF_PORT: TEST_PORT_SERIAL,
CONF_PARITY: "E", CONF_PARITY: "E",
CONF_STOPBITS: 1, CONF_STOPBITS: 1,
CONF_NAME: TEST_MODBUS_NAME + "3", CONF_NAME: f"{TEST_MODBUS_NAME}3",
}, },
], ],
{ {
# Special test for scan_interval validator with scan_interval: 0 # Special test for scan_interval validator with scan_interval: 0
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: TEST_SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 117, CONF_ADDRESS: 117,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
} }
@@ -320,11 +326,11 @@ SERVICE = "service"
[ [
{ {
CONF_NAME: TEST_MODBUS_NAME, CONF_NAME: TEST_MODBUS_NAME,
CONF_TYPE: "serial", CONF_TYPE: CONF_SERIAL,
CONF_BAUDRATE: 9600, CONF_BAUDRATE: 9600,
CONF_BYTESIZE: 8, CONF_BYTESIZE: 8,
CONF_METHOD: "rtu", CONF_METHOD: "rtu",
CONF_PORT: "usb01", CONF_PORT: TEST_PORT_SERIAL,
CONF_PARITY: "E", CONF_PARITY: "E",
CONF_STOPBITS: 1, CONF_STOPBITS: 1,
}, },
@@ -425,14 +431,14 @@ async def mock_modbus_read_pymodbus(
config = { config = {
DOMAIN: [ DOMAIN: [
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_NAME: TEST_MODBUS_NAME, CONF_NAME: TEST_MODBUS_NAME,
do_group: [ do_group: [
{ {
CONF_INPUT_TYPE: do_type, CONF_INPUT_TYPE: do_type,
CONF_NAME: TEST_SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_SCAN_INTERVAL: do_scan_interval, CONF_SCAN_INTERVAL: do_scan_interval,
} }
@@ -482,7 +488,7 @@ async def test_pb_read(
"""Run test for different read.""" """Run test for different read."""
# Check state # Check state
entity_id = f"{do_domain}.{TEST_SENSOR_NAME}" entity_id = f"{do_domain}.{TEST_ENTITY_NAME}"
state = hass.states.get(entity_id).state state = hass.states.get(entity_id).state
assert hass.states.get(entity_id).state assert hass.states.get(entity_id).state
@@ -499,9 +505,9 @@ async def test_pymodbus_constructor_fail(hass, caplog):
config = { config = {
DOMAIN: [ DOMAIN: [
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
} }
] ]
} }
@@ -522,9 +528,9 @@ async def test_pymodbus_close_fail(hass, caplog, mock_pymodbus):
config = { config = {
DOMAIN: [ DOMAIN: [
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
} }
] ]
} }
@@ -543,19 +549,19 @@ async def test_delay(hass, mock_pymodbus):
# We "hijiack" a binary_sensor to make a proper blackbox test. # We "hijiack" a binary_sensor to make a proper blackbox test.
test_delay = 15 test_delay = 15
test_scan_interval = 5 test_scan_interval = 5
entity_id = f"{BINARY_SENSOR_DOMAIN}.{TEST_SENSOR_NAME}" entity_id = f"{BINARY_SENSOR_DOMAIN}.{TEST_ENTITY_NAME}"
config = { config = {
DOMAIN: [ DOMAIN: [
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: TEST_HOST, CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_NAME: TEST_MODBUS_NAME, CONF_NAME: TEST_MODBUS_NAME,
CONF_DELAY: test_delay, CONF_DELAY: test_delay,
CONF_BINARY_SENSORS: [ CONF_BINARY_SENSORS: [
{ {
CONF_INPUT_TYPE: CALL_TYPE_COIL, CONF_INPUT_TYPE: CALL_TYPE_COIL,
CONF_NAME: f"{TEST_SENSOR_NAME}", CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 52, CONF_ADDRESS: 52,
CONF_SCAN_INTERVAL: test_scan_interval, CONF_SCAN_INTERVAL: test_scan_interval,
}, },

View File

@@ -11,6 +11,7 @@ from homeassistant.components.modbus.const import (
CONF_INPUT_TYPE, CONF_INPUT_TYPE,
CONF_STATE_OFF, CONF_STATE_OFF,
CONF_STATE_ON, CONF_STATE_ON,
CONF_TCP,
CONF_VERIFY, CONF_VERIFY,
CONF_WRITE_TYPE, CONF_WRITE_TYPE,
MODBUS_DOMAIN, MODBUS_DOMAIN,
@@ -33,10 +34,15 @@ from homeassistant.const import (
from homeassistant.core import State from homeassistant.core import State
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from .conftest import ReadResult, base_test from .conftest import (
TEST_ENTITY_NAME,
TEST_MODBUS_HOST,
TEST_PORT_TCP,
ReadResult,
base_test,
)
LIGHT_NAME = "test_light" ENTITY_ID = f"{LIGHT_DOMAIN}.{TEST_ENTITY_NAME}"
ENTITY_ID = f"{LIGHT_DOMAIN}.{LIGHT_NAME}"
@pytest.mark.parametrize( @pytest.mark.parametrize(
@@ -45,7 +51,7 @@ ENTITY_ID = f"{LIGHT_DOMAIN}.{LIGHT_NAME}"
{ {
CONF_LIGHTS: [ CONF_LIGHTS: [
{ {
CONF_NAME: LIGHT_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
} }
] ]
@@ -53,7 +59,7 @@ ENTITY_ID = f"{LIGHT_DOMAIN}.{LIGHT_NAME}"
{ {
CONF_LIGHTS: [ CONF_LIGHTS: [
{ {
CONF_NAME: LIGHT_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_WRITE_TYPE: CALL_TYPE_COIL, CONF_WRITE_TYPE: CALL_TYPE_COIL,
} }
@@ -62,7 +68,7 @@ ENTITY_ID = f"{LIGHT_DOMAIN}.{LIGHT_NAME}"
{ {
CONF_LIGHTS: [ CONF_LIGHTS: [
{ {
CONF_NAME: LIGHT_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -79,7 +85,7 @@ ENTITY_ID = f"{LIGHT_DOMAIN}.{LIGHT_NAME}"
{ {
CONF_LIGHTS: [ CONF_LIGHTS: [
{ {
CONF_NAME: LIGHT_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -96,7 +102,7 @@ ENTITY_ID = f"{LIGHT_DOMAIN}.{LIGHT_NAME}"
{ {
CONF_LIGHTS: [ CONF_LIGHTS: [
{ {
CONF_NAME: LIGHT_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -113,7 +119,7 @@ ENTITY_ID = f"{LIGHT_DOMAIN}.{LIGHT_NAME}"
{ {
CONF_LIGHTS: [ CONF_LIGHTS: [
{ {
CONF_NAME: LIGHT_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -165,13 +171,13 @@ async def test_all_light(hass, call_type, regs, verify, expected):
state = await base_test( state = await base_test(
hass, hass,
{ {
CONF_NAME: LIGHT_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_WRITE_TYPE: call_type, CONF_WRITE_TYPE: call_type,
**verify, **verify,
}, },
LIGHT_NAME, TEST_ENTITY_NAME,
LIGHT_DOMAIN, LIGHT_DOMAIN,
CONF_LIGHTS, CONF_LIGHTS,
None, None,
@@ -194,7 +200,7 @@ async def test_all_light(hass, call_type, regs, verify, expected):
{ {
CONF_LIGHTS: [ CONF_LIGHTS: [
{ {
CONF_NAME: LIGHT_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
} }
@@ -213,18 +219,18 @@ async def test_light_service_turn(hass, caplog, mock_pymodbus):
ENTITY_ID2 = f"{ENTITY_ID}2" ENTITY_ID2 = f"{ENTITY_ID}2"
config = { config = {
MODBUS_DOMAIN: { MODBUS_DOMAIN: {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: "modbusTestHost", CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_LIGHTS: [ CONF_LIGHTS: [
{ {
CONF_NAME: LIGHT_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 17, CONF_ADDRESS: 17,
CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING, CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
}, },
{ {
CONF_NAME: f"{LIGHT_NAME}2", CONF_NAME: f"{TEST_ENTITY_NAME}2",
CONF_ADDRESS: 17, CONF_ADDRESS: 17,
CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING, CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
@@ -283,7 +289,7 @@ async def test_light_service_turn(hass, caplog, mock_pymodbus):
{ {
CONF_LIGHTS: [ CONF_LIGHTS: [
{ {
CONF_NAME: LIGHT_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_WRITE_TYPE: CALL_TYPE_COIL, CONF_WRITE_TYPE: CALL_TYPE_COIL,
CONF_VERIFY: {}, CONF_VERIFY: {},

View File

@@ -35,10 +35,9 @@ from homeassistant.const import (
) )
from homeassistant.core import State from homeassistant.core import State
from .conftest import ReadResult, base_test from .conftest import TEST_ENTITY_NAME, ReadResult, base_test
SENSOR_NAME = "test_sensor" ENTITY_ID = f"{SENSOR_DOMAIN}.{TEST_ENTITY_NAME}"
ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
@pytest.mark.parametrize( @pytest.mark.parametrize(
@@ -47,7 +46,7 @@ ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
} }
] ]
@@ -55,7 +54,7 @@ ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_SLAVE: 10, CONF_SLAVE: 10,
CONF_COUNT: 1, CONF_COUNT: 1,
@@ -71,7 +70,7 @@ ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_SLAVE: 10, CONF_SLAVE: 10,
CONF_COUNT: 1, CONF_COUNT: 1,
@@ -87,7 +86,7 @@ ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_COUNT: 1, CONF_COUNT: 1,
CONF_SWAP: CONF_SWAP_NONE, CONF_SWAP: CONF_SWAP_NONE,
@@ -97,7 +96,7 @@ ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_COUNT: 1, CONF_COUNT: 1,
CONF_SWAP: CONF_SWAP_BYTE, CONF_SWAP: CONF_SWAP_BYTE,
@@ -107,7 +106,7 @@ ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_COUNT: 2, CONF_COUNT: 2,
CONF_SWAP: CONF_SWAP_WORD, CONF_SWAP: CONF_SWAP_WORD,
@@ -117,7 +116,7 @@ ENTITY_ID = f"{SENSOR_DOMAIN}.{SENSOR_NAME}"
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_COUNT: 2, CONF_COUNT: 2,
CONF_SWAP: CONF_SWAP_WORD_BYTE, CONF_SWAP: CONF_SWAP_WORD_BYTE,
@@ -139,7 +138,7 @@ async def test_config_sensor(hass, mock_modbus):
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_COUNT: 8, CONF_COUNT: 8,
CONF_PRECISION: 2, CONF_PRECISION: 2,
@@ -154,7 +153,7 @@ async def test_config_sensor(hass, mock_modbus):
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_COUNT: 2, CONF_COUNT: 2,
CONF_PRECISION: 2, CONF_PRECISION: 2,
@@ -169,7 +168,7 @@ async def test_config_sensor(hass, mock_modbus):
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_DATA_TYPE: DATA_TYPE_CUSTOM, CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
CONF_COUNT: 4, CONF_COUNT: 4,
@@ -184,7 +183,7 @@ async def test_config_sensor(hass, mock_modbus):
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_DATA_TYPE: DATA_TYPE_CUSTOM, CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
CONF_COUNT: 4, CONF_COUNT: 4,
@@ -193,13 +192,13 @@ async def test_config_sensor(hass, mock_modbus):
}, },
] ]
}, },
"Error in sensor test_sensor. The `structure` field can not be empty", f"Error in sensor {TEST_ENTITY_NAME}. The `structure` field can not be empty",
), ),
( (
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_DATA_TYPE: DATA_TYPE_CUSTOM, CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
CONF_COUNT: 4, CONF_COUNT: 4,
@@ -214,7 +213,7 @@ async def test_config_sensor(hass, mock_modbus):
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_DATA_TYPE: DATA_TYPE_CUSTOM, CONF_DATA_TYPE: DATA_TYPE_CUSTOM,
CONF_COUNT: 1, CONF_COUNT: 1,
@@ -223,7 +222,7 @@ async def test_config_sensor(hass, mock_modbus):
}, },
] ]
}, },
"Error in sensor test_sensor swap(word) not possible due to the registers count: 1, needed: 2", f"Error in sensor {TEST_ENTITY_NAME} swap(word) not possible due to the registers count: 1, needed: 2",
), ),
], ],
) )
@@ -508,8 +507,8 @@ async def test_all_sensor(hass, cfg, regs, expected):
state = await base_test( state = await base_test(
hass, hass,
{CONF_NAME: SENSOR_NAME, CONF_ADDRESS: 1234, **cfg}, {CONF_NAME: TEST_ENTITY_NAME, CONF_ADDRESS: 1234, **cfg},
SENSOR_NAME, TEST_ENTITY_NAME,
SENSOR_DOMAIN, SENSOR_DOMAIN,
CONF_SENSORS, CONF_SENSORS,
CONF_REGISTERS, CONF_REGISTERS,
@@ -562,8 +561,8 @@ async def test_struct_sensor(hass, cfg, regs, expected):
state = await base_test( state = await base_test(
hass, hass,
{CONF_NAME: SENSOR_NAME, CONF_ADDRESS: 1234, **cfg}, {CONF_NAME: TEST_ENTITY_NAME, CONF_ADDRESS: 1234, **cfg},
SENSOR_NAME, TEST_ENTITY_NAME,
SENSOR_DOMAIN, SENSOR_DOMAIN,
CONF_SENSORS, CONF_SENSORS,
None, None,
@@ -586,7 +585,7 @@ async def test_struct_sensor(hass, cfg, regs, expected):
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
} }
@@ -605,7 +604,7 @@ async def test_restore_state_sensor(hass, mock_test_state, mock_modbus):
{ {
CONF_SENSORS: [ CONF_SENSORS: [
{ {
CONF_NAME: SENSOR_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_INPUT_TYPE: CALL_TYPE_REGISTER_INPUT, CONF_INPUT_TYPE: CALL_TYPE_REGISTER_INPUT,
} }

View File

@@ -13,6 +13,7 @@ from homeassistant.components.modbus.const import (
CONF_INPUT_TYPE, CONF_INPUT_TYPE,
CONF_STATE_OFF, CONF_STATE_OFF,
CONF_STATE_ON, CONF_STATE_ON,
CONF_TCP,
CONF_VERIFY, CONF_VERIFY,
CONF_WRITE_TYPE, CONF_WRITE_TYPE,
MODBUS_DOMAIN, MODBUS_DOMAIN,
@@ -39,12 +40,17 @@ from homeassistant.core import State
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
from .conftest import ReadResult, base_test from .conftest import (
TEST_ENTITY_NAME,
TEST_MODBUS_HOST,
TEST_PORT_TCP,
ReadResult,
base_test,
)
from tests.common import async_fire_time_changed from tests.common import async_fire_time_changed
SWITCH_NAME = "test_switch" ENTITY_ID = f"{SWITCH_DOMAIN}.{TEST_ENTITY_NAME}"
ENTITY_ID = f"{SWITCH_DOMAIN}.{SWITCH_NAME}"
@pytest.mark.parametrize( @pytest.mark.parametrize(
@@ -53,7 +59,7 @@ ENTITY_ID = f"{SWITCH_DOMAIN}.{SWITCH_NAME}"
{ {
CONF_SWITCHES: [ CONF_SWITCHES: [
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
} }
] ]
@@ -61,7 +67,7 @@ ENTITY_ID = f"{SWITCH_DOMAIN}.{SWITCH_NAME}"
{ {
CONF_SWITCHES: [ CONF_SWITCHES: [
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_WRITE_TYPE: CALL_TYPE_COIL, CONF_WRITE_TYPE: CALL_TYPE_COIL,
} }
@@ -70,7 +76,7 @@ ENTITY_ID = f"{SWITCH_DOMAIN}.{SWITCH_NAME}"
{ {
CONF_SWITCHES: [ CONF_SWITCHES: [
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -88,7 +94,7 @@ ENTITY_ID = f"{SWITCH_DOMAIN}.{SWITCH_NAME}"
{ {
CONF_SWITCHES: [ CONF_SWITCHES: [
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -107,7 +113,7 @@ ENTITY_ID = f"{SWITCH_DOMAIN}.{SWITCH_NAME}"
{ {
CONF_SWITCHES: [ CONF_SWITCHES: [
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -125,7 +131,7 @@ ENTITY_ID = f"{SWITCH_DOMAIN}.{SWITCH_NAME}"
{ {
CONF_SWITCHES: [ CONF_SWITCHES: [
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_COMMAND_OFF: 0x00, CONF_COMMAND_OFF: 0x00,
@@ -179,13 +185,13 @@ async def test_all_switch(hass, call_type, regs, verify, expected):
state = await base_test( state = await base_test(
hass, hass,
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SLAVE: 1, CONF_SLAVE: 1,
CONF_WRITE_TYPE: call_type, CONF_WRITE_TYPE: call_type,
**verify, **verify,
}, },
SWITCH_NAME, TEST_ENTITY_NAME,
SWITCH_DOMAIN, SWITCH_DOMAIN,
CONF_SWITCHES, CONF_SWITCHES,
None, None,
@@ -208,7 +214,7 @@ async def test_all_switch(hass, call_type, regs, verify, expected):
{ {
CONF_SWITCHES: [ CONF_SWITCHES: [
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
} }
@@ -224,21 +230,21 @@ async def test_restore_state_switch(hass, mock_test_state, mock_modbus):
async def test_switch_service_turn(hass, caplog, mock_pymodbus): async def test_switch_service_turn(hass, caplog, mock_pymodbus):
"""Run test for service turn_on/turn_off.""" """Run test for service turn_on/turn_off."""
ENTITY_ID2 = f"{SWITCH_DOMAIN}.{SWITCH_NAME}2" ENTITY_ID2 = f"{SWITCH_DOMAIN}.{TEST_ENTITY_NAME}2"
config = { config = {
MODBUS_DOMAIN: { MODBUS_DOMAIN: {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: "modbusTestHost", CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_SWITCHES: [ CONF_SWITCHES: [
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 17, CONF_ADDRESS: 17,
CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING, CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
}, },
{ {
CONF_NAME: f"{SWITCH_NAME}2", CONF_NAME: f"{TEST_ENTITY_NAME}2",
CONF_ADDRESS: 17, CONF_ADDRESS: 17,
CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING, CONF_WRITE_TYPE: CALL_TYPE_REGISTER_HOLDING,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
@@ -297,7 +303,7 @@ async def test_switch_service_turn(hass, caplog, mock_pymodbus):
{ {
CONF_SWITCHES: [ CONF_SWITCHES: [
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 1234, CONF_ADDRESS: 1234,
CONF_WRITE_TYPE: CALL_TYPE_COIL, CONF_WRITE_TYPE: CALL_TYPE_COIL,
CONF_VERIFY: {}, CONF_VERIFY: {},
@@ -324,12 +330,12 @@ async def test_delay_switch(hass, mock_pymodbus):
config = { config = {
MODBUS_DOMAIN: [ MODBUS_DOMAIN: [
{ {
CONF_TYPE: "tcp", CONF_TYPE: CONF_TCP,
CONF_HOST: "modbusTestHost", CONF_HOST: TEST_MODBUS_HOST,
CONF_PORT: 5501, CONF_PORT: TEST_PORT_TCP,
CONF_SWITCHES: [ CONF_SWITCHES: [
{ {
CONF_NAME: SWITCH_NAME, CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51, CONF_ADDRESS: 51,
CONF_SCAN_INTERVAL: 0, CONF_SCAN_INTERVAL: 0,
CONF_VERIFY: { CONF_VERIFY: {