Skip to content

Commit 546c0bc

Browse files
committed
feat(baud-rate): Add setter to set baud rate
Also added valid tests Signed-off-by: Bobo Bäck Engström <bobo@id8-engineering.io>
1 parent c63dad6 commit 546c0bc

2 files changed

Lines changed: 58 additions & 2 deletions

File tree

src/em511/em511.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -426,8 +426,7 @@ def password(self, value: int) -> None:
426426
def device_id(self, value: int) -> None:
427427
"""Device id.
428428
429-
Value:
430-
Range 1 - 247
429+
Range 1 - 247
431430
432431
Args:
433432
value (int): Set device id.
@@ -440,3 +439,22 @@ def device_id(self, value: int) -> None:
440439
msg = f"Invalid device id value: {value}. Must be between 1 and 247."
441440
raise ValueError(msg)
442441
self._write_register(self.EM511_REGISTER_DEVICE_ID, value)
442+
443+
@baud_rate.setter
444+
def baud_rate(self, value: int) -> None:
445+
"""Baud rate.
446+
447+
1=9.6kbps, 2=19.2kbps, 3=38.4kbps,
448+
4=57.6kbps, 5=115.2kbps (default=1).
449+
450+
Args:
451+
value (int): Set baud rate.
452+
453+
Raises:
454+
ModbusException: If failed to write to single register.
455+
ValueError: If baud rate value is out of range.
456+
"""
457+
if not (self.BAUD_RATE_MIN_VALUE <= value <= self.BAUD_RATE_MAX_VALUE):
458+
msg = f"Invalid baud rate value: {value}. Must be between 1 and 5."
459+
raise ValueError(msg)
460+
self._write_register(self.EM511_REGISTER_BAUD_RATE, value)

src/em511/test_em511.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,3 +584,41 @@ def test_set_device_id() -> None:
584584
client.write_register.return_value = mock_result
585585
meter.device_id = 1
586586
client.write_register.assert_called_once_with(address=8192, value=1, device_id=1)
587+
588+
589+
def test_set_baud_rate() -> None:
590+
"""Test Set baud rate."""
591+
client = MagicMock()
592+
mock_result = MagicMock()
593+
mock_result.isError.return_value = False
594+
meter = Em511(1, client)
595+
596+
"""Test 1: Set baud rate"""
597+
mock_result.registers = [8193]
598+
client.write_register.return_value = mock_result
599+
meter.baud_rate = 2
600+
client.write_register.assert_called_once_with(address=8193, value=2, device_id=1)
601+
602+
client.write_register.reset_mock()
603+
604+
"""Test 2: Try set baud rate out of range."""
605+
with pytest.raises(ValueError, match="Invalid baud rate value:"):
606+
meter.baud_rate = 6
607+
608+
"""Test 3: Try set baud rate out of range."""
609+
with pytest.raises(ValueError, match="Invalid baud rate value:"):
610+
meter.baud_rate = 0
611+
612+
"""Test 4: Try set baud rate at maximum value."""
613+
mock_result.registers = [8193]
614+
client.write_register.return_value = mock_result
615+
meter.baud_rate = 5
616+
client.write_register.assert_called_once_with(address=8193, value=5, device_id=1)
617+
618+
client.write_register.reset_mock()
619+
620+
"""Test 5: Try set baud rate at lowest value."""
621+
mock_result.registers = [8193]
622+
client.write_register.return_value = mock_result
623+
meter.baud_rate = 1
624+
client.write_register.assert_called_once_with(address=8193, value=1, device_id=1)

0 commit comments

Comments
 (0)