mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +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:
|
if registers:
|
||||||
for regnum, register in registers.items():
|
for regnum, register in registers.items():
|
||||||
if register.get("name"):
|
if register.get("name"):
|
||||||
sensors.append(ModbusSensor(register.get("name"),
|
sensors.append(
|
||||||
slave,
|
ModbusSensor(register.get("name"),
|
||||||
regnum,
|
slave,
|
||||||
None,
|
regnum,
|
||||||
register.get("unit")))
|
None,
|
||||||
|
register.get("unit"),
|
||||||
|
scale=register.get("scale", 1),
|
||||||
|
offset=register.get("offset", 0),
|
||||||
|
precision=register.get("precision", 0)))
|
||||||
if register.get("bits"):
|
if register.get("bits"):
|
||||||
bits = register.get("bits")
|
bits = register.get("bits")
|
||||||
for bitnum, bit in bits.items():
|
for bitnum, bit in bits.items():
|
||||||
@ -53,8 +57,9 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
|||||||
class ModbusSensor(Entity):
|
class ModbusSensor(Entity):
|
||||||
"""Representation of a Modbus Sensor."""
|
"""Representation of a Modbus Sensor."""
|
||||||
|
|
||||||
# pylint: disable=too-many-arguments
|
# pylint: disable=too-many-arguments, too-many-instance-attributes
|
||||||
def __init__(self, name, slave, register, bit=None, unit=None, coil=False):
|
def __init__(self, name, slave, register, bit=None, unit=None, coil=False,
|
||||||
|
scale=1, offset=0, precision=0):
|
||||||
"""Initialize the sensor."""
|
"""Initialize the sensor."""
|
||||||
self._name = name
|
self._name = name
|
||||||
self.slave = int(slave) if slave else 1
|
self.slave = int(slave) if slave else 1
|
||||||
@ -63,6 +68,9 @@ class ModbusSensor(Entity):
|
|||||||
self._value = None
|
self._value = None
|
||||||
self._unit = unit
|
self._unit = unit
|
||||||
self._coil = coil
|
self._coil = coil
|
||||||
|
self._scale = scale
|
||||||
|
self._offset = offset
|
||||||
|
self._precision = precision
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
"""Return the name and the state of the sensor."""
|
"""Return the name and the state of the sensor."""
|
||||||
@ -118,4 +126,6 @@ class ModbusSensor(Entity):
|
|||||||
if self.bit:
|
if self.bit:
|
||||||
self._value = val & (0x0001 << self.bit)
|
self._value = val & (0x0001 << self.bit)
|
||||||
else:
|
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