Skip to content

Driver Capability Matrix ​

This page gives an at-a-glance view of all 36 drivers in IoT DC3 — their protocol category, read / write / subscribe capabilities, and implementation status — so you can match a protocol to your needs fast. Each row links to that driver's own page, where attributes, polling cadence, and a minimal onboarding example are spelled out.

Read / write / subscribe reflect each driver's actual current implementation: "✓" means the capability is in place, "—" means the driver does not implement that direction, deliberately does not offer it by design, or is still a skeleton — code is the source of truth (see the note after the tables). Subscribe / report means the driver passively receives device pushes (listens on a port, network callbacks, device registration, etc.), as opposed to periodic polling.

The "Status" column summarizes each driver's overall maturity:

  • Complete: read / write / subscribe are fully implemented per the protocol design and ready for production onboarding.
  • Usable: the core path works, but there are local gaps (e.g. some data types, Observe, or health hooks); see the Notes and the driver page.
  • Skeleton: protocol framing or transport is not yet implemented; currently serves as a structural reference only and cannot collect from real devices.

Industrial Bus / PLC ​

These drivers act as masters (clients) that actively connect to the device, poll values per Point and write via commands; they do not listen for pushes. ethernet-ip reads and writes tags via CIP unconnected messaging (no ForwardOpen connection-oriented I/O).

Driver (dc3.driver.code)CategoryReadWriteSubscribe/ReportStatusNotes
Modbus TCP (ModbusTcpDriver)Industrial Bus/PLC✓✓—CompleteEthernet Modbus master
Modbus RTU (ModbusRtuDriver)Industrial Bus/PLC✓✓—CompleteSerial Modbus master
OPC UA (OpcUaDriver)Industrial Bus/PLC✓✓—CompleteOPC Unified Architecture client
OPC DA (OpcDaDriver)Industrial Bus/PLC✓✓—CompleteClassic OPC Data Access (DCOM)
S7 (PlcS7Driver)Industrial Bus/PLC✓✓—CompleteSiemens PLC
MELSEC (MelsecDriver)Industrial Bus/PLC✓✓—CompleteMitsubishi PLC (MC protocol)
FINS (FinsDriver)Industrial Bus/PLC✓✓—UsableOmron PLC, supports 16/32-bit ints, float, string, and BCD; main framing defects — see the driver page warnings
EtherNet/IP (EthernetIpDriver)Industrial Bus/PLC✓✓—UsableRockwell / CIP, unconnected tag read/write

SCADA / Power / Metering ​

Building, power, and metering protocols. bacnet-ip and snmp read and write actively; sl651 is hydrology telemetry — it opens a TCP server and passively receives reports, hence subscribe only; iec104 and dlms are currently skeletons.

Driver (dc3.driver.code)CategoryReadWriteSubscribe/ReportStatusNotes
BACnet/IP (BacnetIpDriver)SCADA/Power/Metering✓✓—CompleteBuilding automation
IEC 104 (Iec104Driver)SCADA/Power/Metering———SkeletonPower SCADA, protocol layer pending
DLMS (DlmsDriver)SCADA/Power/Metering———SkeletonSmart meters, transport pending
SL651 (Sl651Driver)SCADA/Power/Metering——✓CompleteHydrology telemetry, TCP server ingest
SNMP (SnmpDriver)SCADA/Power/Metering✓✓—CompleteNetwork device monitoring
DL/T645 (Dlt645Driver)SCADA/Power/Metering✓✓—CompleteElectricity meter (DL/T645-2007)
DNP3 (Dnp3Driver)SCADA/Power/Metering✓✓—UsableUtility automation, native stack implemented
IEC 61850 (Iec61850Driver)SCADA/Power/Metering✓✓—CompleteSubstation automation (MMS client)
KNX (KnxDriver)SCADA/Power/Metering✓✓—CompleteBuilding automation bus (Calimero)
M-Bus (MbusDriver)SCADA/Power/Metering✓✓—CompleteMetering bus (EN 13757), self-built framing

