Niagara Graphics and Operator Dashboards

The graphics are the building automation system, as far as most of the people using it are concerned. An operator does not experience your integration work or your control logic — they experience the screen at 6am when something is wrong. Niagara graphics and dashboard development is the work of making that screen answer the question quickly.

What We Build

  • Operator graphics — plant and floor views that show state clearly rather than decoratively.
  • HTML5 and mobile-friendly views — usable on a phone in a plant room, not just on a workstation.
  • Alarm and event consoles — prioritised so the important thing is visible, not buried in noise.
  • Energy and performance dashboards — consumption, demand and anomalies in a form a facilities manager can act on.
  • Portfolio and executive views — roll-ups across many buildings for people who will never open Workbench.
  • Custom UX modules — BajaScript and JavaScript where stock widgets stop.

Legibility Is Not Decoration

Operators look at these screens for entire shifts. Colour that carries meaning consistently, hierarchy that puts the abnormal first, and text that is readable in a badly lit plant room are functional requirements, not styling preferences. We also build darker themes for exactly that reason.

An Honest Note on Migration

If you are moving from AX to N4, graphics are usually the largest single item of unexpected effort — legacy Px work often needs rebuilding rather than converting. We scope that explicitly as part of migration services instead of letting it surface halfway through.

Tell us who uses your screens and what they need to see and we will design graphics around that rather than around the equipment list.

Related services

Px or HTML5: Which Should a New Project Use?

Px views are native to Workbench. Your own engineers can maintain them, they inherit the station security model, and for plant and floor graphics they are quick to produce and quick to change on site. For a lot of buildings that is the whole answer, and adding a front-end toolchain would be a commitment with no return.

HTML5 UX modules earn their place when the interface needs to behave like a web application: responsive layouts across devices, charting beyond stock widgets, custom interactions, and components reused across many sites. They also bring a build pipeline and front-end maintenance into the picture, which someone has to own after handover. Webpack / Babel (in UX builds) and WebSockets (used in UX modules) describe what that ownership involves.

A Slow Graphic Is a Binding Problem

When a screen crawls, look at the bindings before the graphics. The causes to check first are subscription volume, unbounded BQL queries firing on page load, and history queries pulling long date ranges to draw a small chart. A view bound to every point in a plant will subscribe to every point in that plant whether or not the operator can see them.

The fixes are unglamorous: bind what is on screen, paginate long lists, summarize on the station side before the browser asks, and cache anything that does not change during a shift. What a Supervisor absorbs comfortably can overwhelm a JACE serving the same view, so the target host matters when the design is decided.

Alarm Consoles Do a Different Job

A plant graphic answers what is happening here. An alarm console answers what needs attention first, which is a triage task. That means grouping related alarms so one failed device does not present as twenty separate problems, distinguishing new events from ones already being worked, and giving the incoming shift a way to see what changed since the last one.

Known-bad points deserve explicit handling. A sensor awaiting replacement that alarms every few minutes teaches operators to clear the console without reading it, and a console nobody reads has stopped doing the job it was built for.

Navigation Across a Portfolio

Once more than a couple of buildings are in scope, navigation becomes the design problem. A hierarchy of portfolio, site, system and equipment only works if the underlying naming is consistent across sites, which is decided during integration long before anyone opens a graphics tool. Building Automation Integration Services and Project Haystack tagging are what make a portfolio view generate itself instead of being hand-built per building.

Where naming is inconsistent, the options are to normalize it first or to accept hand-built navigation and the maintenance that follows. Both are legitimate; only one of them scales.

Decide What Each Role Can Change

Graphics expose control. A screen that offers a setpoint field to someone with no authority to change it generates support calls and, occasionally, a comfort complaint nobody thinks to trace back to the screen. Niagara’s category and role model decides who may write to what, so a contractor sees their own plant, a facilities manager can adjust the setpoints that belong to them, and a tenant view stays read-only. What the permission model does not do is police the value itself. Limits on how far a setpoint may move are enforced on the station side, in the logic, before the write reaches the device.

