Skip to content

Service

Custom Niagara modules and drivers

When the driver you need does not exist, or the stock one does not do the thing the job actually requires. rt, wb and ux modules written against the Baja API, signed, and stamped to install across a mixed estate.

  • Baja API
  • rt / wb / ux
  • Pure Java
  • Signed modules
  • Source on request

What this covers

Drivers for unsupported equipment

Plant, meters and controllers with a documented protocol but no Niagara driver. In practice that means one of four things: a legacy field bus from a system that predates Niagara and is still running the building, a serial or IP protocol with a published specification, a vendor REST or MQTT API, or a proprietary register map supplied by the manufacturer. Modelled as a proper network / device / point tree so it behaves like any other driver under Workbench, with discovery, ping monitoring and status propagation.

Station services

Components that live under Services and do work on a schedule or on a change of value: exports, reconciliation, derived points, watchdogs, bulk alarm shaping. Configured from Workbench like any stock service.

Integrations outward

Pushing station data outward: MQTT topics with a payload decoder for structured payloads, LoRaWAN sensors arriving through a network server, cloud-side schemas built to match what the consumer expects — with buffering and retry, so a network outage does not silently lose a day of readings.

Extending what is already there

A subclass of an existing component, an extra slot on a point, a new action on a device. Often the cheapest route: reuse the stock driver, add the one behaviour the specification demands.

How the module is built

The constraints below are not preferences. They are what makes a module still work in three years, on hardware you have not bought yet.

ConstraintWhy it is held
No native code Pure Java plus JS and CSS resources. A module with a native library has to be built per architecture, and will not load on a QNX/ARM JACE at all. One build runs on the controller and on an x86 Supervisor.
Stamped to the oldest version it must support A module's declared dependency is a minimum, not a pin. Stamped to the oldest version in your estate it installs there and on everything above it; stamped to a newer one it is refused outright by the older stations. Stamping to your floor means one build covers a mixed estate.
Signed Every module ships signed. Niagara 4 defaults to moduleVerificationMode=medium, which requires a trusted certificate; hardened sites run high, which requires a CA-issued one. Niagara 5 makes a valid signature mandatory with no grace period.
Checked against Java 25 New work is scanned against a Java 25 JDK — the runtime Tridium's current Niagara 5 FAQ names — and does not depend on SecurityManager, which Niagara 5 removes. The same source keeps building for Niagara 4.
Small A JACE is an ARM controller with a fraction of a laptop's memory. Few modules, small jars, no framework hauled in for one utility method.

Deliverables

What you actually receive

Fixed price per deliverable, quoted against a written specification. No hourly billing, and no price before the scope is in writing.

DeliverableDetail
A written specificationAgreed before a price exists. Point model, protocol behaviour, failure behaviour, target Niagara version, target hardware.
The signed moduleBuilt, signed and stamped to your floor version, with the palette entries and Workbench views the spec calls for.
An installation noteWhich station, which service container, what to set, and how to verify it is working — written for the engineer who commissions it, not for a developer.
Source on requestBespoke work can be delivered with source, so the module does not die if this practice does.

Also

Other services

Notes

Written up in more detail

The engineering behind this service, in public, with no pitch attached. All notes.

Next step

Send the protocol document and the point list.

A day of reading them is usually enough to say whether this is a driver, a stock feature you have not found, or a job that should not be a module at all. That answer costs nothing.