modbus sensor value scaling (#2972)

This commit is contained in:
Per Sandström 2016-08-27 11:49:49 +02:00 committed by Robbie Trencheny
parent c05d27d214
commit 2c26514c95

View File

@ -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))