# OT Fabric > OT Fabric builds open-source, MIT-licensed protocol libraries, command-line tools and interoperability test suites for industrial (OT) devices: Modbus, OPC UA, BACnet/IP, IEC 60870-5-104, IEC 61850 (MMS, GOOSE and Sampled Values), Siemens S7, OpenADR, OCPP, DNP3 (IEEE 1815), IEEE 2030.5 (CSIP, CSIP-AUS), EtherNet/IP (CIP), PROFINET IO, CANopen (CiA 301, CiA 302, LSS, CiA 402, CANopen FD) the CAN bus it runs on (CAN FD, CAN XL, ISO-TP) and KNX (KNXnet/IP, KNX IP Secure, KNX Data Secure), plus libraries for the information models carried over them: SunSpec Modbus and the IEC 61850 information model (NSD), and for Sparkplug B, the application profile for industrial data over MQTT. Built by people and AI agents together. OT Fabric is an open-source organization on GitHub (https://github.com/otfabric). For each operational technology (OT) communication protocol it publishes a library with client and server support, a command-line tool where field work needs one, and a Dockerized interoperability suite that tests the implementation against independent stacks. For standard information models, which define what device data means and are carried over a protocol (SunSpec Modbus over Modbus, the IEC 61850 information model), it publishes model libraries and tools on top of the protocol libraries. For application and messaging profiles, which define how applications use a transport (Sparkplug B over MQTT), it publishes the same library, CLI and interop suite. Everything is MIT-licensed unless a repository says otherwise. The roadmap covers every relevant OT protocol, IT-to-OT gateways and data connectors, and MCP servers so AI agents can work with industrial devices safely. The project is built by people and AI agents together: engineers set direction and own every decision, and public tests and interop suites hold every change to the same bar. ## Communication protocols Define how devices exchange data: messages, services, addressing, sessions and transport behaviour on the wire. - [Modbus](https://otfabric.io/protocols/modbus/): The most widely deployed protocol in industrial automation: meters, inverters, batteries, drives and PLCs. - [OPC UA (IEC 62541)](https://otfabric.io/protocols/opc-ua/): The interoperability standard of industrial automation: a browsable address space, built-in security, and PubSub for data that fans out. - [BACnet/IP (ISO 16484-5, Annex J)](https://otfabric.io/protocols/bacnet/): The standard protocol of building automation: HVAC, lighting, access control and energy metering. - [IEC 60870-5-104](https://otfabric.io/protocols/iec-104/): Telecontrol between grid control centres, substations and generation or storage assets. - [IEC 61850](https://otfabric.io/protocols/iec-61850/): IEC 61850 communication for substation automation: client/server services over MMS on TCP port 102, GOOSE events and Sampled Values streams on the station and process bus, all configured from SCL. - [Siemens S7 (S7 communication over ISO-on-TCP (RFC 1006))](https://otfabric.io/protocols/s7/): Classic S7 communication with Siemens PLCs, for reading and writing data blocks, inputs, outputs and markers. - [OpenADR](https://otfabric.io/protocols/openadr/): Demand response and dynamic tariffs between utilities or aggregators and the energy resources of their customers. - [OCPP](https://otfabric.io/protocols/ocpp/): The protocol between EV charging stations and the management system that runs them: booting, authorizing, transactions, metering, smart charging and remote control. - [DNP3 (IEEE 1815-2012 (Distributed Network Protocol))](https://otfabric.io/protocols/dnp3/): The SCADA protocol between control centres and the RTUs, IEDs and gateways in electric, water and oil and gas utilities: polls with time-stamped events, controls with select-before-operate, time synchronization and file transfer. - [IEEE 2030.5](https://otfabric.io/protocols/ieee-2030-5/): The protocol between utilities or aggregators and distributed energy resources: inverters, batteries, EV chargers and meters register over mutual TLS and receive export limits, schedules and prices, with the CSIP profile for California and CSIP-AUS for Australia. - [EtherNet/IP (ODVA EtherNet/IP and CIP (The CIP Networks Library, Volumes 1 and 2); IEC 61158 and IEC 61784 (CPF 2))](https://otfabric.io/protocols/ethernet-ip/): The industrial Ethernet protocol of programmable controllers, I/O adapters, drives and sensors: the Common Industrial Protocol (CIP) over TCP and UDP, with explicit messages to read and write objects and cyclic I/O between scanners and adapters. - [PROFINET](https://otfabric.io/protocols/profinet/): The industrial Ethernet of PLCs, remote I/O, drives and field devices: IO-Controllers find their IO-Devices by name with DCP, set them up over DCE/RPC and exchange their process data in cyclic real-time frames, with alarms, diagnosis and media redundancy. - [CAN bus (ISO 11898-1 (classical CAN, CAN FD, CAN XL in the 2024 edition), ISO 15765-2 (ISO-TP); Bosch CAN 2.0 and CAN FD 1.0)](https://otfabric.io/protocols/can-bus/): The two-wire bus of vehicles, machines, batteries and chargers, and the transport that CANopen, SAE J1939 and UDS run on: short frames with an identifier that names the message and sets its priority, CAN FD for longer and faster frames, CAN XL for up to 2048 bytes, and ISO-TP for messages above one frame. - [CANopen (CiA 301 (EN 50325-4), CiA 302, 305 and 306; CiA 402 drives; CiA 1301 CANopen FD)](https://otfabric.io/protocols/canopen/): The application protocol that runs on CAN in machines, drives, lifts, medical and mobile equipment: an object dictionary per device, SDO to read and write it, PDOs for process data, NMT and heartbeats to manage the network, and EDS files that describe each device. - [KNX](https://otfabric.io/protocols/knx/): The home and building control standard of switches, dimmers, blinds, heating valves and presence detectors: devices exchange group telegrams over twisted pair, radio or IP, and KNXnet/IP connects them to IP networks through tunnelling and routing, with KNX IP Secure and Data Secure. ## Information models Define what the data means: standard devices, measurements, controls and their structure, apart from the protocol that carries them. - [SunSpec Modbus (SunSpec Information Models · Modbus register mapping)](https://otfabric.io/models/sunspec/): Standard information models for solar inverters, meters, batteries and other DER equipment, and their mapping into Modbus registers. Read and served over any Modbus transport. - [IEC 61850 information model (IEC 61850-7-2, 7-3, 7-4 and 7-4xx · NSD per IEC 61850-7-7)](https://otfabric.io/models/iec-61850/): The standard semantics of IEC 61850: logical node classes, data objects, common data classes, data attributes and functional constraints, read from the official NSD files and usable without any transport. ## Application and messaging profiles Define how a protocol is used for one interoperable application: topics, payloads, message flows, lifecycle and state. - [Sparkplug B (Eclipse Sparkplug 3.0.0 · ISO/IEC 20237:2023)](https://otfabric.io/profiles/sparkplugb/): Sparkplug B standardizes industrial messaging over MQTT. It defines a topic namespace, typed Protobuf payloads and operational state management, so edge nodes, devices and host applications exchange data with consistent lifecycle awareness. ## Protocol, model and profile bundles One plain-text file per protocol, information model or application profile with its overview, every documentation page, the OT Fabric projects and the other open-source implementations. - [Modbus bundle](https://otfabric.io/llms/modbus.txt) - [OPC UA bundle](https://otfabric.io/llms/opc-ua.txt) - [BACnet/IP bundle](https://otfabric.io/llms/bacnet.txt) - [IEC 60870-5-104 bundle](https://otfabric.io/llms/iec-104.txt) - [IEC 61850 bundle](https://otfabric.io/llms/iec-61850.txt) - [Siemens S7 bundle](https://otfabric.io/llms/s7.txt) - [OpenADR bundle](https://otfabric.io/llms/openadr.txt) - [OCPP bundle](https://otfabric.io/llms/ocpp.txt) - [DNP3 bundle](https://otfabric.io/llms/dnp3.txt) - [IEEE 2030.5 bundle](https://otfabric.io/llms/ieee-2030-5.txt) - [EtherNet/IP bundle](https://otfabric.io/llms/ethernet-ip.txt) - [PROFINET bundle](https://otfabric.io/llms/profinet.txt) - [CAN bus bundle](https://otfabric.io/llms/can-bus.txt) - [CANopen bundle](https://otfabric.io/llms/canopen.txt) - [KNX bundle](https://otfabric.io/llms/knx.txt) - [SunSpec Modbus bundle](https://otfabric.io/llms/sunspec.txt) - [IEC 61850 information model bundle](https://otfabric.io/llms/iec-61850-model.txt) - [Sparkplug B bundle](https://otfabric.io/llms/sparkplug-b.txt) ## Documentation - [Documentation](https://otfabric.io/docs/): Guides and reference for the OT Fabric protocol, information-model and application-profile libraries, command-line tools and interop suites. - [Contributing](https://otfabric.io/docs/contributing/): How to report issues and contribute code, with or without an AI agent. - [Writing blog posts](https://otfabric.io/docs/contributing/blog-posts/): How to add a post to the OT Fabric blog, with images, video and code. - [Getting started](https://otfabric.io/docs/getting-started/): What the OT Fabric ecosystem covers, from protocol libraries and field tools to interop suites, network visibility and desktop apps, and the fastest way to talk to your first device. - [Information model documentation](https://otfabric.io/docs/models/): Guides for the standard information models OT Fabric supports, SunSpec Modbus and the IEC 61850 information model, and how they relate to the protocols that carry them. - [IEC 61850 information model](https://otfabric.io/docs/models/iec-61850/): How the IEC 61850 information model is defined (logical nodes, data objects, CDCs, data attributes, functional constraints and NSD files) and how go-iec61850-model loads, validates and resolves it in Go. - [IEC 61850 information model: nsdctl](https://otfabric.io/docs/models/iec-61850/cli/): Use nsdctl, the CLI included with go-iec61850-model, to look up IEC 61850 logical nodes, explain references, decode enumerations, compare namespaces and inspect, validate and generate from NSD packages. - [SunSpec Modbus](https://otfabric.io/docs/models/sunspec/): How SunSpec Modbus works (the SunS marker, the model chain, point types, scale factors and groups) and which OT Fabric projects read and serve it. - [SunSpec Modbus: Go library](https://otfabric.io/docs/models/sunspec/library/): Use go-sunspec to discover SunSpec models on a Modbus device and decode every point into typed, scaled values, and to serve SunSpec devices of your own, over TCP, RTU, TLS or any go-modbus transport. - [SunSpec Modbus: Command-line tool](https://otfabric.io/docs/models/sunspec/cli/): Install sunspecctl and use it to detect, list, read and poll SunSpec devices over Modbus TCP, RTU or TLS, and to serve a simulated device from a JSON file or a capture of a real one. Plus the SunSpec commands in modbusctl. - [SunSpec Modbus: Testing and interop](https://otfabric.io/docs/models/sunspec/testing/): How go-sunspec and sunspecctl are tested without hardware, how to test your own SunSpec code against a served device, and what has and has not been validated. - [Application profile documentation](https://otfabric.io/docs/profiles/): Guides for the application and messaging profiles OT Fabric supports, starting with Sparkplug B over MQTT, and how a profile differs from a protocol and an information model. - [Sparkplug B](https://otfabric.io/docs/profiles/sparkplugb/): How Sparkplug B works over MQTT (topic namespace, message types, Protobuf payloads and datatypes, birth and death certificates, bdSeq and seq, primary host STATE, server walking, aliases, rebirth and commands) and which OT Fabric projects implement it. - [Go library](https://otfabric.io/docs/profiles/sparkplugb/library/): Use go-sparkplugb to build Sparkplug B edge nodes, primary host applications and applications in Go, with typed metrics, aliases, DataSets and Templates, primary host awareness and server walking, the MQTT transport, errors and observability. - [CLI](https://otfabric.io/docs/profiles/sparkplugb/cli/): Use sparkplugbctl to watch and decode Sparkplug B traffic on an MQTT broker, publish typed metrics, encode and decode payloads, and simulate an edge node, a primary host application or an application. - [Testing and interop](https://otfabric.io/docs/profiles/sparkplugb/testing/): How go-sparkplugb is tested against six independent Sparkplug B stacks on four MQTT brokers with sparkplugb-interop, what the cross-stack findings are, and why interop testing is not Sparkplug Compatible certification. - [Protocol documentation](https://otfabric.io/docs/protocols/): In-depth guides for every communication protocol OT Fabric supports, covering how it works, the Go library, the CLI and interop testing. - [BACnet/IP](https://otfabric.io/docs/protocols/bacnet/): How BACnet/IP works (objects, properties, BVLC, NPDU, APDU, routing and BBMDs) and what OT Fabric provides for it. - [BACnet/IP: Go library](https://otfabric.io/docs/protocols/bacnet/library/): Using go-bacnet, the pure-Go BACnet/IP client library, to discover devices, read and write properties and subscribe to change of value. - [BACnet/IP: bacnetctl](https://otfabric.io/docs/protocols/bacnet/cli/): Installing and using bacnetctl, the BACnet/IP command-line client for discovery, reads, writes, COV monitoring and network diagnostics. - [BACnet/IP: Testing and interop](https://otfabric.io/docs/protocols/bacnet/testing/): How go-bacnet and bacnetctl are tested against five open-source BACnet stacks with bacnet-interop, and what has not been validated. - [CAN bus](https://otfabric.io/docs/protocols/can-bus/): How CAN works (one shared two-wire bus, identifiers that name messages and set their priority, arbitration, classical CAN, CAN FD and CAN XL frames, error handling and bus-off, ISO-TP for longer messages, DBC, KCD and ARXML databases, SocketCAN and serial-line adapters) and which OT Fabric projects implement it. - [CAN bus: Go library](https://otfabric.io/docs/protocols/can-bus/library/): Use go-canbus to work with CAN, CAN FD and CAN XL in Go, on Linux SocketCAN, serial-line (slcan) adapters on every OS and a virtual bus, with filters, ISO-TP, capture and replay, DBC, KCD and ARXML databases, code generation, fault injection, errors and observability. - [CAN bus: canbusctl](https://otfabric.io/docs/protocols/can-bus/cli/): Installing and using canbusctl, the CAN command-line toolkit to monitor, record, convert and replay CAN, CAN FD and CAN XL traffic, decode and encode with DBC, KCD or ARXML, generate Go, run ISO-TP, simulate a database and test under faults, with safety guards for real buses. - [CAN bus: Testing and interop](https://otfabric.io/docs/protocols/can-bus/testing/): Test CAN code on Linux virtual CAN against independent implementations with canbus-interop (can-utils with the kernel's ISO-TP, python-can, socketcan-rs, Scapy, python-can-isotp, cantools and canmatrix), and see what go-canbus and canbusctl have and have not been validated against. - [CANopen](https://otfabric.io/docs/protocols/canopen/): How CANopen works on top of CAN (the object dictionary, SDO, PDO and MPDO, NMT and heartbeats, SYNC, EMCY and TIME, LSS, the CiA 302 network boot-up, EDS and DCF files, the CiA 402 drive profile and CANopen FD) and which OT Fabric projects implement it. - [CANopen: Go library](https://otfabric.io/docs/protocols/canopen/library/): Use go-canopen to build CANopen devices and network managers in Go on go-canbus, with the object dictionary, SDO and block transfer, PDOs and MPDOs, NMT and heartbeats, SYNC, EMCY and TIME, LSS, the CiA 302 network boot-up, EDS and DCF files, code generation, CiA 402 drives, CANopen FD, errors and observability. - [CANopen: canopenctl](https://otfabric.io/docs/protocols/canopen/cli/): Installing and using canopenctl, the CANopen command-line toolkit to monitor and decode traffic, read and write object dictionaries over SDO and USDO, manage nodes with NMT, assign node-IDs with LSS, boot a network as a CiA 302 manager, configure PDOs and MPDOs, work with EDS, DCF and concise DCF files, download programs, operate CiA 402 drives and simulate devices, read-only by default. - [CANopen: Testing and interop](https://otfabric.io/docs/protocols/canopen/testing/): Test CANopen code on Linux virtual CAN against CANopenNode, Lely CANopen and python canopen with canopen-interop, and see what go-canopen and canopenctl have and have not been validated against, including LSS, MPDOs, the CiA 302 boot-up, EDS files and CANopen FD. - [DNP3](https://otfabric.io/docs/protocols/dnp3/): How DNP3 (IEEE 1815) works (masters and outstations, link addresses, objects, groups and variations, event classes, polls and unsolicited responses, select-before-operate, time synchronization, transports and Secure Authentication) and which OT Fabric projects implement it. - [DNP3: Go library](https://otfabric.io/docs/protocols/dnp3/library/): Use go-dnp3 to build DNP3 (IEEE 1815) masters and outstations in Go, with polls, events, controls, time synchronization, file transfer, TLS, UDP, serial, Secure Authentication v5, errors and observability. - [DNP3: dnp3ctl](https://otfabric.io/docs/protocols/dnp3/cli/): Installing and using dnp3ctl, the DNP3 (IEEE 1815) command-line tool to poll, monitor and operate outstations, synchronize time, transfer files, find outstations and simulate an RTU from a YAML model. - [DNP3: Testing and interop](https://otfabric.io/docs/protocols/dnp3/testing/): Test DNP3 code against three independent implementations with dnp3-interop (opendnp3, DSC go-dnp3 and dnp3py), and see what go-dnp3 and dnp3ctl have and have not been validated against. - [EtherNet/IP](https://otfabric.io/docs/protocols/ethernet-ip/): How EtherNet/IP and CIP work (scanners and adapters, encapsulation and sessions, objects, classes, instances and attributes, explicit and implicit messaging, connections, assemblies, routing, Logix tags, EDS files and CIP Security) and which OT Fabric projects implement them. - [EtherNet/IP: Go library](https://otfabric.io/docs/protocols/ethernet-ip/library/): Use go-ethernetip to build EtherNet/IP and CIP clients, scanners and adapters in Go, with explicit messaging, routing, Class 3 and Class 1 connections, multicast, Logix tags, EDS files and code generation, TLS, errors and observability. - [EtherNet/IP: ethernetipctl](https://otfabric.io/docs/protocols/ethernet-ip/cli/): Installing and using ethernetipctl, the EtherNet/IP and CIP command-line tool to discover and identify devices, read and write attributes, open connections and stream I/O, diagnose, read and write Logix tags, work with EDS files and simulate an adapter. - [EtherNet/IP: Testing and interop](https://otfabric.io/docs/protocols/ethernet-ip/testing/): Test EtherNet/IP code against twelve independent implementations in eight languages with ethernetip-interop (OpENer, EIPScanner, pycomm3, cpppo, libplctag, gologix, pylogix, etherip, eip-rs, node-ethernet-ip, EEIP.NET and loki-os go-ethernet-ip), and see what go-ethernetip and ethernetipctl have and have not been validated against. - [IEC 60870-5-104](https://otfabric.io/docs/protocols/iec-104/): How IEC 60870-5-104 works, from APCI frames and timers to ASDUs, addressing, select-before-operate, redundancy and security. - [IEC 60870-5-104: Go library](https://otfabric.io/docs/protocols/iec-104/library/): Use go-iec104 to build an IEC 60870-5-104 controlling station or controlled station in pure Go. - [IEC 60870-5-104: iec104ctl](https://otfabric.io/docs/protocols/iec-104/cli/): Interrogate, monitor and command IEC 60870-5-104 stations, transfer files, or simulate a station, from the command line. - [IEC 60870-5-104: Testing and interop](https://otfabric.io/docs/protocols/iec-104/testing/): How the OT Fabric IEC 60870-5-104 projects are tested, against which reference stacks, and what has and has not been validated. - [IEC 61850](https://otfabric.io/docs/protocols/iec-61850/): How IEC 61850 communication works, from the object model to client/server services over MMS on TCP port 102 and GOOSE and Sampled Values on raw Ethernet. - [IEC 61850: Go library](https://otfabric.io/docs/protocols/iec-61850/library/): Using go-iec61850 and go-mms to browse, read, write, subscribe to reports, operate controls, serve an SCL model, and publish and subscribe to GOOSE and Sampled Values from Go. - [IEC 61850: iec61850ctl](https://otfabric.io/docs/protocols/iec-61850/cli/): Browse, read, subscribe to reports, operate controls, sniff, subscribe to and publish GOOSE and Sampled Values, and run an SCL-driven MMS server from the command line with iec61850ctl. - [IEC 61850: Testing and interop](https://otfabric.io/docs/protocols/iec-61850/testing/): How go-mms, go-iec61850 and iec61850ctl are tested against four independent IEC 61850 stacks with iec61850-interop, for MMS, GOOSE and Sampled Values, and what has and has not been validated. - [IEEE 2030.5](https://otfabric.io/docs/protocols/ieee-2030-5/): How IEEE 2030.5 (Smart Energy Profile 2.0) works (servers and clients, resources and links, certificates, LFDI and SFDI, registration and the PIN, function set assignments, programs and events, Responses, polling and subscriptions, metering, editions, CSIP and CSIP-AUS) and which OT Fabric projects implement it. - [IEEE 2030.5: Go library](https://otfabric.io/docs/protocols/ieee-2030-5/library/): Use go-ieee20305 to build IEEE 2030.5 clients, device agents and servers in Go, with registration, DER programs and controls, Responses, subscriptions, metering, CSIP-AUS site limits, certificates, the CCM_8 cipher suite, errors and observability. - [IEEE 2030.5: ieee20305ctl](https://otfabric.io/docs/protocols/ieee-2030-5/cli/): Installing and using ieee20305ctl, the IEEE 2030.5 command-line tool to act as a device, run a device agent, serve a seeded test server and operate it while it runs, check certificates and validate documents, with CSIP-AUS and CCM_8. - [IEEE 2030.5: Testing and interop](https://otfabric.io/docs/protocols/ieee-2030-5/testing/): Test IEEE 2030.5 code against four independent implementations with ieee20305-interop (ANU Envoy, GridAPPS-D, DER Security py20305 and the EPRI client), and see what go-ieee20305 and ieee20305ctl have and have not been validated against. - [KNX](https://otfabric.io/docs/protocols/knx/): How KNX works (individual and group addresses, group objects and datapoint types, the KNX media and line topology, KNXnet/IP discovery, tunnelling and routing, cEMI frames, device management, KNX IP Secure and KNX Data Secure) and which OT Fabric projects implement it. - [KNX: Go library](https://otfabric.io/docs/protocols/knx/library/): Use go-knx to talk KNX over KNXnet/IP in Go, with discovery, tunnelling over UDP and TCP, routing, group communication and datapoint types, device management, busmonitor, a KNXnet/IP server with virtual devices, KNX IP Secure, KNX Data Secure, ETS keyrings, errors and observability. - [KNX: knxctl](https://otfabric.io/docs/protocols/knx/cli/): Installing and using knxctl, the KNX command-line tool to discover KNXnet/IP interfaces, monitor group telegrams, read and write group objects, watch routing and busmonitor traffic, read interface properties, use KNX IP Secure and Data Secure with ETS keyrings, encode and decode datapoint types and frames, and run a simulated KNXnet/IP server, passive by default. - [KNX: Testing and interop](https://otfabric.io/docs/protocols/knx/testing/): Test KNXnet/IP code against Calimero, knxd, xknx and KNXUltimate with knx-interop, and see what go-knx and knxctl have and have not been validated against, including routing, TCP tunnelling, device management, busmonitor, KNX IP Secure and KNX Data Secure. - [Modbus](https://otfabric.io/docs/protocols/modbus/): How Modbus works (data model, addressing, framing, transports and security) and which OT Fabric projects implement it. - [Modbus: Captures and traces](https://otfabric.io/docs/protocols/modbus/captures/): Record Modbus devices to MBCAP capture files, read packet traces of Modbus/TCP traffic in Modbus terms, and turn either into a simulated device with go-modbus-capture, go-modbus-trace and Modbus Trace Explorer. - [Modbus: Go library](https://otfabric.io/docs/protocols/modbus/library/): Use go-modbus to read and write Modbus devices over TCP, TLS, RTU, ASCII and UDP, run a Modbus server, and handle errors, retries and concurrency. - [Modbus: Command-line tool](https://otfabric.io/docs/protocols/modbus/cli/): Install modbusctl and use it to identify, fingerprint, scan, decode, poll and write Modbus devices, record them to MBCAP capture files and replay those as a simulated device. - [Modbus: Testing and interop](https://otfabric.io/docs/protocols/modbus/testing/): Simulate Modbus devices with modbus-simulator and modbusctl, run go-modbus against five reference stacks with modbus-interop, and see what has and has not been validated. - [OCPP](https://otfabric.io/docs/protocols/ocpp/): How OCPP-J works (stations and the CSMS, WebSocket and subprotocols, CALL frames, versions 1.6J, 2.0.1 and 2.1, security profiles, transactions and smart charging) and which OT Fabric projects implement it. - [OCPP: Go library](https://otfabric.io/docs/protocols/ocpp/library/): Use go-ocpp to build OCPP 1.6J, 2.0.1 and 2.1 charging stations and CSMSs in Go, with typed and validated messages, handlers, security profiles, reconnection, testing, errors and observability. - [OCPP: ocppctl](https://otfabric.io/docs/protocols/ocpp/cli/): Installing and using ocppctl, the OCPP 1.6J, 2.0.1 and 2.1 command-line tool to probe a CSMS, send messages, simulate charging stations, run scenarios in CI and serve a test CSMS. - [OCPP: Testing and interop](https://otfabric.io/docs/protocols/ocpp/testing/): Test OCPP code against five independent implementations with ocpp-interop (The Mobility House, ChargeTimeEU, ocpp-go, EVerest libocpp and CitrineOS), and see what go-ocpp and ocppctl have and have not been validated against. - [OPC UA](https://otfabric.io/docs/protocols/opc-ua/): How OPC Unified Architecture works on the wire and in the address space, how its security model, alarms, certificate management and PubSub fit together, and which OT Fabric projects implement it. - [OPC UA: PubSub](https://otfabric.io/docs/protocols/opc-ua/pubsub/): How OPC UA PubSub (Part 14) works, and how to publish, subscribe, secure and configure it over UDP, Ethernet, MQTT and AMQP with go-opcua and opcuactl. - [OPC UA: Go library](https://otfabric.io/docs/protocols/opc-ua/library/): Use go-opcua to connect to OPC UA servers securely over TCP, WebSockets or HTTPS, read, write, browse, subscribe and handle alarms, manage certificates, and build your own OPC UA server in pure Go. - [OPC UA: opcuactl](https://otfabric.io/docs/protocols/opc-ua/cli/): Install and use opcuactl, the OPC UA command-line client, to discover, browse, read, write, monitor, handle alarms, manage certificates and work with PubSub over secured connections. - [OPC UA: Testing and interop](https://otfabric.io/docs/protocols/opc-ua/testing/): How go-opcua and opcuactl are tested against six independent OPC UA stacks and a Global Discovery Server with the opcua-interop containers, and what has and has not been validated. - [OpenADR](https://otfabric.io/docs/protocols/openadr/): How OpenADR 3 works (roles, REST resources, intervals, targeting, OAuth2, notifications and local discovery) and which OT Fabric projects implement it. - [OpenADR: Go library](https://otfabric.io/docs/protocols/openadr/library/): Use go-openadr to build OpenADR 3.1.0 VEN and Business Logic clients and an embeddable VTN, with webhook, MQTT and WebSocket notifications, timelines, discovery, errors and observability. - [OpenADR: openadrctl](https://otfabric.io/docs/protocols/openadr/cli/): Installing and using openadrctl, the OpenADR 3 command-line tool to act as a VEN or as Business Logic against any VTN, publish prices and limits, listen for notifications by webhook, MQTT or WebSocket, serve a test VTN from a seed, and talk to OpenADR 3.0.1 VTNs. - [OpenADR: Testing and interop](https://otfabric.io/docs/protocols/openadr/testing/): Test OpenADR 3 code against the OpenLEADR VTN (3.1.0 and 3.0.1) and the ElaadNL client with openadr-interop, run the specification-driven conformance suite, and see what go-openadr and openadrctl have and have not been validated against. - [PROFINET](https://otfabric.io/docs/protocols/profinet/): How PROFINET IO works (IO-Controllers, IO-Devices and IO-Supervisors, station names and DCP, application relationships, slots, subslots and modules, cyclic RT frames, records, I&M, alarms and diagnosis, GSDML, LLDP topology and MRP rings) and which OT Fabric projects implement it. - [PROFINET: Go library](https://otfabric.io/docs/protocols/profinet/library/): Use go-profinet to build PROFINET IO-Controllers and IO-Devices in Go, with DCP, records, I&M, diagnosis, alarms, cyclic RT data, shared device, MRP, GSDML, raw Ethernet on Linux, macOS and Windows, a virtual Ethernet for tests, errors and observability. - [PROFINET: profinetctl](https://otfabric.io/docs/protocols/profinet/cli/): Installing and using profinetctl, the PROFINET IO command-line tool to discover devices, assign station names and IP addresses, read I&M, records and diagnosis, map and check the topology, inspect, validate and generate GSDML files, and connect as IO-Controller to watch cyclic IO and alarms. - [PROFINET: Testing and interop](https://otfabric.io/docs/protocols/profinet/testing/): Test PROFINET IO code on a real Layer 2 network against independent implementations with profinet-interop (rt-labs p-net, pnio-rs, profinet-py, pnio-dcp, umrp, Microchip MRP, Net-SNMP, Wireshark and scapy), and see what go-profinet and profinetctl have and have not been validated against. - [Siemens S7](https://otfabric.io/docs/protocols/s7/): How S7comm works over ISO-on-TCP, from the TPKT and COTP layers to rack and slot, TSAPs, PDU size, memory areas, SZL and blocks. - [Siemens S7: Go library](https://otfabric.io/docs/protocols/s7/library/): Connect to Siemens S7 PLCs from Go with go-s7comm, read and write memory areas, inspect CPUs and blocks, and handle structured read results. - [Siemens S7: s7commctl](https://otfabric.io/docs/protocols/s7/cli/): Use s7commctl to identify Siemens S7 PLCs, find the right rack and slot, read memory, list blocks and run diagnostics, with writes behind explicit safety flags. - [Siemens S7: Testing and interop](https://otfabric.io/docs/protocols/s7/testing/): How go-s7comm is tested against two independent Snap7 server implementations with snap7-interop, and what is and is not covered. ## Projects ### Protocol libraries - [go-bacnet](https://otfabric.io/projects/go-bacnet/): BACnet/IP client: discovery, properties, COV and alarms, routed networks and foreign-device registration. Source: https://github.com/otfabric/go-bacnet - [go-canopen](https://otfabric.io/projects/go-canopen/): CANopen (CiA 301) and CANopen FD on go-canbus: object dictionary, SDO and USDO, NMT, heartbeat, PDOs and MPDOs, SYNC, EMCY, TIME, LSS, a complete device and a CiA 302 network manager, EDS/DCF files, typed Go from an EDS and the CiA 402 drive profile. No cgo. Source: https://github.com/otfabric/go-canopen - [go-dnp3](https://otfabric.io/projects/go-dnp3/): DNP3 (IEEE 1815) master and outstation: every procedure in both roles, file transfer, multi-drop, TLS, UDP and serial, Secure Authentication v5. No dependencies. Source: https://github.com/otfabric/go-dnp3 - [go-ethernetip](https://otfabric.io/projects/go-ethernetip/): EtherNet/IP and CIP client, scanner and adapter: Class 1 and Class 3 connections, multicast, Rockwell Logix tags, EDS files and code generation, TLS. No dependencies. Source: https://github.com/otfabric/go-ethernetip - [go-iec104](https://otfabric.io/projects/go-iec104/): IEC 60870-5-104 controlling and controlled station, with the full APCI state machine, redundancy groups, TLS and IEC 62351-5 application-layer security. Source: https://github.com/otfabric/go-iec104 - [go-iec61850](https://otfabric.io/projects/go-iec61850/): IEC 61850 in one library: MMS client and SCL-driven server, GOOSE and Sampled Values publishers and subscribers, and SCL parsing, with logical nodes, reports, controls and control blocks as first-class Go types. Source: https://github.com/otfabric/go-iec61850 - [go-ieee20305](https://otfabric.io/projects/go-ieee20305/): IEEE 2030.5 (Smart Energy Profile 2.0) client, device agent and server for every function set, editions 2018 and 2023, CSIP and CSIP-AUS, and CCM_8. No dependencies. Source: https://github.com/otfabric/go-ieee20305 - [go-knx](https://otfabric.io/projects/go-knx/): KNX over KNXnet/IP: frames, cEMI and 209 datapoint subtypes, discovery, tunnelling over UDP and TCP, routing, group communication, device management, busmonitor and a KNXnet/IP server with virtual devices, with KNX IP Secure, KNX Data Secure and ETS keyrings. Pure Go, no dependencies, no cgo. Source: https://github.com/otfabric/go-knx - [go-mms](https://otfabric.io/projects/go-mms/): MMS (ISO 9506) client and server with the full ISO upper-layer stack, the transport underneath IEC 61850: typed errors, metrics, retries and graceful shutdown, fuzzed and interop tested. Source: https://github.com/otfabric/go-mms - [go-modbus](https://otfabric.io/projects/go-modbus/): Modbus client and server for the functions of the specification: TCP, RTU, ASCII, TLS and UDP, typed register codecs, pooling, retries and a PDU tap for recording. Source: https://github.com/otfabric/go-modbus - [go-modbus-capture](https://otfabric.io/projects/go-modbus-capture/): MBCAP, the capture format for what Modbus devices answered and when, so a virtual device can serve it again. Go library and mbcapctl to inspect, verify, convert, filter, merge and repair captures. Source: https://github.com/otfabric/go-modbus-capture - [go-modbus-trace](https://otfabric.io/projects/go-modbus-trace/): Read pcap and pcapng traces of Modbus/TCP offline: transactions, devices, poll patterns and address coverage. Library and mbtracectl, with timeline, sub-trace and MBCAP export. Source: https://github.com/otfabric/go-modbus-trace - [go-ocpp](https://otfabric.io/projects/go-ocpp/): OCPP 1.6J, 2.0.1 and 2.1 for charging stations and CSMSs: every action typed and validated against the OCA schemas, security profiles 1 to 3, one dependency. Source: https://github.com/otfabric/go-ocpp - [go-opcua](https://otfabric.io/projects/go-opcua/): OPC UA client and server over TCP, WebSockets and HTTPS, in UA Binary and UA JSON: RSA and ECC security, subscriptions, alarms and conditions, data and event history, GDS certificate management and PubSub. Source: https://github.com/otfabric/go-opcua - [go-openadr](https://otfabric.io/projects/go-openadr/): OpenADR 3.1 VEN and Business Logic clients that also speak 3.0.1, and an embeddable VTN, with webhook, MQTT and WebSocket notifications. No dependencies. Source: https://github.com/otfabric/go-openadr - [go-profinet](https://otfabric.io/projects/go-profinet/): PROFINET IO-Controller and IO-Device: DCP, LLDP, records, I&M, diagnosis, alarms, cyclic RT data, shared device, MRP rings and GSDML. Raw Ethernet on Linux, macOS and Windows. No dependencies. Source: https://github.com/otfabric/go-profinet - [go-s7comm](https://otfabric.io/projects/go-s7comm/): Siemens S7 client: read and write DBs, inputs, outputs and markers, discovery and SZL diagnostics. Source: https://github.com/otfabric/go-s7comm ### Information-model libraries - [go-iec61850-model](https://otfabric.io/projects/go-iec61850-model/): The IEC 61850 information model without a transport: an edition-aware catalog of logical nodes, data objects, CDCs and data attributes from the official NSD files, with reference validation, type resolution and semantic mapping. Source: https://github.com/otfabric/go-iec61850-model - [go-sunspec](https://otfabric.io/projects/go-sunspec/): SunSpec over Modbus, both sides: discovers and decodes 112 built-in models into typed, scaled values, and serves simulated or real SunSpec devices. Source: https://github.com/otfabric/go-sunspec ### Application-profile libraries - [go-sparkplugb](https://otfabric.io/projects/go-sparkplugb/): Sparkplug B 3.0.0 over MQTT for Go: edge node, primary host application and application roles, with birth and death certificates, primary host awareness, server walking, aliases, sequence checks and the full typed metric codec. Source: https://github.com/otfabric/go-sparkplugb ### CLI tools - [bacnetctl](https://otfabric.io/projects/bacnetctl/): Discover BACnet devices, list point lists, read, write at priority, monitor COV and inspect alarms. Source: https://github.com/otfabric/bacnetctl - [canbusctl](https://otfabric.io/projects/canbusctl/): Monitor, record, convert and replay CAN, CAN FD and CAN XL traffic, decode and encode with DBC, KCD or ARXML, run ISO-TP, simulate a database and test under faults. Passive by default; transmitting on a real bus needs --yes. Source: https://github.com/otfabric/canbusctl - [canopenctl](https://otfabric.io/projects/canopenctl/): Monitor and decode CANopen traffic, read and write object dictionaries over SDO or USDO, manage nodes with NMT, assign node-IDs with LSS, boot a network as a CiA 302 manager, configure PDOs and MPDOs, work with EDS, DCF and concise DCF files, drive CiA 402 axes and simulate devices. Read-only by default; changes on a real bus need --yes. Source: https://github.com/otfabric/canopenctl - [dnp3ctl](https://otfabric.io/projects/dnp3ctl/): Poll, monitor and operate DNP3 outstations, synchronize their clocks, transfer files, find them on a subnet, or simulate one from a YAML model. Source: https://github.com/otfabric/dnp3ctl - [ethernetipctl](https://otfabric.io/projects/ethernetipctl/): Discover and identify EtherNet/IP devices, read and write attributes, stream I/O, diagnose, read and write Logix tags, check EDS files, or simulate an adapter. Source: https://github.com/otfabric/ethernetipctl - [iec104ctl](https://otfabric.io/projects/iec104ctl/): Interrogate, monitor and command IEC 104 stations over TLS or IEC 62351-5, transfer files, or simulate an RTU from YAML. Source: https://github.com/otfabric/iec104ctl - [iec61850ctl](https://otfabric.io/projects/iec61850ctl/): IEC 61850 from the terminal: browse IEDs, read and write, operate controls and subscribe to reports over MMS, and sniff, subscribe to and publish GOOSE and Sampled Values on the station bus. Source: https://github.com/otfabric/iec61850ctl - [ieee20305ctl](https://otfabric.io/projects/ieee20305ctl/): Act as an IEEE 2030.5 device, run a device agent, serve a seeded test server and operate it while it runs, and check certificates, with CSIP-AUS and CCM_8. Source: https://github.com/otfabric/ieee20305ctl - [knxctl](https://otfabric.io/projects/knxctl/): Discover and diagnose KNXnet/IP interfaces, monitor group telegrams, read and switch group objects, watch routing and busmonitor traffic, read interface properties, use KNX Secure with ETS keyrings, encode and decode datapoint types and frames, and run a simulated KNXnet/IP server. Passive by default. Source: https://github.com/otfabric/knxctl - [modbus-simulator](https://otfabric.io/projects/modbus-simulator/): Deterministic, stateful Modbus TCP and TLS device simulator driven by JSON fixtures, with fault injection, request traces and CI assertions. Source: https://github.com/otfabric/modbus-simulator - [modbusctl](https://otfabric.io/projects/modbusctl/): Identify, fingerprint, scan, poll, decode and write Modbus devices over TCP, serial and TLS. Record them to MBCAP capture files and replay those as a simulated device. Source: https://github.com/otfabric/modbusctl - [nsdctl](https://otfabric.io/projects/nsdctl/): The CLI included with go-iec61850-model: look up what an IEC 61850 logical node holds, explain a reference, and inspect, validate, compare and generate from NSD packages. Source: https://github.com/otfabric/go-iec61850-model - [ocppctl](https://otfabric.io/projects/ocppctl/): Probe a CSMS, send any OCPP message, simulate hundreds of charging stations, run scenarios in CI, or serve a test CSMS for station development. Source: https://github.com/otfabric/ocppctl - [opcuactl](https://otfabric.io/projects/opcuactl/): Discover, browse, read, write, call methods, monitor, handle alarms, manage certificates, read and edit history, work with OPC UA PubSub, and run a test server. Source: https://github.com/otfabric/opcuactl - [openadrctl](https://otfabric.io/projects/openadrctl/): Act as a VEN or as Business Logic against any OpenADR 3 VTN, publish prices and limits, listen for notifications by webhook, MQTT or WebSocket, or serve a test VTN from a seed file. Source: https://github.com/otfabric/openadrctl - [profinetctl](https://otfabric.io/projects/profinetctl/): Discover PROFINET devices, set station names and IP addresses, read I&M, records and diagnosis, map the cabling, check GSDML files, and connect as IO-Controller to watch cyclic IO and alarms. Source: https://github.com/otfabric/profinetctl - [s7commctl](https://otfabric.io/projects/s7commctl/): Siemens S7 command-line client for ISO-on-TCP (port 102). Source: https://github.com/otfabric/s7commctl - [sparkplugbctl](https://otfabric.io/projects/sparkplugbctl/): Watch and decode Sparkplug B traffic on a broker, publish typed metrics, encode and decode payloads, or simulate an edge node, a primary host application or an application. Source: https://github.com/otfabric/sparkplugbctl - [sunspecctl](https://otfabric.io/projects/sunspecctl/): Detect, list, read and poll SunSpec inverters, meters and batteries, and serve a simulated device from a JSON file or a capture of a real one. Source: https://github.com/otfabric/sunspecctl ### Building blocks - [go-canbus](https://otfabric.io/projects/go-canbus/): The CAN transport for Go: classical CAN, CAN FD and CAN XL frames on Linux SocketCAN, serial-line (slcan) adapters on every OS and a virtual bus, with ISO-TP, capture and replay in seven trace formats, and DBC, KCD and ARXML databases with a signal codec and a Go code generator. go-canopen runs on it. No cgo. Source: https://github.com/otfabric/go-canbus - [go-cotp](https://otfabric.io/projects/go-cotp/): COTP TP0 transport service over RFC 1006, plus a full X.224 TPDU codec. Source: https://github.com/otfabric/go-cotp - [go-serial](https://otfabric.io/projects/go-serial/): Cross-platform serial ports for RS-232 and RS-485, with a Modbus RTU preset. Source: https://github.com/otfabric/go-serial - [go-tpkt](https://otfabric.io/projects/go-tpkt/): TPKT framing for RFC 1006 and RFC 2126 transport profiles. Source: https://github.com/otfabric/go-tpkt ### Discovery - [go-otfp](https://otfabric.io/projects/go-otfp/): Find out which OT protocol an endpoint speaks, and read the device's identity, with safe connection-level probes. 14 protocols, graded confidence, zero runtime dependencies. Source: https://github.com/otfabric/go-otfp - [LAN Tracker](https://otfabric.io/projects/lan-tracker/): A history of what is connected to your OT networks: which MAC held which IP and when, names, DHCP leases, TCP reachability and duplicate addresses. Passive by default. Source: https://github.com/otfabric/lan-tracker - [otprobe](https://otfabric.io/projects/otprobe/): The command-line tool included with go-otfp: point it at an endpoint or a host and it tells you which OT protocol answers, with what confidence, and which device is behind it. Source: https://github.com/otfabric/go-otfp ### Interop suites - [bacnet-interop](https://otfabric.io/projects/bacnet-interop/): BACnet/IP reference devices: BACnet Stack, BACpypes3, BACnet4J, System.IO.BACnet and Worldiety. Source: https://github.com/otfabric/bacnet-interop - [canbus-interop](https://otfabric.io/projects/canbus-interop/): Seven independent CAN references in containers behind one contract: can-utils with the kernel's ISO-TP, python-can, socketcan-rs, Scapy, python-can-isotp, cantools and canmatrix, on Linux virtual CAN. Source: https://github.com/otfabric/canbus-interop - [canopen-interop](https://otfabric.io/projects/canopen-interop/): Three independent CANopen stacks in containers behind one contract, as devices and masters: CANopenNode, Lely CANopen and python canopen, with EDS checkers, LSS, MPDOs and the CiA 302 boot-up, on Linux virtual CAN. Source: https://github.com/otfabric/canopen-interop - [dnp3-interop](https://otfabric.io/projects/dnp3-interop/): DNP3 reference stacks: opendnp3, DSC go-dnp3 and dnp3py as masters and outstations, over TCP, TLS, UDP and serial. Source: https://github.com/otfabric/dnp3-interop - [ethernetip-interop](https://otfabric.io/projects/ethernetip-interop/): Twelve EtherNet/IP reference stacks in eight languages, from OpENer and libplctag to pycomm3, gologix, eip-rs and EEIP.NET, as targets and originators, with Class 1 I/O, Class 3 and Logix fixtures. Source: https://github.com/otfabric/ethernetip-interop - [iec104-interop](https://otfabric.io/projects/iec104-interop/): IEC 104 reference stations: lib60870, OpenMUC j60870, wendy512 and cB-Sigma, the last with IEC 62351-5. Source: https://github.com/otfabric/iec104-interop - [iec61850-interop](https://otfabric.io/projects/iec61850-interop/): IEC 61850 reference stacks as containers: libiec61850, IEC61850bean, dscsystems/go-iec61850 and iec61850-rust, for MMS, IED services, GOOSE and Sampled Values. Formerly mms-interop. Source: https://github.com/otfabric/iec61850-interop - [ieee20305-interop](https://otfabric.io/projects/ieee20305-interop/): IEEE 2030.5 reference stacks: ANU Envoy, GridAPPS-D, DER Security py20305 and the EPRI client, with mutual TLS and baseline, CSIP and CSIP-AUS fixtures. Source: https://github.com/otfabric/ieee20305-interop - [knx-interop](https://otfabric.io/projects/knx-interop/): Four independent KNX implementations in containers behind one contract: Calimero server and tools, knxd, xknx and KNXUltimate, with a raw probe for negative tests, across tunnelling, routing, datapoint types, TCP, device management and KNX Secure. Source: https://github.com/otfabric/knx-interop - [modbus-interop](https://otfabric.io/projects/modbus-interop/): Modbus TCP reference stacks: libmodbus, PyModbus, digitalpetri, NModbus and tokio-modbus. Source: https://github.com/otfabric/modbus-interop - [ocpp-interop](https://otfabric.io/projects/ocpp-interop/): OCPP reference stacks: The Mobility House ocpp, ChargeTimeEU Java-OCA-OCPP, ocpp-go, EVerest libocpp and CitrineOS, for 1.6J, 2.0.1 and 2.1. Source: https://github.com/otfabric/ocpp-interop - [opcua-interop](https://otfabric.io/projects/opcua-interop/): OPC UA reference clients and servers: open62541, Eclipse Milo, async-opcua, UA-.NETStandard (with its GDS), node-opcua and opcua-asyncio. Source: https://github.com/otfabric/opcua-interop - [openadr-interop](https://otfabric.io/projects/openadr-interop/): OpenADR 3 reference stacks: the OpenLEADR VTN and the ElaadNL client, plus a specification-driven conformance suite. Source: https://github.com/otfabric/openadr-interop - [profinet-interop](https://otfabric.io/projects/profinet-interop/): Independent PROFINET references in containers: rt-labs p-net and pnio-rs as IO-Devices, profinet-py as IO-Controller, pnio-dcp, two MRP ring nodes, Net-SNMP, and Wireshark and scapy as decoders. Source: https://github.com/otfabric/profinet-interop - [snap7-interop](https://otfabric.io/projects/snap7-interop/): Fixture-driven Snap7 servers (native and pure Python) for testing S7 clients. Source: https://github.com/otfabric/snap7-interop - [sparkplugb-interop](https://otfabric.io/projects/sparkplugb-interop/): Six Sparkplug B reference stacks in six languages, Eclipse Tahu (Java and JavaScript), pysparkplug, SparkplugNet, srad and sparkplughost, as edge nodes and host applications on Mosquitto, HiveMQ CE, EMQX and NanoMQ. Source: https://github.com/otfabric/sparkplugb-interop ### UI apps - [Modbus Trace Explorer](https://otfabric.io/projects/modbus-trace-explorer/): Open a packet trace of Modbus/TCP traffic and see it in Modbus terms: every request with its response, per device, per poll and per register. Then export the real traffic to replay as a simulated device. Source: https://github.com/otfabric/modbus-trace-explorer - [SunSpec Explorer](https://otfabric.io/projects/sunspec-explorer/): Connect to a SunSpec inverter, meter or battery and see every model it exposes fully decoded. Read once or poll, record and export, without ever writing to the device. Source: https://github.com/otfabric/sunspec-explorer ## Blog - [Who is the client? Industrial roles, bidirectional RPC and publish/subscribe](https://otfabric.io/blog/industrial-client-server-pubsub-roles/): Does the participant that opens the connection always control the conversation? Not in OCPP, where chargers dial out and then answer remote commands; not in KNX, where there is no client at all; and not in OPC UA, where reverse connect and PubSub change the picture. Connection ownership, application roles and message direction are separate design concerns. - [Time, freshness and ordering in industrial communication](https://otfabric.io/blog/industrial-data-time-freshness-ordering/): When an industrial measurement arrives, what do you actually know about its age? Source time, acquisition time and receive time differ; sampling and publishing intervals differ; arrival order is not occurrence order; and a value can look perfectly plausible long after it went stale. How Modbus, OPC UA, DNP3, IEC 104, IEC 61850, EtherNet/IP, PROFINET and CANopen help, and where they do not. - [Industrial events and alarms: delivery, persistence and recovery](https://otfabric.io/blog/industrial-events-alarms-reliability/): When something changes while you are disconnected, can you find out afterwards? BACnet, OPC UA, IEC 104, DNP3, IEC 61850, CANopen, KNX and OCPP answer differently, from recovered history with time stamps to a known gap to silent loss. Support for notifications is not the same as guaranteed event history. - [Designing a multi-protocol OT gateway without hiding the differences](https://otfabric.io/blog/industrial-multiprotocol-gateway-architecture/): How should a software engineer design an application that talks to Modbus, OPC UA, DNP3, IEC 104, PROFINET and OCPP at once? Not with one universal device client. Capability-driven adapters, separate polling, event, cyclic and command paths, explicit lifecycle state machines, and values that carry time, quality and provenance keep the protocol contracts intact. - [Reading industrial data: polling, subscriptions, events and cyclic I/O](https://otfabric.io/blog/industrial-protocol-read-patterns/): Who decides when your application receives a measurement? In Modbus and S7 the client does; in OPC UA and BACnet a subscription hands that decision to the server; in DNP3 and IEC 104 the device reports and keeps events; in PROFINET, EtherNet/IP and CANopen a configured cycle does. Each choice has a cost in freshness, device load and correctness. - [Reconnecting is not recovering: industrial connection and session lifecycles](https://otfabric.io/blog/industrial-protocol-session-recovery/): What state must be rebuilt after an industrial connection fails? A new socket is only the first of several steps. OPC UA, IEC 104, DNP3, PROFINET, EtherNet/IP, CANopen, OCPP, OpenADR and IEEE 2030.5 each need their own sequence of session setup, resynchronization and replay before data can be trusted again. - [Writing to industrial equipment: why an acknowledgement is not the same as execution](https://otfabric.io/blog/industrial-protocol-write-control-semantics/): What does a successful command actually guarantee? A Modbus write, a DNP3 select-before-operate, an IEC 104 command, an IEC 61850 control, a PROFINET output, an OCPP remote start and an IEEE 2030.5 DER control each confirm something different. Separating delivered, accepted, executed and verified makes retries safe and results honest. - [14 industrial protocols, 5 communication patterns: a software architect’s guide to OT](https://otfabric.io/blog/industrial-protocols-software-architecture/): Industrial communication is not one architecture with fourteen wire formats. Modbus, OPC UA, BACnet, IEC 104, IEC 61850, S7, DNP3, EtherNet/IP, PROFINET, CANopen, KNX, OCPP, OpenADR and IEEE 2030.5 make different promises about who speaks, when data moves, what an acknowledgement means and what survives a failure. This guide maps them onto five patterns, and those patterns onto software architecture. - [Why industrial real-time communication is not just faster TCP](https://otfabric.io/blog/industrial-real-time-ethernet-fieldbus/): PROFINET, EtherNet/IP, CANopen, IEC 61850 GOOSE and Sampled Values bypass ordinary request/response networking for a reason. Real time is about bounded latency, jitter, deadlines, watchdogs and freshness, not raw speed, and it changes what your software, your containers and your test networks must provide. - [CANopen on CAN bus: go-canopen, canopenctl and three independent reference stacks](https://otfabric.io/blog/introducing-canopen/): CANopen is the protocol that turns a CAN bus into a network of drives, I/O modules and machines. go-canopen implements it under MIT on top of go-canbus, with LSS, the CiA 302 network boot-up, EDS files, CiA 402 drives and CANopen FD, canopenctl puts it on the command line read-only by default, and canopen-interop tests it against CANopenNode, Lely CANopen and python canopen. - [KNX joins OT Fabric: go-knx, knxctl and four independent reference stacks](https://otfabric.io/blog/introducing-knx/): KNX is the building control standard of switches, dimmers, blinds and heating valves. go-knx implements KNX over KNXnet/IP under MIT, with tunnelling, routing, a KNXnet/IP server, KNX IP Secure and Data Secure, knxctl puts it on the command line passive by default, and knx-interop tests it against Calimero, knxd, xknx and KNXUltimate. - [CAN bus joins OT Fabric: go-canbus, canbusctl and independent reference stacks](https://otfabric.io/blog/introducing-can-bus/): CAN connects the controllers inside battery packs, inverters, chargers, vehicles and machines. go-canbus implements classical CAN, CAN FD and CAN XL under MIT, with ISO-TP, seven trace formats and DBC, KCD and ARXML databases, canbusctl puts it on the command line with safety guards for real buses, and canbus-interop tests it against seven independent implementations. - [openadrctl: OpenADR 3 from the command line, in every role](https://otfabric.io/blog/introducing-openadrctl/): openadrctl acts as a VEN or as Business Logic against any OpenADR 3 VTN, publishes prices and limits, listens for notifications by webhook, MQTT or WebSocket, and serves a test VTN from a seed file. With go-openadr v0.5.0 it also talks to VTNs of OpenADR 3.0.1. - [PROFINET joins OT Fabric: go-profinet, profinetctl and independent reference stacks](https://otfabric.io/blog/introducing-profinet/): PROFINET IO connects PLCs to the remote I/O, drives and field devices of a plant. go-profinet implements IO-Controller and IO-Device under MIT, with DCP, records, alarms, GSDML and MRP rings, profinetctl puts them on the command line, and profinet-interop tests both on real Layer 2 networks against independent implementations. - [Full IEC 61850 in OT Fabric: MMS, GOOSE and Sampled Values in one library](https://otfabric.io/blog/introducing-full-iec-61850/): OT Fabric's IEC 61850 stack now covers the whole communication side of the standard. go-iec61850 adds GOOSE and Sampled Values to a hardened MMS client and server, iec61850ctl sniffs, subscribes and publishes on the station bus, and iec61850-interop tests both against four independent stacks. - [otprobe: which OT protocol is on that port, and which device is behind it](https://otfabric.io/blog/introducing-otprobe/): go-otfp v0.1.0 is a rewrite of OT Fabric's protocol fingerprinting library. It detects 14 OT protocols over TCP, UDP and TLS with safe, read-only probes, reads the device identity each protocol offers, and ships with otprobe, a command-line tool for the field. - [Sparkplug B joins OT Fabric: go-sparkplugb, sparkplugbctl and six reference stacks](https://otfabric.io/blog/introducing-sparkplug-b/): Sparkplug B gives MQTT the session state that industrial data needs. go-sparkplugb implements edge node, primary host application and application under MIT, sparkplugbctl puts them on the command line, and sparkplugb-interop tests both against six independent implementations on four MQTT brokers. - [EtherNet/IP joins OT Fabric: go-ethernetip, ethernetipctl and twelve reference stacks](https://otfabric.io/blog/introducing-ethernet-ip/): EtherNet/IP is how PLCs talk to the I/O, drives and controllers on the factory floor. go-ethernetip implements client, scanner and adapter under MIT, with Logix tags and EDS files, ethernetipctl puts them on the command line, and ethernetip-interop tests both against twelve independent implementations in eight languages. - [IEEE 2030.5 joins OT Fabric: go-ieee20305, ieee20305ctl and four reference stacks](https://otfabric.io/blog/introducing-ieee-2030-5/): IEEE 2030.5 is how utilities and aggregators tell inverters, batteries and chargers what to do, and the protocol California and Australia require for it. go-ieee20305 implements client, device agent and server under MIT, ieee20305ctl puts them on the command line, and ieee20305-interop tests both against four independent implementations. - [DNP3 joins OT Fabric: go-dnp3, dnp3ctl and three reference stacks](https://otfabric.io/blog/introducing-dnp3/): DNP3 is the SCADA protocol of electric, water and oil and gas utilities, and the open-source field around it has thinned out. go-dnp3 implements master and outstation under MIT, dnp3ctl puts it on the command line, and dnp3-interop tests both against three independent implementations. - [OCPP joins OT Fabric: go-ocpp, ocppctl and five reference stacks](https://otfabric.io/blog/introducing-ocpp/): OCPP is the protocol between EV charging stations and the systems that run them. go-ocpp implements 1.6J, 2.0.1 and 2.1 in both roles, ocppctl puts it on the command line, and ocpp-interop tests both against five independent implementations. - [The industrial protocol stack landscape](https://otfabric.io/blog/industrial-protocol-stack-landscape/): Who implements Modbus, OPC UA, BACnet, IEC 104, IEC 61850, Siemens S7, OpenADR, OCPP, DNP3, IEEE 2030.5, EtherNet/IP, PROFINET, CAN bus, CANopen, KNX and the Sparkplug B profile? 268 open-source and commercial stacks, verified against their own release channels, and an interactive map to explore them. - [LAN Tracker: a memory for your OT network](https://otfabric.io/blog/introducing-lan-tracker/): Network problems are one of the top causes of OT downtime, and most leave no trace. LAN Tracker keeps an evidence-based history of which device held which IP, what DHCP told it and which ports answered, so you can reconstruct an incident after the fact. - [Modbus Trace Explorer: packet traces in Modbus terms](https://otfabric.io/blog/introducing-modbus-trace-explorer/): Open a tcpdump or Wireshark capture of Modbus/TCP traffic and see latency per device, poll plans, exceptions, registers and connections. Then export what the devices really answered and replay it as a simulated device. - [Introducing OT Fabric](https://otfabric.io/blog/introducing-ot-fabric/): OT Fabric brings open-source DNA and IT best practices to industrial connectivity, for people and AI agents alike. The OT toolset you always wished you had in your pocket, built by people and AI agents together. - [Why every protocol gets an interop suite](https://otfabric.io/blog/why-every-protocol-gets-an-interop-suite/): Every OT Fabric protocol is tested against independent implementations. Sixteen interop suites package 76 reference stacks as containers behind one contract, test them against each other first, and record what they find in our code and in theirs. ## Ecosystem map - [Industrial Protocol Stack Landscape](https://otfabric.io/ecosystem/implementations/): Interactive map of 268 open-source and commercial implementations of the protocols and profiles above, with language, licence, roles and latest release. Data: https://github.com/otfabric/website/blob/main/src/data/ecosystem.json ## Standards and alliances - [Industrial protocol standards and alliances](https://otfabric.io/ecosystem/organizations/): Independent directory of 19 standards bodies, alliances, user groups and open-source foundations, with membership tiers, published fees, free routes in and interoperability programs. Every fact cites its official source. Listing does not imply affiliation. - [ASHRAE](https://otfabric.io/ecosystem/organizations/#org-ashrae): Publishes ANSI/ASHRAE Standard 135 (BACnet) through its BACnet Committee, SSPC 135. - [BACnet International](https://otfabric.io/ecosystem/organizations/#org-bacnet-international): Promotes BACnet and runs BTL testing, certification and the PlugFest; free individual participation. - [CAN in Automation](https://otfabric.io/ecosystem/organizations/cia/): Nonprofit association of CAN users and manufacturers: CAN FD and CAN XL recommendations, CANopen and device profiles, conformance testing and plugfests. - [CharIN](https://otfabric.io/ecosystem/organizations/#org-charin): Promotes the CCS, MCS and NACS charging interfaces, with working groups and Testivals. - [DNP Users Group](https://otfabric.io/ecosystem/organizations/#org-dnp-users-group): Supports DNP3 (IEEE 1815) users, holds the member document library and runs conformance testing. - [Eclipse Foundation](https://otfabric.io/ecosystem/organizations/#org-eclipse-foundation): Open-source foundation behind the Sparkplug specification and Eclipse Tahu, and host of Eclipse Milo (OPC UA); committer membership is free. - [IEEE Standards Association](https://otfabric.io/ecosystem/organizations/#org-ieee-sa): Publishes IEEE 1815 (DNP3) and IEEE 2030.5; working-group participation is open to everyone. - [International Electrotechnical Commission](https://otfabric.io/ecosystem/organizations/#org-iec): Publishes IEC 61850 and IEC 60870-5 through TC 57, and the IEC 61158 and 61784 fieldbus series through SC 65C; experts join via national committees. - [International Society of Automation](https://otfabric.io/ecosystem/organizations/#org-isa): Publishes the ISA/IEC 62443 OT security series; standards committees are open without membership. - [KNX Association](https://otfabric.io/ecosystem/organizations/knx-association/): Owner of the KNX standard for home and building control: specifications, ETS, product certification through accredited test labs, and training of KNX Partners. - [LF Energy](https://otfabric.io/ecosystem/organizations/lf-energy/): Linux Foundation home for open-source energy software, including EVerest, CitrineOS, OpenLEADR and CoMPAS. - [Modbus Organization](https://otfabric.io/ecosystem/organizations/#org-modbus-organization): Maintains the Modbus specifications and runs a conformance self-test and logo program. - [ODVA](https://otfabric.io/ecosystem/organizations/odva/): Maintains CIP and EtherNet/IP, licenses vendors, runs conformance testing and hosts the PlugFest interoperability events. - [OPC Foundation](https://otfabric.io/ecosystem/organizations/opc-foundation/): Develops OPC UA, runs certification test labs and maintains the open-source .NET reference stack. - [Open Charge Alliance](https://otfabric.io/ecosystem/organizations/open-charge-alliance/): Develops OCPP, publishes it free, and runs certification, the OCTT test tool and plugfests. - [OpenADR Alliance](https://otfabric.io/ecosystem/organizations/#org-openadr-alliance): Maintains the OpenADR 2.0 and 3.0 specifications and certifies OpenADR products. - [PROFIBUS & PROFINET International](https://otfabric.io/ecosystem/organizations/pi/): Maintains PROFINET, PROFIBUS and IO-Link, runs mandatory PROFINET certification through PI Test Labs and offers members its Community Stack. - [SunSpec Alliance](https://otfabric.io/ecosystem/organizations/sunspec-alliance/): Information models, IEEE 2030.5 / CSIP certification and interoperability programs for distributed energy resources. - [UCA International Users Group](https://otfabric.io/ecosystem/organizations/uca-international/): User groups for IEC 61850, CIM and OpenFMB, and the IEC 61850 interoperability (IOP) testing event. ## Data - [Ecosystem registry (JSON)](https://otfabric.io/ecosystem.json): The data behind the ecosystem map: every implementation with protocol, type, languages, licence, roles, capabilities, maintenance, latest release, sources and verification date. - [Standards and alliances dataset (JSON)](https://otfabric.io/ecosystem/organizations.json): The data behind the directory: every organization with access answers, membership tiers, fees, programs, sources and verification dates. - [SunSpec device file schema](https://otfabric.io/schemas/sunspec/devicefile-1.schema.json): JSON Schema for SunSpec device files, as served by sunspecctl and exported by SunSpec Explorer. - [Blog RSS feed](https://otfabric.io/blog/rss.xml) ## Optional - [About OT Fabric](https://otfabric.io/about/): Why OT Fabric exists, how it is built, and where it is heading. - [Contact](https://otfabric.io/contact/): Email admin@otfabric.io, or reach the team on LinkedIn and GitHub. - [Full text for LLMs](https://otfabric.io/llms-full.txt): Every protocol, information-model and profile page, documentation page, project and blog post in one Markdown file. - [OT MCP servers (planned)](https://otfabric.io/projects/): A structured, safe way for AI agents to discover, read and work with industrial devices. - [IT2OT gateways and connectors (planned)](https://otfabric.io/projects/): Move OT data safely into the IT, cloud and analytics systems that need it.