ESPHome 2026.8.0b4
Loading...
Searching...
No Matches
esphome::modbus_client::ModbusClientSendAction< Ts > Class Template Reference

modbus_client.send: fire a raw PDU (function code + data; the hub adds address and CRC). More...

#include <modbus_client.h>

Inheritance diagram for esphome::modbus_client::ModbusClientSendAction< Ts >:
esphome::modbus_client::ClientActionBase< Ts... > esphome::Action< Ts... > esphome::modbus::ModbusClientDevice

Public Member Functions

 TEMPLATABLE_VALUE (modbus::helpers::PduBuffer, pdu) Trigger< std
 
void play (const Ts &...x) override
 
void on_response (std::span< const uint8_t > request_pdu, std::span< const uint8_t > response_pdu) override
 
- Public Member Functions inherited from esphome::modbus_client::ClientActionBase< Ts... >
 TEMPLATABLE_VALUE (uint8_t, target_address) Trigger< std
 
Trigger< std::span< const uint8_t >, modbus::ExceptionCode > * get_error_trigger ()
 
Trigger< std::span< const uint8_t > > * get_no_response_trigger ()
 
Trigger< std::span< const uint8_t > > * get_not_sent_trigger ()
 
void set_retry (retry_func_t f)
 
void on_sent (std::span< const uint8_t > request_pdu) override
 The frame was written to the wire: fires once per transmission, before any reply, and never for a send that ended in on_not_sent.
 
void on_not_sent (std::span< const uint8_t > request_pdu) override
 Never reached the wire, from either of two sources.
 
void on_error (std::span< const uint8_t > request_pdu, modbus::ExceptionCode exception_code) override
 A Modbus exception reply.
 
bool on_no_response (std::span< const uint8_t > request_pdu) override
 No reply within send_wait_time.
 
void play_complex (const Ts &...x) override
 Stamp the templated device address before every play(): subclasses cannot forget it, and the hub routes each reply by device pointer, so a changed address never mis-routes earlier replies.
 
- Public Member Functions inherited from esphome::Action< Ts... >
virtual void stop_complex ()
 
virtual bool is_running ()
 Check if this or any of the following actions are currently running.
 
int num_running_total ()
 The total number of actions that are currently running in this plus any of the following actions in the chain.
 
- Public Member Functions inherited from esphome::modbus::ModbusClientDevice
 ModbusClientDevice ()=default
 
 ModbusClientDevice (ModbusClientHub *parent, uint8_t address)
 
virtual ~ModbusClientDevice ()
 
 ModbusClientDevice (const ModbusClientDevice &)=delete
 
ModbusClientDeviceoperator= (const ModbusClientDevice &)=delete
 
 ModbusClientDevice (ModbusClientDevice &&)=delete
 
ModbusClientDeviceoperator= (ModbusClientDevice &&)=delete
 
void set_parent (ModbusClientHub *parent)
 
void set_address (uint8_t address)
 
 ESPDEPRECATED ("Override on_not_sent() instead. Removed in 2027.2.0", "2026.8.0") virtual void on_modbus_not_sent()
 
 ESPDEPRECATED ("Override on_no_response() instead. Removed in 2027.2.0", "2026.8.0") virtual bool on_modbus_no_response()
 
virtual void on_read_registers (EntityType entity_type, uint16_t start_address, std::span< const uint16_t > registers, ResponseStatus status)
 High-level typed response callbacks, fired by the default on_response()/on_error() with arguments parsed from the request and response PDUs.
 
virtual void on_read_holding_registers (uint16_t start_address, std::span< const uint16_t > registers, ResponseStatus status)
 
virtual void on_read_input_registers (uint16_t start_address, std::span< const uint16_t > registers, ResponseStatus status)
 
virtual void on_read_bits (EntityType entity_type, uint16_t start_address, PackedBits bits, ResponseStatus status)
 Coil/discrete-input reads are delivered as a PackedBits view (bit 0 = the bit at start_address, bits.size() = the count requested).
 
virtual void on_read_coils (uint16_t start_address, PackedBits bits, ResponseStatus status)
 
virtual void on_read_discrete_inputs (uint16_t start_address, PackedBits bits, ResponseStatus status)
 
virtual void on_write_single_register (uint16_t address, uint16_t value, ResponseStatus status)
 Write acknowledgements.
 
virtual void on_write_single_coil (uint16_t address, bool value, ResponseStatus status)
 
virtual void on_write_multiple_registers (uint16_t start_address, std::span< const uint16_t > registers, ResponseStatus status)
 
virtual void on_write_multiple_coils (uint16_t start_address, PackedBits bits, ResponseStatus status)
 
