Skip to content

modbus_rtu collector

modbus_rtu collector performs Modbus RTU requests over the serial line to collect performance data.


Parameter Type Default Description
id String Collector's ID. Must be unique per agent instance. Will be returned along with the metrics.
type String Must be modbus_rtu
service String Equal to id Service id for output metrics
interval Integer Repetition interval in seconds
labels Array of Strings List of additional labels. Will be returned along with metrics
serial_path String Path to the serial port device (i.e. /dev/ttyS1)
slave Integer Modbus RTU slave id
baud_rate Integer Serial port speed
data_bits Integer Serial port data bits: 5, 6, 7 or 8
parity String none Serial port parity, either none, even or odd
stop_bits Integer Serial port stop bits, either 1 or 2
register Integer Starting register of modbus request, zero-based
register_type String holding Modbus request type. Either holding, input or coil
format String Expected response format. See Response format for details
timeout_ms Integer 5000 Request timeout, ms.

Check address notation

Take note the starting register address is zero-based, while vendors can document the registers starting from 1. Refer to the vendor documentation and subtract 1 when necessary.

Response Format

Modbus' response is as an array of 16-bit integers. Actual data encoding should be set as format parameter. Some encodings may require reading 2 or 4 adjacent registers.

Format Count Description
i16_be 1 16-bit signed integer, big-endian.
u16_be 1 16-bit unsigned integer, big-endian.
i32_be 2 32-bit signed integer, big-endian
i32_le 2 32-bit signed integer, low-endian
i32_bs 2 32-bit signed integer, big-endian, swapped
i32_ls 2 32-bit signed integer, low-endian, swapped
u32_be 2 32-bit unsigned integer, big-endian
u32_le 2 32-bit unsigned integer, low-endian
u32_bs 2 32-bit unsigned integer, big-endian, swapped
u32_ls 2 32-bit unsigned integer, low-endian, swapped
f32_be 2 32-bit floating point, big-endian
f32_le 2 32-bit floating point, low-endian
f32_bs 2 32-bit floating point, big-endian, swapped
f32_ls 2 32-bit floating point, low-endian, swapped

Big/Low/Swapped endian

32-bit integer 0x01020304 stored as a sequence of 4 octets. 4 different approaches widely used between modbus devices:

Format 1 2 3 4
Big-endian (be) 01 02 03 04
Low-endian (le) 04 03 02 01
Big-endian, swapped (bs) 02 01 04 03
Low-endian, swapped (ls) 03 04 01 02

Collected Metrics

Metric Metric Type Platform Description
ts All ISO 8601 Timestamp
collector All Collector Id
labels All List of labels
value All Measured value

Compilation Features

Enable modbus_rtu feature during compiling the agent (Enabled by default).