IoT / Wireless ​

IoT and wireless drivers. mqtt is publish/subscribe — values arrive passively via subscription (no active read), commands can be sent; lwm2m (embedded server, receives device registration and notifications) has read and write in place but its Observe/subscribe is not yet implemented; coap, http, and ble are request-response active read/write (coap Observe not implemented); zigbee reads and writes ZCL attributes through a serial coordinator but only listens for coordinator network state — not node join or attribute reports; can is currently a skeleton, backed by can-utils.

Driver (dc3.driver.code)CategoryReadWriteSubscribe/ReportStatusNotes
MQTT (MqttDriver)IoT/Wireless—✓✓UsablePublish/subscribe, values via subscription; initial() hook is skeleton
CoAP (CoapDriver)IoT/Wireless✓✓—UsableRESTful for constrained devices, Observe not implemented
LwM2M (Lwm2mDriver)IoT/Wireless✓✓—UsableEmbedded server, read/write ready, Observe not implemented
HTTP (HttpDriver)IoT/Wireless✓✓—CompleteGeneric HTTP polling
BLE (BleDriver)IoT/Wireless✓✓—UsableBluetooth Low Energy GATT; requires host Bluetooth adapter and TinyB
Zigbee (ZigbeeDriver)IoT/Wireless✓✓—UsableRead/write via serial coordinator; subscribe (join/reports) not implemented
CAN (CanDriver)IoT/Wireless✓——SkeletonController Area Network, backed by can-utils
LoRaWAN (LorawanDriver)IoT/Wireless✓✓✓UsableChirpStack MQTT uplink ingest, Cayenne LPP, downlink publish
Kafka (KafkaDriver)IoT/Wireless✓✓✓UsableStreaming source, consume + produce

Serial / Generic Network ​

Generic pass-through drivers that frame requests from a command template, sending and receiving actively without listening.

Driver (dc3.driver.code)CategoryReadWriteSubscribe/ReportStatusNotes
Serial (SerialDriver)Serial/Generic Network✓✓—CompleteGeneric serial pass-through
TCP/UDP (TcpUdpDriver) (raw)Serial/Generic Network✓✓—CompleteGeneric socket pass-through

Database ​

Treat a table as a data source: reads go through executeQuery, writes through executeUpdate, driven by the SQL template on each Point; no change subscription.

Driver (dc3.driver.code)CategoryReadWriteSubscribe/ReportStatusNotes
MySQL (MysqlDriver)Database✓✓—CompleteRead points from tables
PostgreSQL (PostgresqlDriver)Database✓✓—CompleteRead points from tables
Oracle (OracleDriver)Database✓✓—CompleteRead points from tables
SQL Server (SqlserverDriver)Database✓✓—CompleteRead points from tables
Redis (RedisDriver)Database✓✓—CompleteRead/write STRING and HASH keys

Virtual / Testing ​

Two drivers with no real device: virtual generates simulated read values by point type (write is a placeholder, nothing hits a device); listening-virtual runs in reverse, opening TCP/UDP servers to receive external pushes and able to write back to a device over the connection channel.

Driver (dc3.driver.code)CategoryReadWriteSubscribe/ReportStatusNotes
Virtual (VirtualDriver)Virtual/Testing✓——UsableGenerates simulated data, write is a placeholder
Listening Virtual (ListeningVirtualDriver)Virtual/Testing—✓✓CompleteTCP/UDP server ingest, can write back

Capability marks are code-driven

The "✓ / —" in these tables reflect what each driver's *DriverCustomServiceImpl actually implements today: a "—" may mean the protocol direction simply is not offered (e.g. virtual write, mqtt active read), or that the skeleton is not yet filled in (e.g. iec104, dlms, can). The "Status" column is an overall maturity summary; finer data-type or sub-capability gaps are flagged on each driver page via ::: warning / ::: info. For the final behavior, consult that module's read() / write() / initial() source; this table is kept in sync as drivers evolve.

Further Reading ​

Released under the AGPL-3.0 License