1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-24 21:06:19 +00:00

Allow multi read of Modbus sensor (#67378)

This commit is contained in:
jan iversen
2022-02-28 20:07:55 +01:00
committed by GitHub
parent 690223fb69
commit e891df0ff3
5 changed files with 185 additions and 9 deletions

View File

@@ -9,6 +9,7 @@ from homeassistant.components.modbus.const import (
CONF_LAZY_ERROR,
CONF_PRECISION,
CONF_SCALE,
CONF_SLAVE_COUNT,
CONF_SWAP,
CONF_SWAP_BYTE,
CONF_SWAP_NONE,
@@ -124,6 +125,16 @@ ENTITY_ID = f"{SENSOR_DOMAIN}.{TEST_ENTITY_NAME}".replace(" ", "_")
}
]
},
{
CONF_SENSORS: [
{
CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51,
CONF_DATA_TYPE: DataType.INT32,
CONF_SLAVE_COUNT: 5,
}
]
},
],
)
async def test_config_sensor(hass, mock_modbus):
@@ -535,6 +546,73 @@ async def test_all_sensor(hass, mock_do_cycle, expected):
assert hass.states.get(ENTITY_ID).state == expected
@pytest.mark.parametrize(
"do_config",
[
{
CONF_SENSORS: [
{
CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51,
CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING,
CONF_DATA_TYPE: DataType.UINT32,
CONF_SCALE: 1,
CONF_OFFSET: 0,
CONF_PRECISION: 0,
},
],
},
],
)
@pytest.mark.parametrize(
"config_addon,register_words,expected",
[
(
{
CONF_SLAVE_COUNT: 0,
},
[0x0102, 0x0304],
["16909060"],
),
(
{
CONF_SLAVE_COUNT: 1,
},
[0x0102, 0x0304, 0x0403, 0x0201],
["16909060", "67305985"],
),
(
{
CONF_SLAVE_COUNT: 3,
},
[
0x0102,
0x0304,
0x0506,
0x0708,
0x090A,
0x0B0C,
0x0D0E,
0x0F00,
],
[
"16909060",
"84281096",
"151653132",
"219025152",
],
),
],
)
async def test_slave_sensor(hass, mock_do_cycle, expected):
"""Run test for sensor."""
assert hass.states.get(ENTITY_ID).state == expected[0]
for i in range(1, len(expected)):
entity_id = f"{SENSOR_DOMAIN}.{TEST_ENTITY_NAME}_{i}".replace(" ", "_")
assert hass.states.get(entity_id).state == expected[i]
@pytest.mark.parametrize(
"do_config",
[
@@ -664,7 +742,7 @@ async def test_struct_sensor(hass, mock_do_cycle, expected):
@pytest.mark.parametrize(
"mock_test_state",
[(State(ENTITY_ID, "117"),)],
[(State(ENTITY_ID, "117"), State(f"{ENTITY_ID}_1", "119"))],
indirect=True,
)
@pytest.mark.parametrize(
@@ -679,6 +757,16 @@ async def test_struct_sensor(hass, mock_do_cycle, expected):
}
]
},
{
CONF_SENSORS: [
{
CONF_NAME: TEST_ENTITY_NAME,
CONF_ADDRESS: 51,
CONF_SCAN_INTERVAL: 0,
CONF_SLAVE_COUNT: 1,
}
]
},
],
)
async def test_restore_state_sensor(hass, mock_test_state, mock_modbus):