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:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user