|
ESPHome 2025.12.0-dev
|
Data Structures | |
| class | ModbusBinaryOutput |
| class | ModbusBinarySensor |
| class | ModbusCommandItem |
| class | ModbusCommandSentTrigger |
| class | ModbusController |
| Modbus controller class. More... | |
| class | ModbusFloatOutput |
| class | ModbusNumber |
| class | ModbusOfflineTrigger |
| class | ModbusOnlineTrigger |
| class | ModbusSelect |
| class | ModbusSensor |
| class | ModbusSwitch |
| class | ModbusTextSensor |
| struct | RegisterRange |
| class | SensorItem |
| class | SensorItemsComparator |
| struct | ServerCourtesyResponse |
| class | ServerRegister |
Typedefs | |
| using | SensorSet = std::set<SensorItem *, SensorItemsComparator> |
| using | value_to_data_t = std::function<float>(float) |
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 } |
| enum class | RawEncoding { NONE = 0 , HEXBYTES = 1 , COMMA = 2 , ANSI = 3 } |
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 hex_byte_from_str("1122",1) returns uint_8 value 0x22 == 34 hex_byte_from_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 > | |
| 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 > | |
| 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. | |
| float | payload_to_float (const std::vector< uint8_t > &data, const SensorItem &item) |
| Convert vector<uint8_t> response payload to float. | |
| std::vector< uint16_t > | float_to_payload (float value, SensorValueType value_type) |
| using esphome::modbus_controller::SensorSet = std::set<SensorItem *, SensorItemsComparator> |
Definition at line 333 of file modbus_controller.h.
| using esphome::modbus_controller::value_to_data_t = std::function<float>(float) |
Definition at line 12 of file modbus_number.h.
|
strong |
| Enumerator | |
|---|---|
| NONE | |
| HEXBYTES | |
| COMMA | |
| ANSI | |
Definition at line 12 of file modbus_textsensor.h.
|
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 23 of file modbus_controller.h.
|
inline |
Get a byte from a hex string hex_byte_from_str("1122",1) returns uint_8 value 0x22 == 34 hex_byte_from_str("1122",0) returns 0x11.
| value | string containing hex encoding |
| position | offset 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 |
Definition at line 91 of file modbus_controller.h.
|
inline |
Definition at line 81 of file modbus_controller.h.
|
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
| coil | number of the cil |
| data | modbus response buffer (uint8_t) |
Definition at line 160 of file modbus_controller.h.
|
inline |
Get a dword from a hex string.
| value | string containing hex encoding |
| position | offset 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 |
Definition at line 113 of file modbus_controller.h.
|
inline |
Definition at line 584 of file modbus_controller.h.
| T esphome::modbus_controller::get_data | ( | const std::vector< uint8_t > & | data, |
| size_t | buffer_offset ) |
Extract data from modbus response buffer.
| T | one of supported integer data types int_8,int_16,int_32,int_64 |
| data | modbus response buffer (uint8_t) |
| buffer_offset | offset in bytes. |
Definition at line 134 of file modbus_controller.h.
| N esphome::modbus_controller::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
| data | an integral value between 16 aand 32 bits, |
| bitmask | the bitmask to apply |
Definition at line 175 of file modbus_controller.h.
|
inline |
Definition at line 44 of file modbus_controller.h.
|
inline |
Definition at line 63 of file modbus_controller.h.
| void esphome::modbus_controller::number_to_payload | ( | std::vector< uint16_t > & | data, |
| int64_t | value, | ||
| SensorValueType | value_type ) |
Convert float value to vector<uint16_t> suitable for sending.
| data | target for payload |
| value | float value to convert |
| value_type | defines if 16/32 or FP32 is used |
Definition at line 690 of file modbus_controller.cpp.
|
inline |
Convert vector<uint8_t> response payload to float.
| data | payload with data |
| item | SensorItem object |
Definition at line 571 of file modbus_controller.h.
| int64_t esphome::modbus_controller::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.
| data | payload with the data to convert |
| sensor_value_type | defines if 16/32/64 bits or FP32 is used |
| offset | offset to the data in data |
| bitmask | bitmask used for masking and shifting |
Definition at line 729 of file modbus_controller.cpp.
|
inline |
Get a qword from a hex string.
| value | string containing hex encoding |
| position | offset 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 |
Definition at line 123 of file modbus_controller.h.
|
inline |
Definition at line 40 of file modbus_controller.h.
|
inline |
Get a word from a hex string.
| value | string containing hex encoding |
| position | offset 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 |
Definition at line 103 of file modbus_controller.h.