mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 18:57:06 +00:00
Modbus remove unnecessary get calls (#31966)
This commit is contained in:
parent
0dad2f8e41
commit
32cd58e03d
@ -159,10 +159,10 @@ def setup(hass, config):
|
|||||||
|
|
||||||
def write_register(service):
|
def write_register(service):
|
||||||
"""Write Modbus registers."""
|
"""Write Modbus registers."""
|
||||||
unit = int(float(service.data.get(ATTR_UNIT)))
|
unit = int(float(service.data[ATTR_UNIT]))
|
||||||
address = int(float(service.data.get(ATTR_ADDRESS)))
|
address = int(float(service.data[ATTR_ADDRESS]))
|
||||||
value = service.data.get(ATTR_VALUE)
|
value = service.data[ATTR_VALUE]
|
||||||
client_name = service.data.get(ATTR_HUB)
|
client_name = service.data[ATTR_HUB]
|
||||||
if isinstance(value, list):
|
if isinstance(value, list):
|
||||||
hub_collect[client_name].write_registers(
|
hub_collect[client_name].write_registers(
|
||||||
unit, address, [int(float(i)) for i in value]
|
unit, address, [int(float(i)) for i in value]
|
||||||
@ -172,10 +172,10 @@ def setup(hass, config):
|
|||||||
|
|
||||||
def write_coil(service):
|
def write_coil(service):
|
||||||
"""Write Modbus coil."""
|
"""Write Modbus coil."""
|
||||||
unit = service.data.get(ATTR_UNIT)
|
unit = service.data[ATTR_UNIT]
|
||||||
address = service.data.get(ATTR_ADDRESS)
|
address = service.data[ATTR_ADDRESS]
|
||||||
state = service.data.get(ATTR_STATE)
|
state = service.data[ATTR_STATE]
|
||||||
client_name = service.data.get(ATTR_HUB)
|
client_name = service.data[ATTR_HUB]
|
||||||
hub_collect[client_name].write_coil(unit, address, state)
|
hub_collect[client_name].write_coil(unit, address, state)
|
||||||
|
|
||||||
hass.bus.listen_once(EVENT_HOMEASSISTANT_START, start_modbus)
|
hass.bus.listen_once(EVENT_HOMEASSISTANT_START, start_modbus)
|
||||||
|
@ -25,8 +25,8 @@ CONF_INPUTS = "inputs"
|
|||||||
CONF_INPUT_TYPE = "input_type"
|
CONF_INPUT_TYPE = "input_type"
|
||||||
CONF_ADDRESS = "address"
|
CONF_ADDRESS = "address"
|
||||||
|
|
||||||
INPUT_TYPE_COIL = "coil"
|
DEFAULT_INPUT_TYPE_COIL = "coil"
|
||||||
INPUT_TYPE_DISCRETE = "discrete_input"
|
DEFAULT_INPUT_TYPE_DISCRETE = "discrete_input"
|
||||||
|
|
||||||
PLATFORM_SCHEMA = vol.All(
|
PLATFORM_SCHEMA = vol.All(
|
||||||
cv.deprecated(CONF_DEPRECATED_COILS, CONF_INPUTS),
|
cv.deprecated(CONF_DEPRECATED_COILS, CONF_INPUTS),
|
||||||
@ -43,8 +43,10 @@ PLATFORM_SCHEMA = vol.All(
|
|||||||
vol.Optional(CONF_HUB, default=DEFAULT_HUB): cv.string,
|
vol.Optional(CONF_HUB, default=DEFAULT_HUB): cv.string,
|
||||||
vol.Optional(CONF_SLAVE): cv.positive_int,
|
vol.Optional(CONF_SLAVE): cv.positive_int,
|
||||||
vol.Optional(
|
vol.Optional(
|
||||||
CONF_INPUT_TYPE, default=INPUT_TYPE_COIL
|
CONF_INPUT_TYPE, default=DEFAULT_INPUT_TYPE_COIL
|
||||||
): vol.In([INPUT_TYPE_COIL, INPUT_TYPE_DISCRETE]),
|
): vol.In(
|
||||||
|
[DEFAULT_INPUT_TYPE_COIL, DEFAULT_INPUT_TYPE_DISCRETE]
|
||||||
|
),
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -57,16 +59,16 @@ PLATFORM_SCHEMA = vol.All(
|
|||||||
def setup_platform(hass, config, add_entities, discovery_info=None):
|
def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||||
"""Set up the Modbus binary sensors."""
|
"""Set up the Modbus binary sensors."""
|
||||||
sensors = []
|
sensors = []
|
||||||
for entry in config.get(CONF_INPUTS):
|
for entry in config[CONF_INPUTS]:
|
||||||
hub = hass.data[MODBUS_DOMAIN][entry.get(CONF_HUB)]
|
hub = hass.data[MODBUS_DOMAIN][entry[CONF_HUB]]
|
||||||
sensors.append(
|
sensors.append(
|
||||||
ModbusBinarySensor(
|
ModbusBinarySensor(
|
||||||
hub,
|
hub,
|
||||||
entry.get(CONF_NAME),
|
entry[CONF_NAME],
|
||||||
entry.get(CONF_SLAVE),
|
entry.get(CONF_SLAVE),
|
||||||
entry.get(CONF_ADDRESS),
|
entry[CONF_ADDRESS],
|
||||||
entry.get(CONF_DEVICE_CLASS),
|
entry.get(CONF_DEVICE_CLASS),
|
||||||
entry.get(CONF_INPUT_TYPE),
|
entry[CONF_INPUT_TYPE],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -110,7 +112,7 @@ class ModbusBinarySensor(BinarySensorDevice):
|
|||||||
def update(self):
|
def update(self):
|
||||||
"""Update the state of the sensor."""
|
"""Update the state of the sensor."""
|
||||||
try:
|
try:
|
||||||
if self._input_type == INPUT_TYPE_COIL:
|
if self._input_type == DEFAULT_INPUT_TYPE_COIL:
|
||||||
result = self._hub.read_coils(self._slave, self._address, 1)
|
result = self._hub.read_coils(self._slave, self._address, 1)
|
||||||
else:
|
else:
|
||||||
result = self._hub.read_discrete_inputs(self._slave, self._address, 1)
|
result = self._hub.read_discrete_inputs(self._slave, self._address, 1)
|
||||||
|
@ -37,8 +37,8 @@ DATA_TYPE_FLOAT = "float"
|
|||||||
DATA_TYPE_INT = "int"
|
DATA_TYPE_INT = "int"
|
||||||
DATA_TYPE_UINT = "uint"
|
DATA_TYPE_UINT = "uint"
|
||||||
|
|
||||||
REGISTER_TYPE_HOLDING = "holding"
|
DEFAULT_REGISTER_TYPE_HOLDING = "holding"
|
||||||
REGISTER_TYPE_INPUT = "input"
|
DEFAULT_REGISTER_TYPE_INPUT = "input"
|
||||||
|
|
||||||
|
|
||||||
def number(value: Any) -> Union[int, float]:
|
def number(value: Any) -> Union[int, float]:
|
||||||
@ -74,9 +74,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
|||||||
vol.Optional(CONF_HUB, default=DEFAULT_HUB): cv.string,
|
vol.Optional(CONF_HUB, default=DEFAULT_HUB): cv.string,
|
||||||
vol.Optional(CONF_OFFSET, default=0): number,
|
vol.Optional(CONF_OFFSET, default=0): number,
|
||||||
vol.Optional(CONF_PRECISION, default=0): cv.positive_int,
|
vol.Optional(CONF_PRECISION, default=0): cv.positive_int,
|
||||||
vol.Optional(CONF_REGISTER_TYPE, default=REGISTER_TYPE_HOLDING): vol.In(
|
vol.Optional(
|
||||||
[REGISTER_TYPE_HOLDING, REGISTER_TYPE_INPUT]
|
CONF_REGISTER_TYPE, default=DEFAULT_REGISTER_TYPE_HOLDING
|
||||||
),
|
): vol.In([DEFAULT_REGISTER_TYPE_HOLDING, DEFAULT_REGISTER_TYPE_INPUT]),
|
||||||
vol.Optional(CONF_REVERSE_ORDER, default=False): cv.boolean,
|
vol.Optional(CONF_REVERSE_ORDER, default=False): cv.boolean,
|
||||||
vol.Optional(CONF_SCALE, default=1): number,
|
vol.Optional(CONF_SCALE, default=1): number,
|
||||||
vol.Optional(CONF_SLAVE): cv.positive_int,
|
vol.Optional(CONF_SLAVE): cv.positive_int,
|
||||||
@ -95,17 +95,17 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
|||||||
data_types[DATA_TYPE_UINT] = {1: "H", 2: "I", 4: "Q"}
|
data_types[DATA_TYPE_UINT] = {1: "H", 2: "I", 4: "Q"}
|
||||||
data_types[DATA_TYPE_FLOAT] = {1: "e", 2: "f", 4: "d"}
|
data_types[DATA_TYPE_FLOAT] = {1: "e", 2: "f", 4: "d"}
|
||||||
|
|
||||||
for register in config.get(CONF_REGISTERS):
|
for register in config[CONF_REGISTERS]:
|
||||||
structure = ">i"
|
structure = ">i"
|
||||||
if register.get(CONF_DATA_TYPE) != DATA_TYPE_CUSTOM:
|
if register[CONF_DATA_TYPE] != DATA_TYPE_CUSTOM:
|
||||||
try:
|
try:
|
||||||
structure = ">{}".format(
|
structure = ">{}".format(
|
||||||
data_types[register.get(CONF_DATA_TYPE)][register.get(CONF_COUNT)]
|
data_types[register[CONF_DATA_TYPE]][register[CONF_COUNT]]
|
||||||
)
|
)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
"Unable to detect data type for %s sensor, try a custom type",
|
"Unable to detect data type for %s sensor, try a custom type",
|
||||||
register.get(CONF_NAME),
|
register[CONF_NAME],
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
@ -114,35 +114,33 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
|||||||
try:
|
try:
|
||||||
size = struct.calcsize(structure)
|
size = struct.calcsize(structure)
|
||||||
except struct.error as err:
|
except struct.error as err:
|
||||||
_LOGGER.error(
|
_LOGGER.error("Error in sensor %s structure: %s", register[CONF_NAME], err)
|
||||||
"Error in sensor %s structure: %s", register.get(CONF_NAME), err
|
|
||||||
)
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if register.get(CONF_COUNT) * 2 != size:
|
if register[CONF_COUNT] * 2 != size:
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
"Structure size (%d bytes) mismatch registers count (%d words)",
|
"Structure size (%d bytes) mismatch registers count (%d words)",
|
||||||
size,
|
size,
|
||||||
register.get(CONF_COUNT),
|
register[CONF_COUNT],
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
hub_name = register.get(CONF_HUB)
|
hub_name = register[CONF_HUB]
|
||||||
hub = hass.data[MODBUS_DOMAIN][hub_name]
|
hub = hass.data[MODBUS_DOMAIN][hub_name]
|
||||||
sensors.append(
|
sensors.append(
|
||||||
ModbusRegisterSensor(
|
ModbusRegisterSensor(
|
||||||
hub,
|
hub,
|
||||||
register.get(CONF_NAME),
|
register[CONF_NAME],
|
||||||
register.get(CONF_SLAVE),
|
register.get(CONF_SLAVE),
|
||||||
register.get(CONF_REGISTER),
|
register[CONF_REGISTER],
|
||||||
register.get(CONF_REGISTER_TYPE),
|
register[CONF_REGISTER_TYPE],
|
||||||
register.get(CONF_UNIT_OF_MEASUREMENT),
|
register.get(CONF_UNIT_OF_MEASUREMENT),
|
||||||
register.get(CONF_COUNT),
|
register[CONF_COUNT],
|
||||||
register.get(CONF_REVERSE_ORDER),
|
register[CONF_REVERSE_ORDER],
|
||||||
register.get(CONF_SCALE),
|
register[CONF_SCALE],
|
||||||
register.get(CONF_OFFSET),
|
register[CONF_OFFSET],
|
||||||
structure,
|
structure,
|
||||||
register.get(CONF_PRECISION),
|
register[CONF_PRECISION],
|
||||||
register.get(CONF_DEVICE_CLASS),
|
register.get(CONF_DEVICE_CLASS),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -223,7 +221,7 @@ class ModbusRegisterSensor(RestoreEntity):
|
|||||||
def update(self):
|
def update(self):
|
||||||
"""Update the state of the sensor."""
|
"""Update the state of the sensor."""
|
||||||
try:
|
try:
|
||||||
if self._register_type == REGISTER_TYPE_INPUT:
|
if self._register_type == DEFAULT_REGISTER_TYPE_INPUT:
|
||||||
result = self._hub.read_input_registers(
|
result = self._hub.read_input_registers(
|
||||||
self._slave, self._register, self._count
|
self._slave, self._register, self._count
|
||||||
)
|
)
|
||||||
|
@ -32,8 +32,8 @@ CONF_STATE_ON = "state_on"
|
|||||||
CONF_VERIFY_REGISTER = "verify_register"
|
CONF_VERIFY_REGISTER = "verify_register"
|
||||||
CONF_VERIFY_STATE = "verify_state"
|
CONF_VERIFY_STATE = "verify_state"
|
||||||
|
|
||||||
REGISTER_TYPE_HOLDING = "holding"
|
DEFAULT_REGISTER_TYPE_HOLDING = "holding"
|
||||||
REGISTER_TYPE_INPUT = "input"
|
DEFAULT_REGISTER_TYPE_INPUT = "input"
|
||||||
|
|
||||||
REGISTERS_SCHEMA = vol.Schema(
|
REGISTERS_SCHEMA = vol.Schema(
|
||||||
{
|
{
|
||||||
@ -42,8 +42,8 @@ REGISTERS_SCHEMA = vol.Schema(
|
|||||||
vol.Required(CONF_NAME): cv.string,
|
vol.Required(CONF_NAME): cv.string,
|
||||||
vol.Required(CONF_REGISTER): cv.positive_int,
|
vol.Required(CONF_REGISTER): cv.positive_int,
|
||||||
vol.Optional(CONF_HUB, default=DEFAULT_HUB): cv.string,
|
vol.Optional(CONF_HUB, default=DEFAULT_HUB): cv.string,
|
||||||
vol.Optional(CONF_REGISTER_TYPE, default=REGISTER_TYPE_HOLDING): vol.In(
|
vol.Optional(CONF_REGISTER_TYPE, default=DEFAULT_REGISTER_TYPE_HOLDING): vol.In(
|
||||||
[REGISTER_TYPE_HOLDING, REGISTER_TYPE_INPUT]
|
[DEFAULT_REGISTER_TYPE_HOLDING, DEFAULT_REGISTER_TYPE_INPUT]
|
||||||
),
|
),
|
||||||
vol.Optional(CONF_SLAVE): cv.positive_int,
|
vol.Optional(CONF_SLAVE): cv.positive_int,
|
||||||
vol.Optional(CONF_STATE_OFF): cv.positive_int,
|
vol.Optional(CONF_STATE_OFF): cv.positive_int,
|
||||||
@ -77,30 +77,30 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
|||||||
"""Read configuration and create Modbus devices."""
|
"""Read configuration and create Modbus devices."""
|
||||||
switches = []
|
switches = []
|
||||||
if CONF_COILS in config:
|
if CONF_COILS in config:
|
||||||
for coil in config.get(CONF_COILS):
|
for coil in config[CONF_COILS]:
|
||||||
hub_name = coil.get(CONF_HUB)
|
hub_name = coil[CONF_HUB]
|
||||||
hub = hass.data[MODBUS_DOMAIN][hub_name]
|
hub = hass.data[MODBUS_DOMAIN][hub_name]
|
||||||
switches.append(
|
switches.append(
|
||||||
ModbusCoilSwitch(
|
ModbusCoilSwitch(
|
||||||
hub, coil.get(CONF_NAME), coil.get(CONF_SLAVE), coil.get(CONF_COIL)
|
hub, coil[CONF_NAME], coil[CONF_SLAVE], coil[CONF_COIL]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if CONF_REGISTERS in config:
|
if CONF_REGISTERS in config:
|
||||||
for register in config.get(CONF_REGISTERS):
|
for register in config[CONF_REGISTERS]:
|
||||||
hub_name = register.get(CONF_HUB)
|
hub_name = register[CONF_HUB]
|
||||||
hub = hass.data[MODBUS_DOMAIN][hub_name]
|
hub = hass.data[MODBUS_DOMAIN][hub_name]
|
||||||
|
|
||||||
switches.append(
|
switches.append(
|
||||||
ModbusRegisterSwitch(
|
ModbusRegisterSwitch(
|
||||||
hub,
|
hub,
|
||||||
register.get(CONF_NAME),
|
register[CONF_NAME],
|
||||||
register.get(CONF_SLAVE),
|
register.get(CONF_SLAVE),
|
||||||
register.get(CONF_REGISTER),
|
register[CONF_REGISTER],
|
||||||
register.get(CONF_COMMAND_ON),
|
register[CONF_COMMAND_ON],
|
||||||
register.get(CONF_COMMAND_OFF),
|
register[CONF_COMMAND_OFF],
|
||||||
register.get(CONF_VERIFY_STATE),
|
register[CONF_VERIFY_STATE],
|
||||||
register.get(CONF_VERIFY_REGISTER),
|
register.get(CONF_VERIFY_REGISTER),
|
||||||
register.get(CONF_REGISTER_TYPE),
|
register[CONF_REGISTER_TYPE],
|
||||||
register.get(CONF_STATE_ON),
|
register.get(CONF_STATE_ON),
|
||||||
register.get(CONF_STATE_OFF),
|
register.get(CONF_STATE_OFF),
|
||||||
)
|
)
|
||||||
@ -242,7 +242,7 @@ class ModbusRegisterSwitch(ModbusCoilSwitch):
|
|||||||
"""Set switch on."""
|
"""Set switch on."""
|
||||||
|
|
||||||
# Only holding register is writable
|
# Only holding register is writable
|
||||||
if self._register_type == REGISTER_TYPE_HOLDING:
|
if self._register_type == DEFAULT_REGISTER_TYPE_HOLDING:
|
||||||
self._write_register(self._command_on)
|
self._write_register(self._command_on)
|
||||||
if not self._verify_state:
|
if not self._verify_state:
|
||||||
self._is_on = True
|
self._is_on = True
|
||||||
@ -251,7 +251,7 @@ class ModbusRegisterSwitch(ModbusCoilSwitch):
|
|||||||
"""Set switch off."""
|
"""Set switch off."""
|
||||||
|
|
||||||
# Only holding register is writable
|
# Only holding register is writable
|
||||||
if self._register_type == REGISTER_TYPE_HOLDING:
|
if self._register_type == DEFAULT_REGISTER_TYPE_HOLDING:
|
||||||
self._write_register(self._command_off)
|
self._write_register(self._command_off)
|
||||||
if not self._verify_state:
|
if not self._verify_state:
|
||||||
self._is_on = False
|
self._is_on = False
|
||||||
@ -282,7 +282,7 @@ class ModbusRegisterSwitch(ModbusCoilSwitch):
|
|||||||
|
|
||||||
def _read_register(self) -> Optional[int]:
|
def _read_register(self) -> Optional[int]:
|
||||||
try:
|
try:
|
||||||
if self._register_type == REGISTER_TYPE_INPUT:
|
if self._register_type == DEFAULT_REGISTER_TYPE_INPUT:
|
||||||
result = self._hub.read_input_registers(self._slave, self._register, 1)
|
result = self._hub.read_input_registers(self._slave, self._register, 1)
|
||||||
else:
|
else:
|
||||||
result = self._hub.read_holding_registers(
|
result = self._hub.read_holding_registers(
|
||||||
|
@ -17,8 +17,8 @@ from homeassistant.components.modbus.sensor import (
|
|||||||
DATA_TYPE_FLOAT,
|
DATA_TYPE_FLOAT,
|
||||||
DATA_TYPE_INT,
|
DATA_TYPE_INT,
|
||||||
DATA_TYPE_UINT,
|
DATA_TYPE_UINT,
|
||||||
REGISTER_TYPE_HOLDING,
|
DEFAULT_REGISTER_TYPE_HOLDING,
|
||||||
REGISTER_TYPE_INPUT,
|
DEFAULT_REGISTER_TYPE_INPUT,
|
||||||
)
|
)
|
||||||
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
@ -72,7 +72,7 @@ async def run_test(hass, mock_hub, register_config, register_words, expected):
|
|||||||
|
|
||||||
# Setup inputs for the sensor
|
# Setup inputs for the sensor
|
||||||
read_result = ReadResult(register_words)
|
read_result = ReadResult(register_words)
|
||||||
if register_config.get(CONF_REGISTER_TYPE) == REGISTER_TYPE_INPUT:
|
if register_config.get(CONF_REGISTER_TYPE) == DEFAULT_REGISTER_TYPE_INPUT:
|
||||||
mock_hub.read_input_registers.return_value = read_result
|
mock_hub.read_input_registers.return_value = read_result
|
||||||
else:
|
else:
|
||||||
mock_hub.read_holding_registers.return_value = read_result
|
mock_hub.read_holding_registers.return_value = read_result
|
||||||
@ -310,7 +310,7 @@ async def test_two_word_input_register(hass, mock_hub):
|
|||||||
"""Test reaging of input register."""
|
"""Test reaging of input register."""
|
||||||
register_config = {
|
register_config = {
|
||||||
CONF_COUNT: 2,
|
CONF_COUNT: 2,
|
||||||
CONF_REGISTER_TYPE: REGISTER_TYPE_INPUT,
|
CONF_REGISTER_TYPE: DEFAULT_REGISTER_TYPE_INPUT,
|
||||||
CONF_DATA_TYPE: DATA_TYPE_UINT,
|
CONF_DATA_TYPE: DATA_TYPE_UINT,
|
||||||
CONF_SCALE: 1,
|
CONF_SCALE: 1,
|
||||||
CONF_OFFSET: 0,
|
CONF_OFFSET: 0,
|
||||||
@ -329,7 +329,7 @@ async def test_two_word_holding_register(hass, mock_hub):
|
|||||||
"""Test reaging of holding register."""
|
"""Test reaging of holding register."""
|
||||||
register_config = {
|
register_config = {
|
||||||
CONF_COUNT: 2,
|
CONF_COUNT: 2,
|
||||||
CONF_REGISTER_TYPE: REGISTER_TYPE_HOLDING,
|
CONF_REGISTER_TYPE: DEFAULT_REGISTER_TYPE_HOLDING,
|
||||||
CONF_DATA_TYPE: DATA_TYPE_UINT,
|
CONF_DATA_TYPE: DATA_TYPE_UINT,
|
||||||
CONF_SCALE: 1,
|
CONF_SCALE: 1,
|
||||||
CONF_OFFSET: 0,
|
CONF_OFFSET: 0,
|
||||||
@ -348,7 +348,7 @@ async def test_float_data_type(hass, mock_hub):
|
|||||||
"""Test floating point register data type."""
|
"""Test floating point register data type."""
|
||||||
register_config = {
|
register_config = {
|
||||||
CONF_COUNT: 2,
|
CONF_COUNT: 2,
|
||||||
CONF_REGISTER_TYPE: REGISTER_TYPE_HOLDING,
|
CONF_REGISTER_TYPE: DEFAULT_REGISTER_TYPE_HOLDING,
|
||||||
CONF_DATA_TYPE: DATA_TYPE_FLOAT,
|
CONF_DATA_TYPE: DATA_TYPE_FLOAT,
|
||||||
CONF_SCALE: 1,
|
CONF_SCALE: 1,
|
||||||
CONF_OFFSET: 0,
|
CONF_OFFSET: 0,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user