From 77180a73b7bbc6aa2b1d9b7b063a1cc7be38763c Mon Sep 17 00:00:00 2001 From: jan iversen Date: Thu, 7 Sep 2023 20:56:00 +0200 Subject: [PATCH] Modbus scale parameter cuts decimals (#99758) --- .../components/modbus/base_platform.py | 2 ++ tests/components/modbus/test_sensor.py | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/homeassistant/components/modbus/base_platform.py b/homeassistant/components/modbus/base_platform.py index b71f8c20215..672250790da 100644 --- a/homeassistant/components/modbus/base_platform.py +++ b/homeassistant/components/modbus/base_platform.py @@ -160,6 +160,8 @@ class BaseStructPlatform(BasePlatform, RestoreEntity): self._structure: str = config[CONF_STRUCTURE] self._precision = config[CONF_PRECISION] self._scale = config[CONF_SCALE] + if self._scale < 1 and not self._precision: + self._precision = 2 self._offset = config[CONF_OFFSET] self._slave_count = config.get(CONF_SLAVE_COUNT, 0) self._slave_size = self._count = config[CONF_COUNT] diff --git a/tests/components/modbus/test_sensor.py b/tests/components/modbus/test_sensor.py index a746bcda3ba..551398c898b 100644 --- a/tests/components/modbus/test_sensor.py +++ b/tests/components/modbus/test_sensor.py @@ -596,6 +596,38 @@ async def test_config_wrong_struct_sensor( False, "1.23", ), + ( + { + CONF_DATA_TYPE: DataType.INT32, + CONF_SCALE: 10, + CONF_OFFSET: 0, + CONF_PRECISION: 0, + }, + [0x00AB, 0xCDEF], + False, + "112593750", + ), + ( + { + CONF_DATA_TYPE: DataType.INT32, + CONF_SCALE: 0.01, + CONF_OFFSET: 0, + CONF_PRECISION: 2, + }, + [0x00AB, 0xCDEF], + False, + "112593.75", + ), + ( + { + CONF_DATA_TYPE: DataType.INT32, + CONF_SCALE: 0.01, + CONF_OFFSET: 0, + }, + [0x00AB, 0xCDEF], + False, + "112593.75", + ), ], ) async def test_all_sensor(hass: HomeAssistant, mock_do_cycle, expected) -> None: