mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
modbus sensor value scaling (#2972)
This commit is contained in:
parent
c05d27d214
commit
2c26514c95
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user