mirror of
https://github.com/home-assistant/core.git
synced 2025-07-08 13:57:10 +00:00
Change default slave id from 0 to 1 in modbus actions (#142865)
* set default slave id in service calls * add test * revert out of scope change
This commit is contained in:
parent
5fea4915ef
commit
c92873bbff
@ -172,7 +172,7 @@ async def async_modbus_setup(
|
|||||||
|
|
||||||
async def async_write_register(service: ServiceCall) -> None:
|
async def async_write_register(service: ServiceCall) -> None:
|
||||||
"""Write Modbus registers."""
|
"""Write Modbus registers."""
|
||||||
slave = 0
|
slave = 1
|
||||||
if ATTR_UNIT in service.data:
|
if ATTR_UNIT in service.data:
|
||||||
slave = int(float(service.data[ATTR_UNIT]))
|
slave = int(float(service.data[ATTR_UNIT]))
|
||||||
|
|
||||||
@ -195,7 +195,7 @@ async def async_modbus_setup(
|
|||||||
|
|
||||||
async def async_write_coil(service: ServiceCall) -> None:
|
async def async_write_coil(service: ServiceCall) -> None:
|
||||||
"""Write Modbus coil."""
|
"""Write Modbus coil."""
|
||||||
slave = 0
|
slave = 1
|
||||||
if ATTR_UNIT in service.data:
|
if ATTR_UNIT in service.data:
|
||||||
slave = int(float(service.data[ATTR_UNIT]))
|
slave = int(float(service.data[ATTR_UNIT]))
|
||||||
if ATTR_SLAVE in service.data:
|
if ATTR_SLAVE in service.data:
|
||||||
|
@ -1327,3 +1327,89 @@ async def test_check_default_slave(
|
|||||||
assert mock_modbus.read_holding_registers.mock_calls
|
assert mock_modbus.read_holding_registers.mock_calls
|
||||||
first_call = mock_modbus.read_holding_registers.mock_calls[0]
|
first_call = mock_modbus.read_holding_registers.mock_calls[0]
|
||||||
assert first_call.kwargs["slave"] == expected_slave_value
|
assert first_call.kwargs["slave"] == expected_slave_value
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"do_config",
|
||||||
|
[
|
||||||
|
{
|
||||||
|
CONF_NAME: TEST_MODBUS_NAME,
|
||||||
|
CONF_TYPE: SERIAL,
|
||||||
|
CONF_BAUDRATE: 9600,
|
||||||
|
CONF_BYTESIZE: 8,
|
||||||
|
CONF_METHOD: "rtu",
|
||||||
|
CONF_PORT: TEST_PORT_SERIAL,
|
||||||
|
CONF_PARITY: "E",
|
||||||
|
CONF_STOPBITS: 1,
|
||||||
|
CONF_SENSORS: [
|
||||||
|
{
|
||||||
|
CONF_NAME: "dummy_noslave",
|
||||||
|
CONF_ADDRESS: 8888,
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"do_write",
|
||||||
|
[
|
||||||
|
{
|
||||||
|
DATA: ATTR_VALUE,
|
||||||
|
VALUE: 15,
|
||||||
|
SERVICE: SERVICE_WRITE_REGISTER,
|
||||||
|
FUNC: CALL_TYPE_WRITE_REGISTER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
DATA: ATTR_STATE,
|
||||||
|
VALUE: False,
|
||||||
|
SERVICE: SERVICE_WRITE_COIL,
|
||||||
|
FUNC: CALL_TYPE_WRITE_COIL,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"do_return",
|
||||||
|
[
|
||||||
|
{VALUE: ReadResult([0x0001]), DATA: ""},
|
||||||
|
{VALUE: ExceptionResponse(0x06), DATA: "Pymodbus:"},
|
||||||
|
{VALUE: ModbusException("fail write_"), DATA: "Pymodbus:"},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_pb_service_write_no_slave(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
do_write,
|
||||||
|
do_return,
|
||||||
|
caplog: pytest.LogCaptureFixture,
|
||||||
|
mock_modbus_with_pymodbus,
|
||||||
|
) -> None:
|
||||||
|
"""Run test for service write_register in case of missing slave/unit parameter."""
|
||||||
|
|
||||||
|
func_name = {
|
||||||
|
CALL_TYPE_WRITE_COIL: mock_modbus_with_pymodbus.write_coil,
|
||||||
|
CALL_TYPE_WRITE_REGISTER: mock_modbus_with_pymodbus.write_register,
|
||||||
|
}
|
||||||
|
|
||||||
|
value_arg_name = {
|
||||||
|
CALL_TYPE_WRITE_COIL: "value",
|
||||||
|
CALL_TYPE_WRITE_REGISTER: "value",
|
||||||
|
}
|
||||||
|
|
||||||
|
data = {
|
||||||
|
ATTR_HUB: TEST_MODBUS_NAME,
|
||||||
|
ATTR_ADDRESS: 16,
|
||||||
|
do_write[DATA]: do_write[VALUE],
|
||||||
|
}
|
||||||
|
mock_modbus_with_pymodbus.reset_mock()
|
||||||
|
caplog.clear()
|
||||||
|
caplog.set_level(logging.DEBUG)
|
||||||
|
func_name[do_write[FUNC]].return_value = do_return[VALUE]
|
||||||
|
await hass.services.async_call(DOMAIN, do_write[SERVICE], data, blocking=True)
|
||||||
|
assert func_name[do_write[FUNC]].called
|
||||||
|
assert func_name[do_write[FUNC]].call_args.args == (data[ATTR_ADDRESS],)
|
||||||
|
assert func_name[do_write[FUNC]].call_args.kwargs == {
|
||||||
|
"slave": 1,
|
||||||
|
value_arg_name[do_write[FUNC]]: data[do_write[DATA]],
|
||||||
|
}
|
||||||
|
|
||||||
|
if do_return[DATA]:
|
||||||
|
assert any(message.startswith("Pymodbus:") for message in caplog.messages)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user