|
1 |
| -#pragma once |
2 |
| - |
3 |
| -#include "esphome/components/number/number.h" |
4 |
| -#include "esphome/components/modbus_controller/modbus_controller.h" |
5 |
| -#include "esphome/core/component.h" |
6 |
| - |
7 |
| -namespace esphome { |
8 |
| -namespace modbus_controller { |
9 |
| - |
10 |
| -using value_to_data_t = std::function<float>(float); |
11 |
| - |
12 |
| -class ModbusNumber : public number::Number, public Component, public SensorItem { |
13 |
| - public: |
14 |
| - ModbusNumber(uint16_t start_address, uint8_t offset, uint32_t bitmask, SensorValueType value_type, int register_count, |
15 |
| - uint8_t skip_updates, bool force_new_range) |
16 |
| - : number::Number(), Component(), SensorItem() { |
17 |
| - this->register_type = ModbusRegisterType::HOLDING; |
18 |
| - this->start_address = start_address; |
19 |
| - this->offset = offset; |
20 |
| - this->bitmask = bitmask; |
21 |
| - this->sensor_value_type = value_type; |
22 |
| - this->register_count = register_count; |
23 |
| - this->skip_updates = skip_updates; |
24 |
| - this->force_new_range = force_new_range; |
25 |
| - }; |
26 |
| - |
27 |
| - void dump_config() override; |
28 |
| - void parse_and_publish(const std::vector<uint8_t> &data) override; |
29 |
| - float get_setup_priority() const override { return setup_priority::HARDWARE; } |
30 |
| - void set_update_interval(int) {} |
31 |
| - void set_parent(ModbusController *parent) { this->parent_ = parent; } |
32 |
| - void set_write_multiply(float factor) { multiply_by_ = factor; } |
33 |
| - |
34 |
| - using transform_func_t = std::function<optional<float>(ModbusNumber *, float, const std::vector<uint8_t> &)>; |
35 |
| - using write_transform_func_t = std::function<optional<float>(ModbusNumber *, float, std::vector<uint16_t> &)>; |
36 |
| - void set_template(transform_func_t &&f) { this->transform_func_ = f; } |
37 |
| - void set_write_template(write_transform_func_t &&f) { this->write_transform_func_ = f; } |
38 |
| - |
39 |
| - protected: |
40 |
| - void control(float value) override; |
41 |
| - optional<transform_func_t> transform_func_; |
42 |
| - optional<write_transform_func_t> write_transform_func_; |
43 |
| - ModbusController *parent_; |
44 |
| - float multiply_by_{1.0}; |
45 |
| -}; |
46 |
| - |
47 |
| -} // namespace modbus_controller |
48 |
| -} // namespace esphome |
| 1 | +#pragma once |
| 2 | + |
| 3 | +#include "esphome/components/number/number.h" |
| 4 | +#include "esphome/components/modbus_controller/modbus_controller.h" |
| 5 | +#include "esphome/core/component.h" |
| 6 | + |
| 7 | +namespace esphome { |
| 8 | +namespace modbus_controller { |
| 9 | + |
| 10 | +using value_to_data_t = std::function<float>(float); |
| 11 | + |
| 12 | +class ModbusNumber : public number::Number, public Component, public SensorItem { |
| 13 | + public: |
| 14 | + ModbusNumber(uint16_t start_address, uint8_t offset, uint32_t bitmask, SensorValueType value_type, int register_count, |
| 15 | + uint8_t skip_updates, bool force_new_range) |
| 16 | + : number::Number(), Component(), SensorItem() { |
| 17 | + this->register_type = ModbusRegisterType::HOLDING; |
| 18 | + this->start_address = start_address; |
| 19 | + this->offset = offset; |
| 20 | + this->bitmask = bitmask; |
| 21 | + this->sensor_value_type = value_type; |
| 22 | + this->register_count = register_count; |
| 23 | + this->skip_updates = skip_updates; |
| 24 | + this->force_new_range = force_new_range; |
| 25 | + }; |
| 26 | + |
| 27 | + void dump_config() override; |
| 28 | + void parse_and_publish(const std::vector<uint8_t> &data) override; |
| 29 | + float get_setup_priority() const override { return setup_priority::HARDWARE; } |
| 30 | + void set_update_interval(int) {} |
| 31 | + void set_parent(ModbusController *parent) { this->parent_ = parent; } |
| 32 | + void set_write_multiply(float factor) { multiply_by_ = factor; } |
| 33 | + |
| 34 | + using transform_func_t = std::function<optional<float>(ModbusNumber *, float, const std::vector<uint8_t> &)>; |
| 35 | + using write_transform_func_t = std::function<optional<float>(ModbusNumber *, float, std::vector<uint16_t> &)>; |
| 36 | + void set_template(transform_func_t &&f) { this->transform_func_ = f; } |
| 37 | + void set_write_template(write_transform_func_t &&f) { this->write_transform_func_ = f; } |
| 38 | + |
| 39 | + protected: |
| 40 | + void control(float value) override; |
| 41 | + optional<transform_func_t> transform_func_; |
| 42 | + optional<write_transform_func_t> write_transform_func_; |
| 43 | + ModbusController *parent_; |
| 44 | + float multiply_by_{1.0}; |
| 45 | +}; |
| 46 | + |
| 47 | +} // namespace modbus_controller |
| 48 | +} // namespace esphome |
0 commit comments