## --- "request" configuration style --- ## Per request definition ## ## Define a request sent to the device ## Multiple of those requests can be defined. Data will be collated into metrics at the end of data collection. [[inputs.modbus.request]] ## ID of the modbus slave device to query. ## If you need to query multiple slave-devices, create several "request" definitions. slave_id = 1 ## Byte order of the data. ## |---ABCD -- Big Endian (Motorola) ## |---DCBA -- Little Endian (Intel) ## |---BADC -- Big Endian with byte swap ## |---CDAB -- Little Endian with byte swap byte_order = "ABCD" ## Type of the register for the request ## Can be "coil", "discrete", "holding" or "input" register = "coil" ## Name of the measurement. ## Can be overridden by the individual field definitions. Defaults to "modbus" # measurement = "modbus" ## Request optimization algorithm. ## |---none -- Do not perform any optimization and use the given layout(default) ## |---shrink -- Shrink requests to actually requested fields ## | by stripping leading and trailing omits ## |---rearrange -- Rearrange request boundaries within consecutive address ranges ## | to reduce the number of requested registers by keeping ## | the number of requests. ## |---max_insert -- Rearrange request keeping the number of extra fields below the value ## provided in "optimization_max_register_fill". It is not necessary to define 'omitted' ## fields as the optimisation will add such field only where needed. # optimization = "none" ## Maximum number register the optimizer is allowed to insert between two fields to ## save requests. ## This option is only used for the 'max_insert' optimization strategy. ## NOTE: All omitted fields are ignored, so this option denotes the effective hole ## size to fill. # optimization_max_register_fill = 50 ## Field definitions ## Analog Variables, Input Registers and Holding Registers ## address - address of the register to query. For coil and discrete inputs this is the bit address. ## name *1 - field name ## type *1,2 - type of the modbus field, can be ## BIT (single bit of a register) ## INT8L, INT8H, UINT8L, UINT8H (low and high byte variants) ## INT16, UINT16, INT32, UINT32, INT64, UINT64 and ## FLOAT16, FLOAT32, FLOAT64 (IEEE 754 binary representation) ## STRING (byte-sequence converted to string) ## length *1,2 - (optional) number of registers, ONLY valid for STRING type ## bit *1,2 - (optional) bit of the register, ONLY valid for BIT type ## scale *1,2,4 - (optional) factor to scale the variable with ## output *1,3,4 - (optional) type of resulting field, can be INT64, UINT64 or FLOAT64. ## Defaults to FLOAT64 for numeric fields if "scale" is provided. ## Otherwise the input "type" class is used (e.g. INT* -> INT64). ## measurement *1 - (optional) measurement name, defaults to the setting of the request ## omit - (optional) omit this field. Useful to leave out single values when querying many registers ## with a single request. Defaults to "false". ## ## *1: These fields are ignored if field is omitted ("omit"=true) ## *2: These fields are ignored for both "coil" and "discrete"-input type of registers. ## *3: This field can only be "UINT16" or "BOOL" if specified for both "coil" ## and "discrete"-input type of registers. By default the fields are ## output as zero or one in UINT16 format unless "BOOL" is used. ## *4: These fields cannot be used with "STRING"-type fields. ## Coil / discrete input example fields = [ { address=0, name="motor1_run" }, { address=1, name="jog", measurement="motor" }, { address=2, name="motor1_stop", omit=true }, { address=3, name="motor1_overheating", output="BOOL" }, { address=4, name="firmware", type="STRING", length=8 }, ] [inputs.modbus.request.tags] machine = "impresser" location = "main building" [[inputs.modbus.request]] ## Holding example ## All of those examples will result in FLOAT64 field outputs slave_id = 1 byte_order = "DCBA" register = "holding" fields = [ { address=0, name="voltage", type="INT16", scale=0.1 }, { address=1, name="current", type="INT32", scale=0.001 }, { address=3, name="power", type="UINT32", omit=true }, { address=5, name="energy", type="FLOAT32", scale=0.001, measurement="W" }, { address=7, name="frequency", type="UINT32", scale=0.1 }, { address=8, name="power_factor", type="INT64", scale=0.01 }, ] [inputs.modbus.request.tags] machine = "impresser" location = "main building" [[inputs.modbus.request]] ## Input example with type conversions slave_id = 1 byte_order = "ABCD" register = "input" fields = [ { address=0, name="rpm", type="INT16" }, # will result in INT64 field { address=1, name="temperature", type="INT16", scale=0.1 }, # will result in FLOAT64 field { address=2, name="force", type="INT32", output="FLOAT64" }, # will result in FLOAT64 field { address=4, name="hours", type="UINT32" }, # will result in UIN64 field ] [inputs.modbus.request.tags] machine = "impresser" location = "main building"