Settle this during design. Retrofitting permissions onto finished graphics tends to mean rebuilding navigation, because the view structure and the permission structure end up entangled.

One View Per Equipment Type, Not Per Unit

Every dynamic element in a Px view resolves an ord. An ord written absolutely names the station and the full slot path down to the point, so the view it lives in works for exactly one air handler and nothing else. An ord written relative to the view's own base resolves against whatever component the view was opened on, so one file serves every unit of that type and the hyperlink that carries the target ord decides which unit the operator is looking at. That single distinction is usually the difference between forty files and one.

Relative binding has a precondition on the station rather than on the graphics. The component tree under each unit has to use the same slot names, not merely the same display names, or the shared view resolves on one unit and comes up empty on the next. Correcting that is station work, and it has to happen before the template is built rather than after it, because every view already pointed at the old paths follows the rename. Four things decide whether a view can be reused.

  • Identical slot names beneath every unit of a type, not just identical labels.
  • Bindings written relative to the view's base rather than to a station and slot path.
  • A hyperlink layer that passes the target ord, so the operator's click selects the unit.
  • Shared headers and navigation bands kept in their own Px files and pulled in with PxInclude, so a change to them is one edit.

A Value Without Its Status Is Half the Picture

Every point in Niagara carries a status alongside its value: ok, fault, down, disabled, stale, overridden, alarm, null. The value on its own cannot distinguish a sensor currently reporting 72 from a sensor that reported 72 before the field bus stopped answering. A bound label that renders only the value presents both cases identically, and the operator has no reason to doubt the number. Stale in particular is not a guess: the driver's tuning policy defines a stale time, and a point not refreshed inside it is marked rather than left looking live.

Bindings expose that status, so a widget can change color, gray out, or carry a separate marker when the point is down, stale, disabled or in fault. What each of those looks like is a design decision worth making explicitly, because the default is a screen that stays confident when it should not be. Writable points add a second case. A writable point resolves sixteen priority levels plus a fallback, and its output reflects the highest priority entry that is set, so an operator who types a setpoint and watches the field settle back somewhere else is usually looking at a higher priority write from a schedule, an emergency level, or an override someone left in place. Surfacing the active override next to the value turns that into information instead of a support call.

Charts Depend on Histories That Already Exist

A trend on a graphic does not read the live point. It reads a history that a history extension on that point has been collecting, which means the chart can only reach back as far as collection started. Adding the extension in the same week the dashboard is built produces a dashboard with a week of data in it, and that is normally discovered at the first review rather than during design.

Collection type decides volume. An interval extension samples at a fixed period whether the value moves or not. A change of value extension records only when the value moves past its configured delta, which needs to be small for a slow space temperature and larger for a noisy analog with no filtering, or it generates more records than the interval version would. Each extension also has a capacity in records and a full policy: roll discards the oldest record to make room, stop stops collecting. A dashboard advertising a year of trend on a point set to roll at a few thousand records will quietly show less than a year, without an error anywhere.

Which points get a history at all is a real decision, not a default. Points that appear on a chart, feed a calculation, or have to be defended after the fact need one; extensions added to everything else consume controller resources collecting data nobody queries. These are the items to settle before any chart is drawn.

  • Which points are trended, and from what date collection must have started.
  • Interval or change of value, and at what period or delta for each.
  • Capacity and full policy per extension, checked against the retention the dashboard implies.
  • Clock synchronization across stations, since a chart overlaying points from two stations is only as aligned as their two clocks.

What the Browser Gets

N4 serves views to a browser from the station's web service, without the Java applet that the AX applet based browser profiles depended on. That shift was forced from the browser side as much as from the framework: mainstream browsers dropped NPAPI plugin support, and applet delivered interfaces stopped working regardless of what a station was willing to serve. What replaced it is ordinary HTTPS traffic, and N4's web service is configured for HTTPS by default on port 443 with plain HTTP off.

Certificates matter more than they appear to. A station presenting a self signed certificate produces a browser warning at every login, and the people being trained to click through that warning are the same people holding command authority on the screens behind it. A certificate the browser already trusts removes both the warning and the habit.

