23 using ReadLambda = std::function<int64_t()>;
24 using WriteLambda = std::function<bool(int64_t value)>;
34 this->
read_lambda = [
this, user_read_lambda]() -> int64_t {
35 T user_value = user_read_lambda(this->address);
36 if constexpr (std::is_same_v<T, float>) {
39 return static_cast<int64_t
>(user_value);
46 this->
write_lambda = [
this, user_write_lambda](int64_t number) {
47 if constexpr (std::is_same_v<T, float>) {
49 return user_write_lambda(this->address, float_value);
51 return user_write_lambda(this->address,
static_cast<T
>(number));
66 buf_append_printf(buf,
sizeof(buf), 0,
"%" PRIu64,
static_cast<uint64_t
>(value));
73 buf_append_printf(buf,
sizeof(buf), 0,
"%" PRId64, value);
77 buf_append_printf(buf,
sizeof(buf), 0,
"%.1f", bit_cast<float>(
static_cast<uint32_t>(value)));
80 buf_append_printf(buf,
sizeof(buf), 0,
"%" PRId64, value);
116 .enabled =
false, .register_last_address = 0xFFFF, .register_value = 0};
void on_modbus_read_registers(uint8_t function_code, uint16_t start_address, uint16_t number_of_registers) final
called when a modbus request (function code 0x03 or 0x04) was parsed without errors
void on_modbus_write_registers(uint8_t function_code, const std::vector< uint8_t > &data) final
called when a modbus request (function code 0x06 or 0x10) was parsed without errors
void dump_config() override
void set_server_courtesy_response(const ServerCourtesyResponse &server_courtesy_response)
Called by esphome generated code to set the server courtesy response object.
ServerCourtesyResponse get_server_courtesy_response() const
Get the server courtesy response object.
std::vector< ServerRegister * > server_registers_
Collection of all server registers for this component.
void add_server_register(ServerRegister *server_register)
Registers a server register with the controller. Called by esphomes code generator.
void on_modbus_data(const std::vector< uint8_t > &data) override
Not used for ModbusServer.
ServerCourtesyResponse server_courtesy_response_
Server courtesy response.
void set_write_lambda(const std::function< bool(uint16_t address, const T v)> &&user_write_lambda)
std::string format_value(int64_t value) const
SensorValueType value_type
void set_read_lambda(const std::function< T(uint16_t address)> &&user_read_lambda)
ServerRegister(uint16_t address, SensorValueType value_type, uint8_t register_count)
To bit_cast(const From &src)
Convert data between types, without aliasing issues or undefined behaviour.
uint16_t register_last_address