mirror of
https://github.com/home-assistant/core.git
synced 2025-07-08 05:47: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:
|
||||
"""Write Modbus registers."""
|
||||
slave = 0
|
||||
slave = 1
|
||||
if ATTR_UNIT in service.data:
|
||||
slave = int(float(service.data[ATTR_UNIT]))
|
||||
|
||||
@ -195,7 +195,7 @@ async def async_modbus_setup(
|
||||
|
||||
async def async_write_coil(service: ServiceCall) -> None:
|
||||
"""Write Modbus coil."""
|
||||
slave = 0
|
||||
slave = 1
|
||||
if ATTR_UNIT in service.data:
|
||||
slave = int(float(service.data[ATTR_UNIT]))
|
||||
if ATTR_SLAVE in service.data:
|
||||
|
@ -1327,3 +1327,89 @@ async def test_check_default_slave(
|
||||
assert mock_modbus.read_holding_registers.mock_calls
|
||||
first_call = mock_modbus.read_holding_registers.mock_calls[0]
|
||||
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