The adapter reads one JSON document from -c/--config, defaulting by platform: HOST → FILE,
GREENGRASS → GG_CONFIG, KUBERNETES → CONFIGMAP. Adapter settings live under component; the
sibling sections (tags, hierarchy, identity, topic, messaging, logging, metricEmission,
heartbeat) are standard edgecommons sections.
Routes southbound_health plus the Modbus operational metric families (ModbusConnection, ModbusInventory, ModbusPoll, ModbusPublish, ModbusCommand) to log/messaging/cloudwatch/prometheus. messaging auto-routes to the UNS metric class.
logging, heartbeat
optional
Standard edgecommons sections.
UNS topics are ecv1/{device}/{component}/{instance}/{class}[/channel] — built and validated by the
library from the identity above; there are no per-instance/per-signal topic templates.
Operational metric dimensions are deliberately low-cardinality for CloudWatch: instance,
connectionType, pollGroup, table, publishMode, verb, and result, plus library-provided
component dimensions. Signal names, addresses, endpoint URLs, unit ids, and raw error text are not metric
dimensions; they stay in data, events, logs, or command replies.
Stable instance id; the {instance} token of the data/evt topics and device.instance.
connection
object
Transport + endpoint (below).
defaults
object
Per-instance overrides of global.defaults.
publish
object
batchMs (buffer window).
writes
object
allow — an array of stable signal.ids (e.g. u1/holding/40/uint16) this instance may write. Checked before any device I/O; anything not listed is refused. Empty (the default) ⇒ read-only.
hierarchy.levels names the enterprise tree, deepest (the device) last; identity supplies every
level’s value except the last (the last is always the resolved thing name). The values become the
envelope identity.hier/path. With the default (["device"]) topics are
ecv1/{thing}/modbus-adapter/{instance}/...; topic.includeRoot: true (multi-site broker) prepends the
first level (site) after ecv1.