modbus: proposal for a Modbus TCP input connector (community)
What
A community-supported modbus input that polls a Modbus TCP device on a fixed interval and emits one structured message per poll.
Why
Redpanda Connect currently has ~80 inputs and none of them speak an industrial protocol. Modbus TCP is the lowest common denominator of plant devices — PLCs, power meters, sensor gateways, remote IO — and today anyone bridging that data into a Redpanda pipeline needs an intermediary hop (Node-RED, an edge gateway, or a custom script). A native input removes that hop for the most common industrial case and opens the industrial/OT segment for Connect.
Proposed scope
- Input only, Modbus TCP (
tcp://) and Modbus TCP+TLS (tcp+tls://). - Config:
address,unit_id,timeout,poll_interval,byte_order,word_order, and a typedpointslist — each point names a Modbus table (coil,discrete_input,input_register,holding_register), a zero-based address, and a decode type (bool,int16/uint16,int32/uint32,int64/uint64,float32/float64). - One message per poll: a JSON object keyed by point name, with
modbus_address/modbus_unit_idmetadata. - Config lint rules reject type/table mismatches (e.g.
boolon a register) and duplicate point names.
Explicitly out of scope
Possible follow-ups, proposed separately per CONTRIBUTING §3.1.1: an output (writing coils/registers), Modbus RTU over serial, automatic read coalescing of contiguous registers, and per-point error tolerance.
Client library
Per CONTRIBUTING §4: github.com/simonvetter/modbus v1.6.4 — MIT, actively maintained (last release July 2026), v1+, TCP/TLS/RTU support, and it includes a Modbus server, which lets the integration tests run fully in-process with no Docker dependency.
Status
Implementation and tests are drafted and passing on aradhsai/connect:modbus-input — config parse/lint table tests plus end-to-end poll, protocol-exception, and reconnect tests against an in-process Modbus server. Happy to open the PR whenever the scope is agreed, and to adjust shape and naming to fit the fleet.
Source: redpanda-data/connect