Screen size is a layout constraint rather than a styling one. A Px view is laid out on a canvas with fixed dimensions and scales to fit the window instead of reflowing, so the same view on a phone arrives with smaller text and smaller touch targets rather than a rearranged layout. A separate Px view sized for a phone, carrying only the handful of values someone standing at the equipment needs, is often the smaller change, and it can coexist with the full workstation view rather than replacing it.

When Graphics Are Not the Fix

Some screens read badly because of what sits underneath them. Points named by controller address instead of by what they measure, values shown without units or at the wrong precision because facets were never set on the point, enumerations displaying as raw ordinals, alarms generated with no priority or class so everything arrives weighted the same. Point naming, facets, alarm configuration and history collection are dependencies a graphics rebuild rests on anyway, and they can be addressed first. Alarm priorities and alarm classes in particular are set on the station while the console decides how what the station generates is grouped and presented, so the two are settled together rather than one after the other.

The other case is that the data is not there at all. If a meter was never integrated, or a third party system has no driver in place, no graphic can display it, and that is integration scope rather than graphics scope. The test is direct: open the station in Workbench and look for the point. Where both are in scope, the integration has to land before the screens that depend on it can be designed.

Frequently Asked Questions

Is this different from what our engineers already see in Workbench?

Yes, in how much is exposed. Workbench is an engineering tool: the nav tree and property sheets reach every component and slot on the station, which is what an engineer needs and considerably more than an operator should be handed. Px views are authored in Workbench but served to a browser, and they present a chosen subset in a chosen arrangement. Both reach the same station; the difference is scope of exposure and who holds it.

Do these run on a JACE or on a Supervisor?

Either, and what decides it is what each host can see. A JACE serves views of its own station, so a controller level graphic covers the equipment that controller drives. A Supervisor can present points and histories from several stations at once because it joins them over the Niagara Network, which runs on Fox, TCP 1911 by default and 4911 for the TLS variant. Anything spanning more than one building has to be served from a host that can see more than one station.

What specifically breaks when AX graphics are opened in N4?

Three things, mainly. The applet based browser profiles of AX have no equivalent in N4, so a view that reached the browser that way has no delivery path left. Widgets deprecated between the two versions do not come across, and views built on them open with holes where those widgets were. Anything backed by a custom Java module needs that module rebuilt against the N4 API, and N4 requires modules to be signed, so an unsigned module from the AX era will not load even where the code still compiles.

Do operators need an app to use these on a phone?

No. The views are served over HTTPS to the phone's own browser, so there is nothing to install and nothing to push through an MDM beyond trusting the station's certificate in some environments. Reaching the station from outside the building is a network question rather than a graphics one, usually a VPN or a reverse proxy, and it is decided before the mobile design work is worth doing.

Can a dashboard show data that does not come from the BAS, such as utility meter or occupancy figures?

If it can be brought onto the station, yes. A graphic binds to what the station holds, so the question becomes how the outside data arrives: a driver, an API integration that writes points, or a scheduled import into a history. The practical difference is update rate. A live point refreshes on subscription while an imported figure may be a day or a month old, and a screen mixing the two should label which is which, or someone will read a stale number as current.

What do you need from us before design starts?

Access to the station or an export of the point list, the drawings the screens will be built over, and an idea of what the people using them are trying to answer. Floor plans, riser diagrams and plant schematics are most useful as PDF or CAD exports rather than photographs of printed sheets, since they get traced and scaled. It also helps to know the devices and screen sizes operators actually use, because a control room workstation and a phone in a plant room are different designs rather than the same design at two sizes. Knowing which existing screens get opened daily and which are never touched is worth as much as the drawings.

What happens to the graphics when equipment is added or a point is renamed later?

Adding another unit of a type that already has a view is a matter of pointing a new instance at that view. Adding an equipment type nobody designed for is new design work. Renaming is the case that bites: an ord is a path, so a renamed slot leaves the binding with nothing to resolve and the widget shows a null rather than a wrong value. Where views were built as shared templates, one rename on the station empties the same field on every unit of that type at once, which is worth knowing before anyone tidies up naming after handover.