ESPHome 2026.8.0-dev
Loading...
Searching...
No Matches
modbus_helpers.h File Reference

Go to the source code of this file.

Namespaces

namespace  esphome
 
namespace  esphome::modbus
 
namespace  esphome::modbus::helpers
 

Enumerations

enum class  esphome::modbus::helpers::SensorValueType : uint8_t {
  esphome::modbus::helpers::RAW = 0x00 , esphome::modbus::helpers::U_WORD = 0x1 , esphome::modbus::helpers::U_DWORD = 0x2 , esphome::modbus::helpers::S_WORD = 0x3 ,
  esphome::modbus::helpers::S_DWORD = 0x4 , esphome::modbus::helpers::BIT = 0x5 , esphome::modbus::helpers::U_DWORD_R = 0x6 , esphome::modbus::helpers::S_DWORD_R = 0x7 ,
  esphome::modbus::helpers::U_QWORD = 0x8 , esphome::modbus::helpers::S_QWORD = 0x9 , esphome::modbus::helpers::U_QWORD_R = 0xA , esphome::modbus::helpers::S_QWORD_R = 0xB ,
  esphome::modbus::helpers::FP32 = 0xC , esphome::modbus::helpers::FP32_R = 0xD
}
 

Functions

bool esphome::modbus::helpers::is_function_code_read (uint8_t function_code)
 
bool esphome::modbus::helpers::is_function_code_write (uint8_t function_code)
 
bool esphome::modbus::helpers::is_function_code_exception (uint8_t function_code)
 
bool esphome::modbus::helpers::is_function_code_custom (uint8_t function_code)
 
uint16_t esphome::modbus::helpers::server_frame_length (const uint8_t *frame, size_t size)
 
uint16_t esphome::modbus::helpers::client_frame_length (const uint8_t *frame, size_t size)
 
uint8_t esphome::modbus::helpers::server_frame_data_offset (const uint8_t *frame, size_t size)
 
uint8_t esphome::modbus::helpers::client_frame_data_offset (const uint8_t *, size_t)
 
bool esphome::modbus::helpers::value_type_is_float (SensorValueType v)
 
ModbusFunctionCode esphome::modbus::helpers::modbus_register_read_function (ModbusRegisterType reg_type)
 
ModbusFunctionCode esphome::modbus::helpers::modbus_register_write_function (ModbusRegisterType reg_type, bool multiple=false)
 
uint8_t esphome::modbus::helpers::c_to_hex (char c)
 
uint8_t esphome::modbus::helpers::byte_from_hex_str (const std::string &value, uint8_t pos)
 Get a byte from a hex string byte_from_hex_str("1122", 1) returns uint_8 value 0x22 == 34 byte_from_hex_str("1122", 0) returns 0x11.
 
uint16_t esphome::modbus::helpers::word_from_hex_str (const std::string &value, uint8_t pos)
 Get a word from a hex string.
 
uint32_t esphome::modbus::helpers::dword_from_hex_str (const std::string &value, uint8_t pos)
 Get a dword from a hex string.
 
uint64_t esphome::modbus::helpers::qword_from_hex_str (const std::string &value, uint8_t pos)
 Get a qword from a hex string.
 
template<typename T >
esphome::modbus::helpers::get_data (const uint8_t *data, size_t buffer_offset)
 Extract data from modbus response buffer.
 
template<typename T >
esphome::modbus::helpers::get_data (const std::vector< uint8_t > &data, size_t buffer_offset)
 
bool esphome::modbus::helpers::bit_from_packed (int bit, std::span< const uint8_t > data)
 Extract coil data from modbus response buffer Responses for coil are packed into bytes .
 
 esphome::modbus::helpers::ESPDEPRECATED ("Use bit_from_packed() instead. Removed in 2027.2.0", "2026.8.0") inline bool coil_from_vector(int coil
 
template<typename N >
esphome::modbus::helpers::mask_and_shift_by_rightbit (N data, uint32_t mask)
 Extract bits from value and shift right according to the bitmask if the bitmask is 0x00F0 we want the values frrom bit 5 - 8.
 
void esphome::modbus::helpers::log_unsupported_value_type (SensorValueType value_type)
 
template<typename Container >
void esphome::modbus::helpers::number_to_payload (Container &data, int64_t value, SensorValueType value_type)
 Append the Modbus register words for value to data.
 
std::optional< int64_t > esphome::modbus::helpers::payload_to_number (const uint8_t *data, size_t size, SensorValueType sensor_value_type, uint8_t offset, uint32_t bitmask)
 Convert a raw response payload to a number.
 
std::optional< int64_t > esphome::modbus::helpers::payload_to_number (std::span< const uint8_t > data, SensorValueType sensor_value_type, uint8_t offset, uint32_t bitmask)
 Convert a response payload span to number; std::nullopt if the payload is too short.
 
 esphome::modbus::helpers::ESPDEPRECATED ("Use the std::span overload returning std::optional<int64_t> instead. Removed in 2027.2.0", "2026.8.0") inline int64_t payload_to_number(const std
 
std::optional< int64_t > esphome::modbus::helpers::registers_to_number (const uint16_t *registers, size_t count, SensorValueType sensor_value_type)
 Reconstruct a number from register words (host byte order).
 
StaticVector< uint8_t, MAX_PDU_SIZE > esphome::modbus::helpers::create_client_pdu (ModbusFunctionCode function_code, uint16_t start_address, uint16_t number_of_entities, const uint8_t *values=nullptr, size_t values_len=0)
 Create a modbus clinet pdu for reading/writing single/multiple coils/register/inputs.
 
std::vector< uint16_t > esphome::modbus::helpers::float_to_payload (float value, SensorValueType value_type)
 

Variables

std::span< const uint8_t > esphome::modbus::helpers::data { return bit_from_packed(coil, data)