virtual void on_custom_response (std::span< const uint8_t > request_pdu, std::span< const uint8_t > response_pdu, ResponseStatus status)
 Catch-all for custom function codes and anything that is not a standard-conformant transaction (see dispatch_response_()); on failure the response is empty and the exception code is in status.
 
 ESPDEPRECATED ("Use the typed read_*/write_* helpers or queue_pdu() instead. Removed in 2027.2.0", "2026.8.0") void send(uint8_t function
 

Protected Attributes

Trigger< std::span< const uint8_t >, std::span< const uint8_t > > response_trigger_
 
- Protected Attributes inherited from esphome::modbus_client::ClientActionBase< Ts... >
Trigger< std::span< const uint8_t > > sent_trigger_
 
Trigger< std::span< const uint8_t >, modbus::ExceptionCodeerror_trigger_
 
Trigger< std::span< const uint8_t > > no_response_trigger_
 
Trigger< std::span< const uint8_t > > not_sent_trigger_
 
retry_func_t retry_func_
 
- Protected Attributes inherited from esphome::Action< Ts... >
friend ActionList< Ts... >
 
Action< Ts... > * next_
 
int num_running_
 The number of instances of this sequence in the list of actions that is currently being executed.
 

Additional Inherited Members

- Public Types inherited from esphome::modbus_client::ClientActionBase< Ts... >
using retry_func_t
 The retry decision for on_no_response: given the request PDU, return true to have the hub re-queue the frame.
 
- Data Fields inherited from esphome::modbus::ModbusClientDevice
uint16_t start_address
 
uint16_t uint16_t number_of_entities
 
uint16_t uint16_t uint8_t payload_len = 0
 
uint16_t uint16_t uint8_t const uint8_t * payload
 
ModbusClientHubparent_ {nullptr}
 
uint8_t address_ {0}
 
bool custom_response_warned_ {false}
 
- Protected Member Functions inherited from esphome::modbus_client::ClientActionBase< Ts... >
void send_or_resolve_ (std::span< const uint8_t > pdu)
 The hub refuses some sends at the door with no callback (a duplicate write already pending, a full queue, or an empty PDU - which is how the create_*_pdu() builders reject out-of-spec input).
 
- Protected Member Functions inherited from esphome::Action< Ts... >
void play_next_ (const Ts &...x)
 
void play_next_tuple_ (const std::tuple< Ts... > &tuple, std::index_sequence< S... >)
 
void play_next_tuple_ (const std::tuple< Ts... > &tuple)
 
virtual void stop ()
 
void stop_next_ ()
 
bool is_running_next_ ()
 

Detailed Description

template<typename... Ts>
class esphome::modbus_client::ModbusClientSendAction< Ts >

modbus_client.send: fire a raw PDU (function code + data; the hub adds address and CRC).

The reply is delivered raw - on_response(request, response) - deliberately bypassing the typed dispatch, so non-standard/custom transactions pass through untouched. The PDU is a stack-allocated modbus::helpers::PduBuffer, so a pdu lambda can build one with the modbus::helpers::create_*_pdu() builders and return it directly (smaller builder results convert). A PduBuffer drops bytes past modbus::MAX_PDU_SIZE without reporting it (the hub's oversize check cannot fire - that limit is the capacity), so an over-long lambda-built PDU is silently truncated.

Definition at line 90 of file modbus_client.h.

Member Function Documentation

◆ on_response()

template<typename... Ts>
void esphome::modbus_client::ModbusClientSendAction< Ts >::on_response ( std::span< const uint8_t > request_pdu,
std::span< const uint8_t > response_pdu )
inlineoverridevirtual

Reimplemented from esphome::modbus::ModbusClientDevice.

Definition at line 100 of file modbus_client.h.

◆ play()

template<typename... Ts>
void esphome::modbus_client::ModbusClientSendAction< Ts >::play ( const Ts &... x)
inlineoverridevirtual

Implements esphome::Action< Ts... >.

Definition at line 98 of file modbus_client.h.

◆ TEMPLATABLE_VALUE()

template<typename... Ts>
esphome::modbus_client::ModbusClientSendAction< Ts >::TEMPLATABLE_VALUE ( modbus::helpers::PduBuffer ,
pdu  )
inline

Definition at line 92 of file modbus_client.h.

Field Documentation

◆ response_trigger_

template<typename... Ts>
Trigger<std::span<const uint8_t>, std::span<const uint8_t> > esphome::modbus_client::ModbusClientSendAction< Ts >::response_trigger_
protected

Definition at line 105 of file modbus_client.h.


The documentation for this class was generated from the following file: