<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Plantroom Labs — technical notes</title>
  <subtitle>Notes from Niagara Framework engineering: modules and drivers, bajaux widgets, PX graphics, station and controller work.</subtitle>
  <id>https://plantroomlabs.com/feed.xml</id>
  <updated>2026-09-30T00:00:00Z</updated>
  <link rel="self" type="application/atom+xml" href="https://plantroomlabs.com/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/"/>
  <icon>https://plantroomlabs.com/assets/favicon.ico?v=503bf7424a89</icon>
  <logo>https://plantroomlabs.com/assets/mark.svg?v=b3d8ec4a5542</logo>
  <author>
    <name>Plantroom Labs</name>
    <uri>https://plantroomlabs.com/</uri>
  </author>
  <entry>
    <title>What a Niagara oBIX Server Actually Exposes</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/what-an-obix-server-actually-exposes/"/>
    <id>https://plantroomlabs.com/notes/what-an-obix-server-actually-exposes/</id>
    <published>2026-09-30T00:00:00Z</published>
    <updated>2026-09-30T00:00:00Z</updated>
    <summary type="text">The mount point, the three verbs, the twelve lobby branches, the five that appear in no listing, and where the open alarms actually are.</summary>
    <category term="Integration"/>
    <category term="Agents"/>
    <category term="Station security"/>
  </entry>
  <entry>
    <title>Auditing a Modbus or BACnet Claim Against the Code</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/protocol-document-versus-the-code/"/>
    <id>https://plantroomlabs.com/notes/protocol-document-versus-the-code/</id>
    <published>2026-09-30T00:00:00Z</published>
    <updated>2026-09-30T00:00:00Z</updated>
    <summary type="text">The method behind a protocol-discrepancy audit: treat a documented default, range or address as a claim, then settle it against the code, twice.</summary>
    <category term="Modbus"/>
    <category term="BACnet"/>
    <category term="Integration"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>Letting an AI Agent Write to a Control System</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/letting-an-agent-write-to-a-control-system/"/>
    <id>https://plantroomlabs.com/notes/letting-an-agent-write-to-a-control-system/</id>
    <published>2026-09-30T00:00:00Z</published>
    <updated>2026-09-30T00:00:00Z</updated>
    <summary type="text">A write to a station is a plant movement at a priority level, not a variable assignment. What has to be gated before a model gets the verb.</summary>
    <category term="Agents"/>
    <category term="Permissions"/>
    <category term="Station engineering"/>
  </entry>
  <entry>
    <title>What Niagara Does With the Modbus Address You Type</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-modbus-address-format/"/>
    <id>https://plantroomlabs.com/notes/niagara-modbus-address-format/</id>
    <published>2026-09-29T00:00:00Z</published>
    <updated>2026-09-29T00:00:00Z</updated>
    <summary type="text">The address field is a format plus a string, and the format defaults to hex. What each format does to the number, and where the boundaries fall through.</summary>
    <category term="Modbus"/>
    <category term="Integration"/>
    <category term="Station engineering"/>
  </entry>
  <entry>
    <title>Why a Modbus Network Sits at 95% Busy Time</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/modbus-poll-scheduling-and-busy-time/"/>
    <id>https://plantroomlabs.com/notes/modbus-poll-scheduling-and-busy-time/</id>
    <published>2026-09-29T00:00:00Z</published>
    <updated>2026-09-29T00:00:00Z</updated>
    <summary type="text">Busy time is the duty cycle of one poll thread per network, not host CPU. What it measures, where the time goes, and what actually brings it down.</summary>
    <category term="Modbus"/>
    <category term="Performance"/>
    <category term="Station engineering"/>
  </entry>
  <entry>
    <title>Why a BACnet Write Relinquishes on Its Own</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/bacnet-write-relinquish/"/>
    <id>https://plantroomlabs.com/notes/bacnet-write-relinquish/</id>
    <published>2026-09-29T00:00:00Z</published>
    <updated>2026-09-29T00:00:00Z</updated>
    <summary type="text">Fallback is level 17, which is not a BACnet priority. What the driver sends when a point falls to it, and why the in slot sometimes changes nothing.</summary>
    <category term="BACnet"/>
    <category term="Integration"/>
    <category term="Station engineering"/>
  </entry>
  <entry>
    <title>Reading a LoRaWAN Payload Decoder Before You Trust It</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/reading-a-lorawan-payload-decoder/"/>
    <id>https://plantroomlabs.com/notes/reading-a-lorawan-payload-decoder/</id>
    <published>2026-09-28T00:00:00Z</published>
    <updated>2026-09-28T00:00:00Z</updated>
    <summary type="text">Eight things found by executing vendors' published JavaScript codecs, and what each one does to a Niagara point once the data lands.</summary>
    <category term="LoRaWAN"/>
    <category term="Integration"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>Reading an Unfamiliar MQTT Broker in a Building</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/reading-an-unfamiliar-mqtt-broker/"/>
    <id>https://plantroomlabs.com/notes/reading-an-unfamiliar-mqtt-broker/</id>
    <published>2026-09-27T00:00:00Z</published>
    <updated>2026-09-27T00:00:00Z</updated>
    <summary type="text">A subscriber cannot list topics, the retain flag is how you tell a stored value from a live one, and a duplicate client ID disconnects someone else.</summary>
    <category term="MQTT"/>
    <category term="Integration"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>What a PX Page Weighs, and the Hidden Gzip Switch</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/px-page-payload-and-gzip/"/>
    <id>https://plantroomlabs.com/notes/px-page-payload-and-gzip/</id>
    <published>2026-09-27T00:00:00Z</published>
    <updated>2026-09-27T00:00:00Z</updated>
    <summary type="text">A PX view ships about 2.3 MB of framework JavaScript before your graphic. Gzip is off by default, and /module/* bypasses the filter that would do it.</summary>
    <category term="PX graphics"/>
    <category term="JACE"/>
    <category term="Performance"/>
  </entry>
  <entry>
    <title>Orphaned Niagara Modules: When the Vendor Is Gone</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/orphaned-third-party-niagara-modules/"/>
    <id>https://plantroomlabs.com/notes/orphaned-third-party-niagara-modules/</id>
    <published>2026-09-27T00:00:00Z</published>
    <updated>2026-09-27T00:00:00Z</updated>
    <summary type="text">The Marketplace storefront is gone and vendors are winding down. How to list which third-party modules a station depends on, and who owns each.</summary>
    <category term="Migration"/>
    <category term="Estate management"/>
    <category term="Drivers"/>
  </entry>
  <entry>
    <title>What a BACnet Who-Is Sweep Finds, and What It Misses</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/bacnet-discovery-what-who-is-finds/"/>
    <id>https://plantroomlabs.com/notes/bacnet-discovery-what-who-is-finds/</id>
    <published>2026-09-27T00:00:00Z</published>
    <updated>2026-09-27T00:00:00Z</updated>
    <summary type="text">Who-Is stops at the subnet, I-Am carries no device name, and an object list from a device that cannot segment has to be read one index at a time.</summary>
    <category term="BACnet"/>
    <category term="Discovery"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>3D Floorplan Graphics in Niagara PX Sheets</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/3d-floorplan-graphics-in-niagara/"/>
    <id>https://plantroomlabs.com/notes/3d-floorplan-graphics-in-niagara/</id>
    <published>2026-09-27T00:00:00Z</published>
    <updated>2026-09-27T00:00:00Z</updated>
    <summary type="text">A 3D render is artwork made outside Niagara. What format it arrives in, what can bind to it, and why plan view wins for 200 zone temperatures.</summary>
    <category term="PX graphics"/>
    <category term="JACE"/>
    <category term="Workbench"/>
  </entry>
  <entry>
    <title>What a Niagara 5 Module Scan Actually Finds</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/what-an-n5-module-scan-actually-finds/"/>
    <id>https://plantroomlabs.com/notes/what-an-n5-module-scan-actually-finds/</id>
    <published>2026-09-26T00:00:00Z</published>
    <updated>2026-09-26T00:00:00Z</updated>
    <summary type="text">Reading a module's bytecode against Java 25 gives a per-module answer. What it finds, what it cannot tell you, and the false alarms it avoids.</summary>
    <category term="Migration"/>
    <category term="Module development"/>
    <category term="Estate management"/>
  </entry>
  <entry>
    <title>What Java 25 Does to Niagara Module Permissions</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-module-permissions-on-java-25/"/>
    <id>https://plantroomlabs.com/notes/niagara-module-permissions-on-java-25/</id>
    <published>2026-09-26T00:00:00Z</published>
    <updated>2026-09-26T00:00:00Z</updated>
    <summary type="text">Niagara's module permission model is built on Java's Security Manager. On a Java 25 JVM it cannot be installed, so the checks stop happening.</summary>
    <category term="Module development"/>
    <category term="Station security"/>
    <category term="Migration"/>
  </entry>
  <entry>
    <title>Bringing LoRaWAN and MQTT Data Into a Niagara Station</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/lorawan-and-mqtt-into-a-niagara-station/"/>
    <id>https://plantroomlabs.com/notes/lorawan-and-mqtt-into-a-niagara-station/</id>
    <published>2026-09-26T00:00:00Z</published>
    <updated>2026-09-26T00:00:00Z</updated>
    <summary type="text">Where abstractMqttDriver and jsonToolkit stop, and what LoRaWAN decoding, topic design, and store-and-forward buffering add on top.</summary>
    <category term="Integration"/>
    <category term="LoRaWAN"/>
    <category term="MQTT"/>
  </entry>
  <entry>
    <title>How to Build and Load a Custom Niagara 4 Module</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/building-and-loading-a-custom-niagara-module/"/>
    <id>https://plantroomlabs.com/notes/building-and-loading-a-custom-niagara-module/</id>
    <published>2026-09-26T00:00:00Z</published>
    <updated>2026-09-26T00:00:00Z</updated>
    <summary type="text">What a Niagara module actually is on disk, the two ways to build one, and the three Software Manager refusals that actually mean something.</summary>
    <category term="Module development"/>
    <category term="Build tooling"/>
    <category term="Deployment"/>
  </entry>
  <entry>
    <title>What Happens to Third-Party Modules Moving N4 to N5</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/n4-to-n5-third-party-modules/"/>
    <id>https://plantroomlabs.com/notes/n4-to-n5-third-party-modules/</id>
    <published>2026-09-25T00:00:00Z</published>
    <updated>2026-09-25T00:00:00Z</updated>
    <summary type="text">A module with no Niagara 5 build can stop the migrator outright, and one that has a build can still fail to load. What breaks, and why.</summary>
    <category term="Migration"/>
    <category term="Estate management"/>
    <category term="Module development"/>
  </entry>
  <entry>
    <title>JACE-8000 to JACE-9000: What the Licence Transfer Does</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/jace-8000-to-jace-9000-licence-transfer/"/>
    <id>https://plantroomlabs.com/notes/jace-8000-to-jace-9000-licence-transfer/</id>
    <published>2026-09-25T00:00:00Z</published>
    <updated>2026-09-25T00:00:00Z</updated>
    <summary type="text">The JACE 8000 to 9000 licence transfer, step by step: what it requires, what it does not include, and which parts cannot be undone.</summary>
    <category term="JACE"/>
    <category term="Migration"/>
    <category term="Licensing"/>
  </entry>
  <entry>
    <title>BAS or BMS: Where a Niagara Station Actually Fits</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/bas-or-bms/"/>
    <id>https://plantroomlabs.com/notes/bas-or-bms/</id>
    <published>2026-09-25T00:00:00Z</published>
    <updated>2026-09-25T00:00:00Z</updated>
    <summary type="text">BAS and BMS mostly mean the same thing. The distinction worth tracking is single-vendor versus open — and where a Niagara station sits either way.</summary>
    <category term="Building automation"/>
    <category term="BMS integration"/>
    <category term="Terminology"/>
  </entry>
  <entry>
    <title>One PX Sheet for Every AHU: Relative ORDs</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/px-relative-ords/"/>
    <id>https://plantroomlabs.com/notes/px-relative-ords/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">The Px editor binds absolutely by default, which is why a graphic works for AHU-01 and nothing else. Relativised, one sheet serves the whole plant.</summary>
    <category term="PX graphics"/>
    <category term="Standard sheets"/>
    <category term="Reuse"/>
  </entry>
  <entry>
    <title>Platform or Station: Two Connections, Two Sets of Logins</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/platform-versus-station/"/>
    <id>https://plantroomlabs.com/notes/platform-versus-station/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Two processes, two Java VMs, two logins and two file trees — and most “it works in Workbench but not the browser” starts here.</summary>
    <category term="Platform"/>
    <category term="Station engineering"/>
    <category term="Workbench"/>
  </entry>
  <entry>
    <title>A JACE-8000 Has No Onboard I/O: Using the Nrio Driver</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/nrio-io-on-a-jace-8000/"/>
    <id>https://plantroomlabs.com/notes/nrio-io-on-a-jace-8000/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Remote IO-R modules on RS-485, one network per port, and the conversion list Workbench will happily let you get wrong.</summary>
    <category term="JACE"/>
    <category term="Drivers"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>Why a Writable Point Ignores the Value You Set</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-writable-point-priority/"/>
    <id>https://plantroomlabs.com/notes/niagara-writable-point-priority/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Sixteen priority inputs, two of them reserved for right-click actions, a fallback underneath, and a BACnet scheme wired to none of it.</summary>
    <category term="Station engineering"/>
    <category term="BACnet"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>The Certificate on a New JACE, and Its Expiry</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-tls-certificates/"/>
    <id>https://plantroomlabs.com/notes/niagara-tls-certificates/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Every station starts with a self-signed certificate it generated itself. What that is good for, what it is not, and what breaks on the day it expires.</summary>
    <category term="TLS"/>
    <category term="Certificates"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>Templates: Build the AHU Once, Deploy It Fifty Times</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-templates/"/>
    <id>https://plantroomlabs.com/notes/niagara-templates/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Component, application and station templates do different jobs — and only one of them supports bulk deployment from a spreadsheet and upgrade in place.</summary>
    <category term="Templates"/>
    <category term="Bulk engineering"/>
    <category term="Station engineering"/>
  </entry>
  <entry>
    <title>Tags, Dictionaries and the Licence You Need</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-tag-dictionaries/"/>
    <id>https://plantroomlabs.com/notes/niagara-tag-dictionaries/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Tagging is how a station describes itself to software that did not engineer it. Three kinds of tag, one namespace, and a licence feature that gates it.</summary>
    <category term="Tagging"/>
    <category term="Data modelling"/>
    <category term="Haystack"/>
  </entry>
  <entry>
    <title>Niagara Schedules: Special Events and Master Copies</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-schedules-and-special-events/"/>
    <id>https://plantroomlabs.com/notes/niagara-schedules-and-special-events/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Special event priority is list order, a partly-filled special event falls back to the weekly schedule, and an imported schedule cannot be edited locally.</summary>
    <category term="Scheduling"/>
    <category term="Station engineering"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>Roles, Categories and the Grid Between Them</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-roles-and-permissions/"/>
    <id>https://plantroomlabs.com/notes/niagara-roles-and-permissions/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Niagara permissions are a grid of category against level — which is why a user can log in successfully and still be told they have no access.</summary>
    <category term="Station security"/>
    <category term="Permissions"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>Doing One Thing to Fifty Stations at Once</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-provisioning-jobs/"/>
    <id>https://plantroomlabs.com/notes/niagara-provisioning-jobs/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Provisioning runs platform tasks across a whole NiagaraNetwork from one Supervisor connection — and the obvious backup action is the wrong one.</summary>
    <category term="Provisioning"/>
    <category term="Estate management"/>
    <category term="Supervisor"/>
  </entry>
  <entry>
    <title>Why a Niagara Station Polls Too Slowly</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-poll-rates-and-tuning-policies/"/>
    <id>https://plantroomlabs.com/notes/niagara-poll-rates-and-tuning-policies/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Slow, Normal and Fast are three numbers you choose, and one default tuning policy applied to every point is the usual reason a station feels sluggish.</summary>
    <category term="Station engineering"/>
    <category term="Performance"/>
    <category term="BACnet"/>
  </entry>
  <entry>
    <title>What the Niagara MQTT Driver Will and Will Not Do</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-mqtt-driver/"/>
    <id>https://plantroomlabs.com/notes/niagara-mqtt-driver/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">It is licensed, it is capped below your licence, it is a client only, and its Discover button never contacts the broker.</summary>
    <category term="Integration"/>
    <category term="MQTT"/>
    <category term="Drivers"/>
  </entry>
  <entry>
    <title>History Capacity on a JACE, and Lost Records</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-history-capacity/"/>
    <id>https://plantroomlabs.com/notes/niagara-history-capacity/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">The default capacity is 500 records, the default name collides, and one setting decides whether a full history overwrites data or stops collecting.</summary>
    <category term="Histories"/>
    <category term="JACE"/>
    <category term="Station engineering"/>
  </entry>
  <entry>
    <title>A Navigation Tree That Builds Itself</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-hierarchies/"/>
    <id>https://plantroomlabs.com/notes/niagara-hierarchies/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Hierarchies generate the nav tree from tags and NEQL queries instead of hand-placed nodes — and the cache hides your edits until you rebuild it.</summary>
    <category term="Hierarchies"/>
    <category term="Tagging"/>
    <category term="Station engineering"/>
  </entry>
  <entry>
    <title>Conversion Links: What a Mismatched Wire Really Does</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-conversion-links/"/>
    <id>https://plantroomlabs.com/notes/niagara-conversion-links/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Link a boolean to a numeric and Niagara inserts a converter with its own properties. Here is what each one assumes on your behalf.</summary>
    <category term="Station engineering"/>
    <category term="Wire sheet"/>
    <category term="Workbench"/>
  </entry>
  <entry>
    <title>Authentication Schemes: Each Niagara User Picks One</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-authentication-schemes/"/>
    <id>https://plantroomlabs.com/notes/niagara-authentication-schemes/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">A station can run several login mechanisms at once, and the choice is made per user, not per station. What each scheme is actually for.</summary>
    <category term="Station security"/>
    <category term="Permissions"/>
    <category term="Station engineering"/>
  </entry>
  <entry>
    <title>Why an Alarm Never Reached Anybody</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-alarm-routing/"/>
    <id>https://plantroomlabs.com/notes/niagara-alarm-routing/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Detection, class and recipient are three separate objects in a Niagara station. An alarm goes missing wherever the chain between them is not linked.</summary>
    <category term="Alarms"/>
    <category term="Station engineering"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>Why a Modbus Point Reads the Wrong Register</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/modbus-register-addressing/"/>
    <id>https://plantroomlabs.com/notes/modbus-register-addressing/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Modbus decimal addressing is zero-based, vendor documentation is not, and the Address Format property decides which of the two you are typing.</summary>
    <category term="Modbus"/>
    <category term="Integration"/>
    <category term="Station engineering"/>
  </entry>
  <entry>
    <title>Commissioning a JACE-8000 Without Locking Yourself Out</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/commissioning-a-jace-8000/"/>
    <id>https://plantroomlabs.com/notes/commissioning-a-jace-8000/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">The factory address, the passphrase and the account you are made to delete — the commissioning steps that strand a new controller.</summary>
    <category term="JACE"/>
    <category term="Commissioning"/>
    <category term="Deployment"/>
  </entry>
  <entry>
    <title>BACnet MS/TP on a JACE: What to Set</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/bacnet-mstp-on-a-jace/"/>
    <id>https://plantroomlabs.com/notes/bacnet-mstp-on-a-jace/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">Baud, MAC address, Max Master and Max Info Frames. Four settings on one Link component decide whether an RS-485 trunk works, crawls or drops the token.</summary>
    <category term="BACnet"/>
    <category term="MS/TP"/>
    <category term="Commissioning"/>
  </entry>
  <entry>
    <title>What Actually Blocks an AX to N4 Migration</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/ax-to-n4-migration/"/>
    <id>https://plantroomlabs.com/notes/ax-to-n4-migration/</id>
    <published>2026-09-23T00:00:00Z</published>
    <updated>2026-09-23T00:00:00Z</updated>
    <summary type="text">A station cannot migrate until every module it uses has been refactored for Niagara 4 — and licences, users and permissions all change shape on the way.</summary>
    <category term="Migration"/>
    <category term="Estate management"/>
    <category term="Module development"/>
  </entry>
  <entry>
    <title>Pure Java or It Will Not Run: Inside a JACE</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/what-runs-on-a-jace/"/>
    <id>https://plantroomlabs.com/notes/what-runs-on-a-jace/</id>
    <published>2026-09-22T00:00:00Z</published>
    <updated>2026-09-22T00:00:00Z</updated>
    <summary type="text">A controller is an ARM host with a fraction of a server's memory. Native libraries, JNI and heavyweight dependencies do not survive the move from a PC.</summary>
    <category term="JACE"/>
    <category term="Controllers"/>
    <category term="Module development"/>
  </entry>
  <entry>
    <title>Scheduled Niagara Backups, and the Supervisor Gap</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/scheduled-niagara-station-backups/"/>
    <id>https://plantroomlabs.com/notes/scheduled-niagara-station-backups/</id>
    <published>2026-09-22T00:00:00Z</published>
    <updated>2026-09-22T00:00:00Z</updated>
    <summary type="text">A Supervisor can back up every station in its Niagara Network on a schedule. The station it does not cover that way is its own.</summary>
    <category term="Backups"/>
    <category term="Provisioning"/>
    <category term="Supervisor"/>
  </entry>
  <entry>
    <title>Which Niagara Version to Stamp a Module For</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-module-version-stamping/"/>
    <id>https://plantroomlabs.com/notes/niagara-module-version-stamping/</id>
    <published>2026-09-22T00:00:00Z</published>
    <updated>2026-09-22T00:00:00Z</updated>
    <summary type="text">A module's declared dependency version is a floor, not a pin. Build against the newest SDK you have and stamp for the oldest station it has to load on.</summary>
    <category term="Module development"/>
    <category term="Mixed estates"/>
    <category term="Build tooling"/>
  </entry>
  <entry>
    <title>Niagara Module Signing: What a Station Checks</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/niagara-module-signing/"/>
    <id>https://plantroomlabs.com/notes/niagara-module-signing/</id>
    <published>2026-09-22T00:00:00Z</published>
    <updated>2026-09-22T00:00:00Z</updated>
    <summary type="text">Niagara's four verification-mode values, what each demands of your certificate, and the permissions that force a signature check even in low mode.</summary>
    <category term="Module signing"/>
    <category term="Certificates"/>
    <category term="Deployment"/>
  </entry>
  <entry>
    <title>Five Ways to Get Data Out of a Niagara Station</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/getting-data-out-of-a-niagara-station/"/>
    <id>https://plantroomlabs.com/notes/getting-data-out-of-a-niagara-station/</id>
    <published>2026-09-22T00:00:00Z</published>
    <updated>2026-09-22T00:00:00Z</updated>
    <summary type="text">REST, MQTT, a relational history database, file export or an HTTP client. Which suits which consumer, and what each one costs you to run.</summary>
    <category term="Integration"/>
    <category term="Histories"/>
    <category term="MQTT"/>
  </entry>
  <entry>
    <title>Renaming Thousands of Niagara Points Safely</title>
    <link rel="alternate" type="text/html" href="https://plantroomlabs.com/notes/bulk-point-renaming-and-tagging/"/>
    <id>https://plantroomlabs.com/notes/bulk-point-renaming-and-tagging/</id>
    <published>2026-09-22T00:00:00Z</published>
    <updated>2026-09-22T00:00:00Z</updated>
    <summary type="text">Point names arrive from the field device and there is no standard. What to use to select, rename and tag in bulk — and what a rename quietly breaks.</summary>
    <category term="Bulk engineering"/>
    <category term="Tagging"/>
    <category term="Workbench"/>
  </entry>
</feed>
