diff --git a/packages/modules/devices/generic/modbus/config.py b/packages/modules/devices/generic/modbus/config.py index 6ce3337269..b9faf7b400 100644 --- a/packages/modules/devices/generic/modbus/config.py +++ b/packages/modules/devices/generic/modbus/config.py @@ -34,6 +34,7 @@ def __init__(self, class RegisterConfig: reg_address: Optional[int] = None reg_type: Optional[str] = None + reg_factor: int = 1 @dataclass diff --git a/packages/modules/devices/generic/modbus/helper.py b/packages/modules/devices/generic/modbus/helper.py index 43f6c1f435..5249f134bd 100644 --- a/packages/modules/devices/generic/modbus/helper.py +++ b/packages/modules/devices/generic/modbus/helper.py @@ -6,6 +6,7 @@ def check_data(register_config: RegisterConfig, device_config: GenericModbusConfiguration): if (register_config.reg_type is None or + register_config.reg_factor is None or device_config.byteorder is None or device_config.wordorder is None): raise ValueError( @@ -19,7 +20,7 @@ def read_value(client: ModbusTcpClient_, unit: int, return None check_data(register_config, device_config) - return client.read_input_registers( + value = client.read_input_registers( register_config.reg_address, ModbusDataType[register_config.reg_type], byteorder=device_config.byteorder, @@ -27,6 +28,10 @@ def read_value(client: ModbusTcpClient_, unit: int, unit=unit, ) + if value is not None and register_config.reg_factor != 1: + value = value * register_config.reg_factor + return value + def read_phase_values(client: ModbusTcpClient_, unit: int,