Skip to content
AI-driventedge-dot is developed largely by AI coding agents, and it is alpha software. Check what it does before you rely on it, and report what you find.

Configuration file

A connector is configured by one TOML file per protocol in /etc/tedge/plugins/ot/. This page is generated from config.schema.json, the schema both implementations are tested against. Protocol-specific objects (connection, protocol_address, a point’s address) are described in each connector reference.

One per file. Which protocol module runs, and the defaults every device inherits.

KeyTypeDefaultDescription
protocol (required)string
service_namestringConnector service name; defaults to ‘tedge-dot-<protocol>’. It addresses the connector’s management commands (te/device/main/service/<service>/ot/cmd/<verb>/<id>), so it must be unique on the broker and cannot be changed by set-config.
poll_intervalduration2sDuration string, e.g. ‘500ms’, ‘2s’, ‘5m’.
sampling_intervaldurationHow often the source samples a point delivered by push (§3.1), e.g. an OPC UA monitored item’s sampling interval. Resolved point, then device, then connector; with none set, the point’s effective poll_interval. An explicit sampling_interval at any level wins over every poll_interval. Polled points ignore it. “0” asks for the source’s fastest rate.
operation_timeoutstring30sUpper bound on a single protocol-module call (read batch, write, connect, subscribe). A module that never returns — what a half-open socket produces: no answer, no error, no reset — would otherwise block the connector’s loop forever, stopping samples, health and link status with nothing logged. The runtime turns the bound into an ordinary transport error, so the usual degraded-link and reconnect handling applies.
stall_timeoutstring120sHow long the connector’s loop may make no progress before it is treated as wedged and restarted (the supervisor cancels and re-runs it; the MQTT last will marks the service down). Must exceed operation_timeout; “0” disables the watchdog.
log_levelerror | warn | info | debug | traceinfo
point_library_patharray of stringDirectories searched for the point libraries devices name in points_from (§3.4), most specific first. REPLACES the default path (/etc/tedge/plugins/ot/points.d then /usr/share/tedge-dot/points.d), so it must name at least one directory; omit the key to use the default. Relative entries resolve against this configuration file’s own directory.
reportreport tableDefault reporting policy for every point of this connector (§5.3).
outputsamples | measurementssamplesWhat readings are published as (§5.5): one sample envelope each (default), or batched thin-edge measurements published by the runtime, with samples only for the points flows read.
measurementtableMeasurement naming in measurement output (§5.5), as the ot-measurement flow’s parameters of the same names. A point’s meta.measurement.group/series win over group/series.
batchbatch tableDefault grouping policy in measurement output for every point of this connector (§5.5).
max_inflightinteger4Requests in flight to one endpoint, unless a device sets its own (§5.6).
max_inflight_totalinteger32Requests in flight across all endpoints (§5.6).

The thin-edge.io broker the connector publishes to. The read/write CLI ignores it.

KeyTypeDefaultDescription
hoststring127.0.0.1
portinteger1883

Protocol-specific shared connection defaults. Shape defined by the connector spec.

One per device. The address is protocol-specific; see the connector reference for its shape.

KeyTypeDefaultDescription
name (required)string
typestringThe device type this instance is one of (§3.1): what its point list describes, not where it is. Inherited from the first point library named in points_from that declares a [library] type (§3.4) when absent here. It qualifies the device’s parameter set names (§5.2), which are tenant-wide identifiers in the cloud, and is echoed in every sample and on the link status.
protocol_addresstableProtocol-specific device address. Shape defined by the connector spec.
enabledbooleantruefalse takes the device out of the configuration (§3.3): it is not connected, polled, described or answered for, and nothing else about it is read — not even its point libraries. The definition stays in the file (and a management command can switch it back on); its name still counts for uniqueness.
poll_intervaldurationDuration string, e.g. ‘500ms’, ‘2s’, ‘5m’.
sampling_intervaldurationHow often the source samples a point delivered by push (§3.1), e.g. an OPC UA monitored item’s sampling interval. Resolved point, then device, then connector; with none set, the point’s effective poll_interval. An explicit sampling_interval at any level wins over every poll_interval. Polled points ignore it. “0” asks for the source’s fastest rate.
default_moderaw | typed
points_fromarray of stringPoint libraries this device inherits its points from, in order (§3.4). An entry containing ’/’ or ending in ‘.toml’ is a path (relative ones resolve against this configuration file’s directory); anything else is a name, resolved as <dir>/<protocol>/<name>.toml along the library search path. Libraries are applied in order and then the device’s own inline points, with a repeated id patching what came before: meta and transform merge key by key, every other field replaces.
pointarray of point table
reportreport tableDefault reporting policy for this device’s points (§5.3); merged over [connector] report.
batchbatch tableDefault grouping policy in measurement output for this device’s points (§5.5).
max_inflightinteger4Requests in flight to this device’s endpoint (§5.6); devices sharing an endpoint use the smallest value among them.

One per data point, on a device or in a point library.

