ESPHome 2026.10.0-dev
Loading...
Searching...
No Matches
modbus_number.h
Go to the documentation of this file.
1#pragma once
2
6
7#include <vector>
8
10
11using value_to_data_t = std::function<float>(float);
12
13class ModbusNumber final : public number::Number, public Component, public SensorItem, public WriterEntity {
14 public:
17 this->register_type = register_type;
18 this->set_address(start_address);
20 this->bitmask = bitmask;
21 this->sensor_value_type = value_type;
22 this->reuse_previous_range = reuse_previous_range;
23 };
24
25 void dump_config() override;
26 void parse_and_publish(std::span<const uint8_t> data) override;
27 float get_setup_priority() const override { return setup_priority::HARDWARE; }
28 void set_parent(ModbusController *parent) { this->set_controller_(parent); }
29 void set_write_multiply(float factor) { this->multiply_by_ = factor; }
30
31 using transform_func_t = optional<float> (*)(ModbusNumber *, float, std::span<const uint8_t>);
32 using write_transform_func_t = optional<float> (*)(ModbusNumber *, float, modbus::RegisterValues &);
35 void set_use_write_mutiple(bool use_write_multiple) { this->use_write_multiple_ = use_write_multiple; }
36
37 protected:
38 void control(float value) override;
39 optional<transform_func_t> transform_func_{nullopt};
40 optional<write_transform_func_t> write_transform_func_{nullopt};
41 float multiply_by_{1.0};
43};
44
45} // namespace esphome::modbus_controller
Minimal static vector - saves memory by avoiding std::vector overhead.
Definition helpers.h:227
optional< float >(*)(ModbusNumber *, float, std::span< const uint8_t >) transform_func_t
ModbusNumber(modbus::EntityType register_type, uint16_t start_address, uint8_t offset, uint32_t bitmask, SensorValueType value_type, RangeReuse reuse_previous_range)
optional< write_transform_func_t > write_transform_func_
void parse_and_publish(std::span< const uint8_t > data) override
optional< transform_func_t > transform_func_
void set_template(transform_func_t f)
void set_parent(ModbusController *parent)
void set_use_write_mutiple(bool use_write_multiple)
float get_setup_priority() const override
optional< float >(*)(ModbusNumber *, float, modbus::RegisterValues &) write_transform_func_t
void set_write_template(write_transform_func_t f)
void set_address(uint16_t address)
Sets the configured address, and points the range base at it.
void set_offset_from_start_address(uint8_t offset)
Records the offset as configured, and seeds the resolved position with it.
uint8_t offset
Position of this sensor's data within its range's response - a byte offset for registers,...
Gives a writer entity the write API of the WriterDevice it owns.
void set_controller_(ModbusController *controller)
Base-class for all numbers.
Definition number.h:29
std::function< float >(float) value_to_data_t
const std::vector< uint8_t > & data
RangeReuse
How an item relates to the register range built just before it (same register type,...
constexpr float HARDWARE
For components that deal with hardware and are very important like GPIO switch.
Definition component.h:43
static void uint32_t