ESPHome 2026.4.0-dev
Loading...
Searching...
No Matches
esphome::modbus::helpers Namespace Reference

Enumerations

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

Functions

void number_to_payload (std::vector< uint16_t > &data, int64_t value, SensorValueType value_type)
 Convert float value to vector<uint16_t> suitable for sending.
 
int64_t payload_to_number (const std::vector< uint8_t > &data, SensorValueType sensor_value_type, uint8_t offset, uint32_t bitmask)
 Convert vector<uint8_t> response payload to number.
 
bool value_type_is_float (SensorValueType v)
 
ModbusFunctionCode modbus_register_read_function (ModbusRegisterType reg_type)
 
ModbusFunctionCode modbus_register_write_function (ModbusRegisterType reg_type)
 
uint8_t c_to_hex (char c)
 
uint8_t 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 word_from_hex_str (const std::string &value, uint8_t pos)
 Get a word from a hex string.
 
uint32_t dword_from_hex_str (const std::string &value, uint8_t pos)
 Get a dword from a hex string.
 
uint64_t qword_from_hex_str (const std::string &value, uint8_t pos)
 Get a qword from a hex string.
 
template<typename T >
get_data (const std::vector< uint8_t > &data, size_t buffer_offset)
 Extract data from modbus response buffer.
 
bool coil_from_vector (int coil, const std::vector< uint8_t > &data)
 Extract coil data from modbus response buffer Responses for coil are packed into bytes .
 
template<typename N >
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.
 
std::vector< uint16_t > float_to_payload (float value, SensorValueType value_type)
 

Enumeration Type Documentation

◆ SensorValueType

enum class esphome::modbus::helpers::SensorValueType : uint8_t
strong
Enumerator
RAW 
U_WORD 
U_DWORD 
S_WORD 
S_DWORD 
BIT 
U_DWORD_R 
S_DWORD_R 
U_QWORD 
S_QWORD 
U_QWORD_R 
S_QWORD_R 
FP32 
FP32_R 

Definition at line 12 of file modbus_helpers.h.

Function Documentation

◆ byte_from_hex_str()

uint8_t esphome::modbus::helpers::byte_from_hex_str ( const std::string & value,
uint8_t pos )
inline

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.

Parameters
valuestring containing hex encoding
positionoffset in bytes. Because each byte is encoded in 2 hex digits the position of the original byte in the hex string is byte_pos * 2
Returns
byte value

Definition at line 72 of file modbus_helpers.h.

◆ c_to_hex()

uint8_t esphome::modbus::helpers::c_to_hex ( char c)
inline

Definition at line 62 of file modbus_helpers.h.

◆ coil_from_vector()

bool esphome::modbus::helpers::coil_from_vector ( int coil,
const std::vector< uint8_t > & data )
inline

Extract coil data from modbus response buffer Responses for coil are packed into bytes .

coil 3 is bit 3 of the first response byte coil 9 is bit 2 of the second response byte

Parameters
coilnumber of the cil
datamodbus response buffer (uint8_t)
Returns
content of coil register

Definition at line 148 of file modbus_helpers.h.

◆ dword_from_hex_str()

uint32_t esphome::modbus::helpers::dword_from_hex_str ( const std::string & value,
uint8_t pos )
inline

Get a dword from a hex string.

Parameters
valuestring containing hex encoding
positionoffset in bytes. Because each byte is encoded in 2 hex digits the position of the original byte in the hex string is byte_pos * 2
Returns
dword value

Definition at line 94 of file modbus_helpers.h.

◆ float_to_payload()

std::vector< uint16_t > esphome::modbus::helpers::float_to_payload ( float value,
SensorValueType value_type )
inline

Definition at line 193 of file modbus_helpers.h.

◆ get_data()

template<typename T >
T esphome::modbus::helpers::get_data ( const std::vector< uint8_t > & data,
size_t buffer_offset )

Extract data from modbus response buffer.

Parameters
Tone of supported integer data types int_8,int_16,int_32,int_64
datamodbus response buffer (uint8_t)
buffer_offsetoffset in bytes.
Returns
value of type T extracted from buffer

Definition at line 115 of file modbus_helpers.h.

◆ mask_and_shift_by_rightbit()

template<typename N >
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.

the result is then shifted right by the position if the first right set bit in the mask Useful for modbus data where more than one value is packed in a 16 bit register Example: on Epever the "Length of night" register 0x9065 encodes values of the whole night length of time as D15 - D8 = hour, D7 - D0 = minute To get the hours use mask 0xFF00 and 0x00FF for the minute

Parameters
dataan integral value between 16 aand 32 bits,
bitmaskthe bitmask to apply

Definition at line 163 of file modbus_helpers.h.

◆ modbus_register_read_function()

ModbusFunctionCode esphome::modbus::helpers::modbus_register_read_function ( ModbusRegisterType reg_type)
inline

Definition at line 33 of file modbus_helpers.h.

◆ modbus_register_write_function()

ModbusFunctionCode esphome::modbus::helpers::modbus_register_write_function ( ModbusRegisterType reg_type)
inline

Definition at line 48 of file modbus_helpers.h.

◆ number_to_payload()

void esphome::modbus::helpers::number_to_payload ( std::vector< uint16_t > & data,
int64_t value,
SensorValueType value_type )

Convert float value to vector<uint16_t> suitable for sending.

Parameters
datatarget for payload
valuefloat value to convert
value_typedefines if 16/32 or FP32 is used
Returns
vector containing the modbus register words in correct order

Definition at line 8 of file modbus_helpers.cpp.

◆ payload_to_number()

int64_t esphome::modbus::helpers::payload_to_number ( const std::vector< uint8_t > & data,
SensorValueType sensor_value_type,
uint8_t offset,
uint32_t bitmask )

Convert vector<uint8_t> response payload to number.

Parameters
datapayload with the data to convert
sensor_value_typedefines if 16/32/64 bits or FP32 is used
offsetoffset to the data in data
bitmaskbitmask used for masking and shifting
Returns
64-bit number of the payload

Definition at line 46 of file modbus_helpers.cpp.

◆ qword_from_hex_str()

uint64_t esphome::modbus::helpers::qword_from_hex_str ( const std::string & value,
uint8_t pos )
inline

Get a qword from a hex string.

Parameters
valuestring containing hex encoding
positionoffset in bytes. Because each byte is encoded in 2 hex digits the position of the original byte in the hex string is byte_pos * 2
Returns
qword value

Definition at line 104 of file modbus_helpers.h.

◆ value_type_is_float()

bool esphome::modbus::helpers::value_type_is_float ( SensorValueType v)
inline

Definition at line 29 of file modbus_helpers.h.

◆ word_from_hex_str()

uint16_t esphome::modbus::helpers::word_from_hex_str ( const std::string & value,
uint8_t pos )
inline

Get a word from a hex string.

Parameters
valuestring containing hex encoding
positionoffset in bytes. Because each byte is encoded in 2 hex digits the position of the original byte in the hex string is byte_pos * 2
Returns
word value

Definition at line 84 of file modbus_helpers.h.