KeyTypeDefaultDescription
id (required)string
moderaw | typed
datatypebool | int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | float32 | float64 | string | bytes
endiannessbig | littlebig
word_orderbig | littlebig
poll_intervaldurationDuration string, e.g. ‘500ms’, ‘2s’, ‘5m’.
sampling_intervaldurationHow often the source samples a point delivered by push (§3.1), e.g. an OPC UA monitored item’s sampling interval. Resolved point, then device, then connector; with none set, the point’s effective poll_interval. An explicit sampling_interval at any level wins over every poll_interval. Polled points ignore it. “0” asks for the source’s fastest rate.
accessread | write | read_write | call_methodreadWhat the connector may do with the point (§3.1): read it, write it, both, or call it with the call-method verb (§6.6). Points that cannot be read (write, call_method) are never polled, subscribed or sampled.
unitstring
namestringShort human-readable label for this signal, for wherever a name is displayed instead of the id — which is a topic segment and a parameter-set key, so it stays a plain identifier. Feeds a parameter’s DTM title and the capability descriptor’s point_labels (§7). Not echoed per sample.
descriptionstringLonger human-readable explanation of the signal. Feeds a parameter’s DTM description and the capability descriptor’s point_labels (§7). Not echoed per sample; meta.parameter.description overrides it for the parameter UI.
addresstableProtocol-specific point address. Shape defined by the connector spec.
transformtableLinear engineering transform applied by the connector after decode: (value * multiplier * 10^decimal_shift / divisor) + offset.
reportreport tableThis point’s reporting policy (§5.3); merged over the device’s and [connector]‘s report.
batchbatch tableThis point’s grouping policy in measurement output (§5.5); merged over the device’s and [connector]‘s batch.
mapmap tableThis point’s value map (§4.3): state codes to labels, ranges with a catch-all, numeric text to numbers. The samples carry the mapped value (and the unmapped one as source_value); writes carry it too and are mapped back.
metatableFree-form signal metadata, echoed verbatim as ‘meta’ in every sample envelope for this point. Never interpreted by the connector; flows read it for per-signal behaviour (measurement naming, alarms, events, parameters) and consumers may carry arbitrary descriptive fields. Reporting behaviour (on change, deadband, rate limit, heartbeat) belongs in ‘report’, not here.
subscribebooleantrueSet false to keep this point on the polling schedule even when the connector supports push delivery (subscriptions).
samplebooleanIn measurement output (§5.5): true keeps publishing this point’s samples for a consumer other than the flows; false publishes none even when a flow would read them. Unset, the runtime decides (alarm, event and parameter points, and writable points, keep their samples).
enabledbooleantruefalse leaves the point out of the device (§3.3): it is not read, subscribed, written or described. Applied to the resolved point (§3.4), so an inline { id, enabled = false } switches off a point a library supplies, and a later definition can switch it back on. A disabled point need not be complete, but what it declares is still checked for shape.

Reporting policy (report by exception, contract §5.3), applied by the SDK runtime. Merged key by key: [connector] report, then the device’s, then the point’s in a point library, then the point’s in the configuration. A duration of “0”, on_change = false and deadband = 0 switch an inherited setting off.

See Reducing data volume and try it in the config workbench.

KeyTypeDefaultDescription
on_changebooleanPublish only when the value differs from the last published one.
deadbandnumber or stringMinimum change from the last published value needed to publish: an absolute amount in the point’s (transformed) units, or “<p>%” of the last published value’s magnitude. Implies on_change; numeric values only.
min_intervaldurationPublish at most once per interval; a change arriving sooner is held and published when the interval ends.
max_intervaldurationHeartbeat: publish the next fresh reading once this long has passed since the last publish, even if unchanged. Pushed points are read on demand; points that cannot be read on demand (traps, CAN frames) get none. Must exceed min_interval when both are set in the same table.
debouncedurationPublish a changed value only once it has stayed the same (within the deadband, if set) for this long. Implies on_change.
{
"on_change": true
}
{
"deadband": 0.5,
"min_interval": "10s"
}
{
"deadband": "2%"
}
{
"max_interval": "30m"
}

Value map (contract §4.3), applied by the SDK runtime after transform on reads and reversed before the inverse transform on writes. The first matching case wins; an unmatched value takes default, else the as conversion, else the sample is bad. Every output (each to, default, the as type) is of one type, the sample’s value_repr. A later definition (§3.4) replaces the whole map; an empty table removes it. Not allowed on raw-mode or bytes points.

See Mapping values.

KeyTypeDefaultDescription
casesarray of any or any or anyOrdered cases; the first that matches gives the output.
defaultnumber or string or booleanCatch-all output for a value no case matches. Never writable.
asnumber | string | boolConvert a value no case matches to this type (numeric text to a number, a number to its shortest text, …); reversed on writes. Cannot be combined with default.
{
"cases": [
{
"eq": 0,
"to": "stopped"
},
{
"eq": [
1,
5
],
"to": "running"
},
{
"min": 10,
"max": 19,
"to": "warning"
},
{
"min": 20,
"to": "fault",
"write": 20
}
],
"default": "unknown"
}
{
"as": "number"
}