Skip to content

How it works

Not a black box between your products

openDAQ is an open-source data acquisition SDK built on one model that every compatible DAQ device and measurement application shares. Modules connect real hardware, existing protocols and reusable processing to it.

The architecture

How is openDAQ built?

The Core is the model every participant shares. Modules are how real devices, supported protocols and reusable processing plug into it and the same Core runs in the device and in the application.

Application · client

Your application

C++ · Python · C

openDAQ instance

openDAQ Core

devices · signals · properties · time

plus

Protocol integrations as client

connect out and mirror the remote tree

Function blocks

scaling · filters · FFT

Every device it connects to appears inside it as if local.

daq.nd://daq.opcua://daq.lt://

Device · server

A compatible device

instrument · standalone device

openDAQ instance

openDAQ Core

devices · signals · properties · time

plus

Device module

describes the local hardware as the root

Protocol integrations as server

native · OPC UA · LT · mDNS

Runs on the device itself or on a PC beside it.

The same Core sits in both and only the modules differ. This is why a device and an application are the same SDK rather than two products. The client mirrors the server's component tree so a remote device reads like a local one. Nothing sits between them but a protocol.

Device modules

A device module abstracts the local system the openDAQ instance is running on (a SIRIUS X, a FusionLN, a PC) and presents it in the openDAQ model as the root of the tree. It is the piece a device vendor writes. It does not connect out to anything. It describes what is here.

Protocol integrations

A protocol integration works in both directions. Facing outward it connects to something external over a protocol such as OPC UA, MQTT or ASAM CMP and brings it in as a device. Facing inward it exposes the openDAQ model through a protocol as a server. In either case the standard is carried through rather than replaced.

Protocol-based compatibility depends on the specific protocol, profile and capability a product implements. It has to be identified and verified per product.

Function blocks

A function block forms no connection at all. It performs a function inside the system such as processing, data generation, a data sink or configuring a subsystem by taking signals in and publishing signals out. Scaling, filtering, statistics and FFT are reusable and indifferent to which vendor made the device underneath. A function block can run on the device itself or in the application that reads it.

The three are easy to tell apart by one question: does it connect to anything? A device module describes what is here. A protocol integration connects out or serves. A function block does neither.

What it actually does

What do discovery, configuration and streaming do?

Every compatible product exposes these three through the same model and that is what lets one application work against many vendors' hardware.

openDAQ discovers compatible devices over mDNS on IPv4 and IPv6 so that an application can list what is reachable instead of asking an operator for IP addresses. Discovery also reports which connection and streaming capabilities each device offers.

  • mDNS discovery across IPv4 and IPv6
  • Devices announce their available connection capabilities
  • Works alongside explicit connection strings when a device is not local
Pythonillustrative
import opendaq as daq
# list every compatible device on the network
instance = daq.Instance()
for info in instance.available_devices:
    print(info.name, info.connection_string)

Protocol integrations

Some products are already halfway there

A protocol integration maps a supported protocol and profile into the same common model. Where a product already speaks one of them that shared mapping can carry it into the ecosystem without a product-specific device module.

Product implements a protocol

e.g. OPC UA or ASAM CMP

Shared protocol integration

maps protocol → openDAQ model

Common device and signal model

same structure every client reads

Where a product already implements a supported protocol and profile, this shared mapping can make it compatible without a product-specific device module. The required protocol, profile and capability have to be identified and verified per product and implementing a named protocol does not by itself guarantee full compatibility.

Function blocks

Reusable processing separate from device access

Function blocks take signals in, calculate or analyse and publish signals out. Chain them into a processing pipeline that works the same regardless of which vendor produced the device underneath. They run wherever openDAQ runs, on the device itself or in the application that reads it.

Input signals

from any compatible device

Scaling

function block

FFT

function block

Output signals

published back into the model

Function blocks accept input signals, calculate or analyse data and publish output signals inside a full openDAQ SDK instance on the device itself or in the application. Outputs are ordinary signals so the next block or the application consumes them the same way. They are a processing layer and not a device-compatibility mechanism.

