mirror of
https://github.com/esphome/esphome.git
synced 2024-11-22 23:18:10 +01:00
Allow custom register type for modbus number (#3202)
This commit is contained in:
parent
4525588116
commit
0372d17a11
2 changed files with 9 additions and 3 deletions
|
@ -11,6 +11,7 @@ from esphome.const import (
|
||||||
)
|
)
|
||||||
|
|
||||||
from .. import (
|
from .. import (
|
||||||
|
MODBUS_WRITE_REGISTER_TYPE,
|
||||||
add_modbus_base_properties,
|
add_modbus_base_properties,
|
||||||
modbus_controller_ns,
|
modbus_controller_ns,
|
||||||
modbus_calc_properties,
|
modbus_calc_properties,
|
||||||
|
@ -24,6 +25,7 @@ from ..const import (
|
||||||
CONF_CUSTOM_COMMAND,
|
CONF_CUSTOM_COMMAND,
|
||||||
CONF_FORCE_NEW_RANGE,
|
CONF_FORCE_NEW_RANGE,
|
||||||
CONF_MODBUS_CONTROLLER_ID,
|
CONF_MODBUS_CONTROLLER_ID,
|
||||||
|
CONF_REGISTER_TYPE,
|
||||||
CONF_SKIP_UPDATES,
|
CONF_SKIP_UPDATES,
|
||||||
CONF_USE_WRITE_MULTIPLE,
|
CONF_USE_WRITE_MULTIPLE,
|
||||||
CONF_VALUE_TYPE,
|
CONF_VALUE_TYPE,
|
||||||
|
@ -61,6 +63,9 @@ CONFIG_SCHEMA = cv.All(
|
||||||
number.NUMBER_SCHEMA.extend(ModbusItemBaseSchema).extend(
|
number.NUMBER_SCHEMA.extend(ModbusItemBaseSchema).extend(
|
||||||
{
|
{
|
||||||
cv.GenerateID(): cv.declare_id(ModbusNumber),
|
cv.GenerateID(): cv.declare_id(ModbusNumber),
|
||||||
|
cv.Optional(CONF_REGISTER_TYPE, default="holding"): cv.enum(
|
||||||
|
MODBUS_WRITE_REGISTER_TYPE
|
||||||
|
),
|
||||||
cv.Optional(CONF_VALUE_TYPE, default="U_WORD"): cv.enum(SENSOR_VALUE_TYPE),
|
cv.Optional(CONF_VALUE_TYPE, default="U_WORD"): cv.enum(SENSOR_VALUE_TYPE),
|
||||||
cv.Optional(CONF_WRITE_LAMBDA): cv.returning_lambda,
|
cv.Optional(CONF_WRITE_LAMBDA): cv.returning_lambda,
|
||||||
# 24 bits are the maximum value for fp32 before precison is lost
|
# 24 bits are the maximum value for fp32 before precison is lost
|
||||||
|
@ -81,6 +86,7 @@ async def to_code(config):
|
||||||
byte_offset, reg_count = modbus_calc_properties(config)
|
byte_offset, reg_count = modbus_calc_properties(config)
|
||||||
var = cg.new_Pvariable(
|
var = cg.new_Pvariable(
|
||||||
config[CONF_ID],
|
config[CONF_ID],
|
||||||
|
config[CONF_REGISTER_TYPE],
|
||||||
config[CONF_ADDRESS],
|
config[CONF_ADDRESS],
|
||||||
byte_offset,
|
byte_offset,
|
||||||
config[CONF_BITMASK],
|
config[CONF_BITMASK],
|
||||||
|
|
|
@ -11,9 +11,9 @@ using value_to_data_t = std::function<float>(float);
|
||||||
|
|
||||||
class ModbusNumber : public number::Number, public Component, public SensorItem {
|
class ModbusNumber : public number::Number, public Component, public SensorItem {
|
||||||
public:
|
public:
|
||||||
ModbusNumber(uint16_t start_address, uint8_t offset, uint32_t bitmask, SensorValueType value_type, int register_count,
|
ModbusNumber(ModbusRegisterType register_type, uint16_t start_address, uint8_t offset, uint32_t bitmask,
|
||||||
uint8_t skip_updates, bool force_new_range) {
|
SensorValueType value_type, int register_count, uint8_t skip_updates, bool force_new_range) {
|
||||||
this->register_type = ModbusRegisterType::HOLDING;
|
this->register_type = register_type;
|
||||||
this->start_address = start_address;
|
this->start_address = start_address;
|
||||||
this->offset = offset;
|
this->offset = offset;
|
||||||
this->bitmask = bitmask;
|
this->bitmask = bitmask;
|
||||||
|
|
Loading…
Reference in a new issue