diff --git a/homeassistant/components/sensor/modbus.py b/homeassistant/components/sensor/modbus.py index db024651b86..d6c85993162 100644 --- a/homeassistant/components/sensor/modbus.py +++ b/homeassistant/components/sensor/modbus.py @@ -26,11 +26,15 @@ def setup_platform(hass, config, add_devices, discovery_info=None): if registers: for regnum, register in registers.items(): if register.get("name"): - sensors.append(ModbusSensor(register.get("name"), - slave, - regnum, - None, - register.get("unit"))) + sensors.append( + ModbusSensor(register.get("name"), + slave, + regnum, + None, + register.get("unit"), + scale=register.get("scale", 1), + offset=register.get("offset", 0), + precision=register.get("precision", 0))) if register.get("bits"): bits = register.get("bits") for bitnum, bit in bits.items(): @@ -53,8 +57,9 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class ModbusSensor(Entity): """Representation of a Modbus Sensor.""" - # pylint: disable=too-many-arguments - def __init__(self, name, slave, register, bit=None, unit=None, coil=False): + # pylint: disable=too-many-arguments, too-many-instance-attributes + def __init__(self, name, slave, register, bit=None, unit=None, coil=False, + scale=1, offset=0, precision=0): """Initialize the sensor.""" self._name = name self.slave = int(slave) if slave else 1 @@ -63,6 +68,9 @@ class ModbusSensor(Entity): self._value = None self._unit = unit self._coil = coil + self._scale = scale + self._offset = offset + self._precision = precision def __str__(self): """Return the name and the state of the sensor.""" @@ -118,4 +126,6 @@ class ModbusSensor(Entity): if self.bit: self._value = val & (0x0001 << self.bit) else: - self._value = val + self._value = format( + self._scale * val + self._offset, + ".{}f".format(self._precision))