Why one shared model

Why does openDAQ exist?

Without it every measurement software vendor builds and maintains its own adapter layer for the same devices.

Today: one adapter layer per vendor

OPC UA device

any vendor

DAQ device

any vendor

MQTT device

any vendor

Software A

own adapters, own drivers

Software B

own adapters, own drivers

With openDAQ: one shared layer

OPC UA device

any vendor

DAQ device

any vendor

MQTT device

any vendor

openDAQ

the adapter, once

Software A

integrates the model

Software B

integrates the model

It is not a matrix. It is the same adapter layer rebuilt by every vendor. Each measurement software carries its own OPC UA adapter, its own MQTT adapter and its own device drivers and maintains all of them alone. openDAQ is that layer written once so an application integrates the model and every compatible device comes with it.

How to validate

How do I check it against my own products?

Start with a free conversation about your use case.

Free

Technical discovery call

Bring a device, an application or a mixed-vendor system. We review the use case together and state whether openDAQ fits it and what the first bounded step would be.

On request

Guided proof of concept

A bounded prototype against your real product exposes enough device structure to establish discovery and basic streaming. It then provides a measure of what a full implementation would take.

On request

Training and workshops

Hands-on sessions for the engineers who will do the work. They are shaped around your architecture rather than a generic curriculum.

Every service is quoted per offer and several can be combined into one bundle with one scope and one price. A paid proof-of-concept fee may be credited toward a later engagement where the offer states this.

Built for a product lifecycle

Products live for a decade. This is what that bet rests on.

Stable API

Breaking changes are exceptional. When one is unavoidable the release notes highlight it and explain what product teams need to do to mitigate it.

2–3 releases a year

A predictable cadence that product maintenance can be planned around. Releases are published openly on GitHub.

Backward compatible

New applications are designed to work with older openDAQ devices. Applications kept current also work with newer devices and modules.

Apache 2.0 open source

The SDK is public and permissively licensed. The shareholder companies ship openDAQ across their new products.

Common questions

The things people ask first

Is openDAQ free to use?
Yes. The SDK is free under Apache 2.0 with no feature gating and no seat count. You can build a commercial product on it, ship it and sell it without paying anyone or telling openDAQ. openDAQ d.o.o. earns from membership and services. Community membership is free and paid membership starts at €10,000 per year.

Membership & services

Which programming languages does openDAQ support?
The SDK is written in C++ and the same API is available through five language bindings: C++, Python, C#, C and Delphi. It runs on Windows, Linux and macOS and devices running a real-time operating system use openDAQ LT, a set of plain C stacks. The current release is 3.40.3, published in August 2026, and the simulator on this site walks through seven short programs in Python or C++.

Try the API in the simulator

How do I make my device openDAQ compatible?
Write a device module that maps the product into the openDAQ model, or use a shared protocol integration where the product already speaks a supported protocol. Then have the product tested in the openDAQ compliance lab. Each track has four checks and all four must pass. Testing is included in the Advanced, Premium and Diamond memberships.

Certification in detail

Who is behind openDAQ?
openDAQ d.o.o. is a separate company registered in Trbovlje, Slovenia. Dewesoft and HBK founded it as a joint venture in 2022 and are its shareholders. The company pursues its own goal of an open standard that every vendor can adopt on equal terms. The founders build on the same public SDK as every other adopter. 14 companies are listed as using it.

About openDAQ

Could Dewesoft or HBK take control of the standard?
The structure is designed to prevent that. The SDK is public under Apache 2.0 so anyone may use, change and fork it whatever any company decides. openDAQ d.o.o. succeeds only when products from many vendors adopt the standard and favouring its shareholders would work against that goal. The compliance lab applies the same checks to every product whoever makes it.

How certification works

Next step

Tell us what you are trying to connect

A device, an application, a mixed-vendor system or a question. One contact route handles technical evaluation, partnership, membership and certification. You do not have to work out which department you need.