DT5215 Control SDK

Everything the DT5215's web interface can do, from your own program — in Python, C, C++, Go, .NET, Node.js and Java, or from a shell with nothing but curl.

import dt5215

with dt5215.connect("192.168.0.10", username="user", password="user") as dev:
    print(dev.info().hostname, dev.info().info.sw_release)

    for chain in dev.chains.status().enabled:
        print(f"chain {chain.chain}: {chain.board_count} boards, {chain.mbps:.1f} Mbps")

    for board in dev.chains.links().boards:
        print(board.id, board.name, board.tempBoard, "C", board.status.faults)

Documentation: https://downloads.nuclearinstruments.eu/package/dt5215-control-sdk · Download: https://downloads.nuclearinstruments.eu/package/dt5215-control-sdk


Install

Pythonpip install dt5215
Node.jsnpm install @nuclearinstruments/dt5215
.NETdotnet add package Dt5215.Sdk
Javaeu.nuclearinstruments:dt5215:1.0.2 (Maven)
C / C++apt install dt5215-sdk / dt5215-sdk-cpp, or the tarball, or cmake --install from this repository
Gonuclearinstruments.eu/dt5215 — see sdk/go/README.md for the module path
WindowsDT5215-SDK-Setup.exe: the C, C++, .NET, Python, Node.js and Java packages, the examples and the documentation, offline
No SDKthe instrument speaks plain HTTP/JSON — the protocol is documented

What it covers

Identity and healthhostname, PID, firmware releases, temperatures and voltages, the fan, the error flags, the front panel LEDs
The eight TDlink chainsstate, rates, buffers, the SFP+ of each cage, enabling and disabling, the whole enumeration with its progress
The FERS boardsevery board found, its status bits, temperatures, trigger counters, HV; registers read and written over TDlink; the firmware upgrade of the boards
The front panelLEMO direction and function, the sync matrix, the test pulse, the software sync
The clock treethe master PLL and its references, the DDMTD phase detectors and their histograms, the link phase
Timethe GPS receiver and its fix, the PPS, the FPGA time counter, the system clock, systemd-timesyncd
The systemthe application log, the debug monitors, the configuration file, the network interfaces and their traffic, reboot and system upgrade

Event data is not here. It leaves the instrument over the binary control (9760) and streaming (9000) sockets that Janus and FERSlib speak. This SDK is the control plane: what you reach for to set an instrument up, to watch it, and to find out why a chain is down.

The same API in every language

LanguageInstallCall
Pythonpip install dt5215dev.chains.status()
Clibdt5215dt5215_chains_status(dev, &out)
C++libdt5215_cppdev.chains().status()
Gonuclearinstruments.eu/dt5215dev.Chains.Status(ctx)
.NETDt5215.Sdkawait dev.Chains.StatusAsync()
Node.js@nuclearinstruments/dt5215await dev.chains.status()
Javaeu.nuclearinstruments:dt5215dev.chains().status()
curl—curl -H "Authorization: Bearer $TOKEN" $HOST/api-v1.0/chains_status

One contract — spec/dt5215-api.yaml, 66 operations in 9 groups — implemented natively in each language: no language wraps another, none of them needs a shared library, and installing one does not drag in another's runtime. The API reference shows every operation with its endpoint and the same call in all eight.

Errors

Six kinds, the same meaning and the same numeric code in every language: ConnectionError (-1), Timeout (-2), DeviceError (-3), AuthError (-4), NotSupported (-5), InvalidArgument (-6). InvalidArgument is the one that guarantees nothing was sent. See errors.

Without an instrument

pip install dt5215-emulator
dt5215-emulator --port 8080

DT5215_HOST=127.0.0.1:8080 dt5215 info

A DT5215 on localhost that answers the whole API, statefully, and reproduces the firmware's awkward behaviours on purpose. Every SDK in this repository is tested against it, in CI, so seven languages are exercised on every commit with no hardware in the rack. See the emulator.

HTTPS

The instrument serves plain HTTP today. HTTPS is coming, and every SDK here already accepts an https:// URL with verification on by default, a CA bundle, a client certificate and an insecure switch for a self-signed certificate. Nothing in your program changes the day the firmware serves TLS. See compatibility.

Repository layout

PathWhat
spec/the contract: dt5215-api.yaml, errors.md, compat.md
sdk/<language>/one native implementation each, with its build, tests, examples and README
emulator/the Python instrument emulator
ci-test/the conformance runner and what every language asserts
docs/the documentation site (the API reference is generated from the spec)
tools/check_spec.py, gen_api_docs.py, set_version.py, the CI helpers
packaging/the Windows installer and the packaging notes

MIT licensed. © 2026 Nuclear Instruments SRL.

DT5215 Control SDK icon

DT5215 Control SDK

The control and monitoring SDK of the DT5215 FERS concentrator: everything its web interface can do, from your own program. Identity and health, the eight TDlink chains and their enumeration, the FERS boards (status, registers, HV, firmware upgrade), the front panel I/O, the clock tree, GPS and the system clock. One API, native in Python, C, C++, Go, .NET, Node.js and Java — or plain HTTP with no SDK at all. With a firmware emulator, so you can write and test code with no instrument.

License:
Source Code
Git Repository