A single commercial energy site can run Modbus RTU, DNP3, OCPP 1.6, BACnet/IP, and MQTT simultaneously — sometimes on devices installed within meters of each other. Each protocol has its own data model, timing assumptions, addressing scheme, and failure behavior. Integrating them into a coherent operational picture is where most OT projects stall.
The problem is not the protocols themselves. Each one was designed for a specific context and does its job well in that context. Modbus is deterministic and simple — good for the serial device world it was designed for. DNP3 carries time-stamped sequences of events — essential for substations. OCPP is purpose-built for EV charger management. BACnet covers building systems. MQTT works for high-frequency telemetry from low-power sensors.
The problem is that none of these protocols were designed to interoperate with each other, and the sites where they coexist are increasing in number and complexity every year. A factory adding EV charging infrastructure to an existing BMS/HVAC network now has three distinct protocol stacks that need to exchange state for the site's energy management to function correctly.
The conventional solution is a protocol gateway — a piece of hardware or software that translates between protocol domains. Gateways work, but they introduce latency, create single points of failure, and produce data that has lost its provenance by the time it arrives at the control layer. You know the value changed; you may not know when it changed, or whether the translation was lossless.
The better model is protocol normalization at the edge: a platform that speaks all relevant protocols natively, normalizes their data into a unified event model with preserved timestamps and source identity, and presents a single consistent stream to the control layer. The control layer should not need to know that one temperature reading came from BACnet and another came from Modbus. It should see events with consistent semantics.
This is what GridWatch edge adapters are built to do. Protocol translation is handled at ingest, with timestamp preservation and source attribution intact. The control layer operates on a unified event stream, not a patchwork of protocol-specific queries.