BACnet Explorer
The BACnet Explorer lets you discover BACnet/IP devices on your network, browse their objects and properties, monitor live values, trend data over time, manage alarms, and map BACnet data points to GEM zones.
Open BACnet Explorer
Prerequisites
Create a BACnet device in System > Devices with the driver set to bacnet_ip. You can create multiple BACnet devices if needed (for example, to communicate on different network interfaces).
Toolbar
The toolbar at the top of the page is shared across all tabs:
| Field | Description |
|---|---|
| GEM Device | Select which BACnet/IP device (GEM driver instance) to use. |
| Network Interface | Select which network interface to bind the BACnet stack to. Shows available interfaces with their IP addresses (e.g., eth0 (192.168.1.50)). |
| Button | Description |
|---|---|
| Set | Saves the selected network interface, reloads the device, and sends a Who-Is broadcast. |
| Clear | Removes the network interface binding. |
| Refresh | Re-queries the BACnet device for discovered devices and refreshes the explorer tree. |
| CSV | Exports the discovered device list to a CSV file. |
You must select a network interface and click Set before BACnet discovery will work. The BACnet stack needs to bind to a specific network interface to send and receive BACnet/IP packets.
Tabs
The page has eight tabs: Explorer, Watch List, Trending, Alarms, Zone Mapping, Network Tools, Diagnostics, and Settings.
Explorer Tab
The Explorer tab is a split-pane view with a device/object tree on the left and a property browser on the right.
Device Tree (Left Panel)
After discovery, all BACnet devices appear in the tree. Click a device to expand it and load its details. The tree shows:
- Device name, ID, and IP address for each device
- Device info bar showing model, vendor, firmware, object count, and RPM support
- Object groups organized by BACnet object type (analog input, binary output, etc.)
- Object filter to search objects by name or instance number
Objects are loaded in two phases with a live progress bar driven by server-side bacnet_object_progress events:
- Reading object list — fetching the full
object-listarray. - Reading object names — pulling
object_namefor every discovered object.
The driver tries the most efficient path each device supports: a single segmented ReadProperty(object-list), then RPM-paged walks (50 indices per call), then parallel single reads. Devices that fail the whole-array read are remembered so subsequent loads skip straight to the paged path.
Property Browser (Right Panel)
Select an object in the tree to view its properties. The property browser shows:
| Column | Description |
|---|---|
| Property | The BACnet property name. |
| ID | The BACnet property identifier number. |
| Value | The current value. Writable properties appear in blue — click to edit inline. |
Writable properties: present_value, description, object_name, out_of_service, relinquish_default, cov_increment, notification_class, event_enable, high_limit, low_limit, deadband, and limit_enable. When editing present_value, a priority selector (P1–P16) appears.
Toolbar buttons:
| Button | Description |
|---|---|
| Refresh | Re-reads all properties from the device. |
| Watch | Adds the current object to the Watch List for live monitoring. |
| Priority Array | Loads and displays the 16-level BACnet priority array for the object. |
Priority Array
The priority array section shows all 16 priority levels with their current values. The winning (highest active) priority is highlighted in green. For each active priority level, you can click Relinquish to release that priority's command.
Watch List Tab
The Watch List monitors multiple BACnet objects simultaneously by polling their present values at a configurable interval.
Adding Items
Add objects to the watch list by selecting an object in the Explorer tab and clicking Watch in the property browser.
Controls
| Control | Description |
|---|---|
| Start Polling / Stop | Toggles automatic polling of all watch items. |
| Rate | Poll interval: 1s, 2s, 5s, 10s, or 30s. |
| Read All | Performs a single read of all items. |
| Clear | Removes all items and stops polling. |
Watch Table
| Column | Description |
|---|---|
| Name | Object name. |
| Type | BACnet object type. |
| Device | BACnet device ID. |
| Instance | Object instance number. |
| Value | Current present value (flashes yellow on change). |
| Delta | Change from previous reading (green for increase, red for decrease). |
| Updated | Timestamp of last read. |
| COV | Change of Value subscription status. Click to toggle. |
COV Subscriptions
Each watch item has a COV badge. Click OFF to subscribe to Change of Value notifications from the BACnet device (1-hour lifetime). Click COV to unsubscribe. COV provides push-based updates instead of polling, which is more efficient for slowly changing values.
COV support depends on the remote BACnet device. If the device does not support COV for a given object type, the subscription will fail with a warning message.
Trending Tab
The Trending tab charts live BACnet values over time using interactive graphs.
Setup
- Add objects to the Watch List first.
- In the Trending tab, select items from the sidebar by checking their checkboxes.
- Click Start Trending to begin collecting data.
Controls
| Control | Description |
|---|---|
| Start / Stop Trending | Toggles data collection. |
| Rate | Sample interval: 1s, 2s, 5s, or 10s. |
| Type | Chart type: Line or Area. |
| Max Points | Maximum data points per series (100, 200, 500, or 1000). Older points are trimmed. |
| CSV | Exports all trend data to a CSV file. |
| Clear | Stops trending and clears all chart data. |
Statistics Bar
When trending is active, a statistics bar below the chart shows min, max, average, and current values for each series.
Alarms Tab
The Alarms tab queries BACnet alarm summaries and event information from devices.
Controls
| Control | Description |
|---|---|
| Device | Select a discovered BACnet device to query. |
| Load | Queries alarm summary and event information. |
| Filter | Filter alarms: All, Active, or Normal. |
| Auto-Refresh | Toggles periodic re-query (every 30 seconds). |
Alarm Table
Lists alarms with object type, instance, state (color-coded badge), and acknowledgment status. Click an alarm row to select it for acknowledgment.
Alarm states: Normal (green), Fault (red), Offnormal (amber), High Limit, Low Limit, Life Safety Alarm (red, pulsing).
Acknowledging Alarms
After selecting an alarm, an acknowledgment form appears. Enter an optional message and click Acknowledge to send an alarm acknowledgment to the BACnet device.
Events Table
Below the alarms, an events table shows event information including object, event state, event type, and notify type.
Alarm summary and event information support varies by BACnet device. Some devices may not implement these services.
Zone Mapping Tab
The Zone Mapping tab maps BACnet objects to GEM zones for automated monitoring and control.
Mapping a Point
- Select an object in the Explorer tab first — the Zone Mapping tab shows the selected object.
- Choose a Point Type from the categorized list (climate, lighting, shade, power, or generic), or enter a custom point name in the text field below the list. Custom names are automatically prefixed with
bacnet_and normalized to lowercase with underscores. Select a direction (read or write) which is appended as a suffix (e.g., "Fault Code" with direction "read" becomesbacnet_fault_code_read). - Select a Subsystem and Zone.
- Click Map Point.
The BACnet object reference is stored as a zone attribute in the format device_id,object_type,object_instance.
Point Types
Points are organized by category:
Climate Points
| Point Type | Description |
|---|---|
bacnet_setpoint_read | Read setpoint |
bacnet_setpoint_write | Write setpoint |
bacnet_cool_setpoint_read | Read cooling setpoint |
bacnet_cool_setpoint_write | Write cooling setpoint |
bacnet_heat_setpoint_read | Read heating setpoint |
bacnet_heat_setpoint_write | Write heating setpoint |
bacnet_temperature_read | Read temperature sensor |
bacnet_humidity_read | Read humidity sensor |
bacnet_humidity_write | Write humidity value |
bacnet_fanmode_read | Read fan mode |
bacnet_fanmode_write | Write fan mode |
bacnet_systemmode_read | Read system mode |
bacnet_systemmode_write | Write system mode |
bacnet_occupied_read | Read occupied state |
bacnet_occupied_write | Write occupied state |
bacnet_bypass_override_read | Read bypass override state |
bacnet_bypass_override_write | Write bypass override state |
Lighting, Shade, Power & Generic Points
| Point Type | Description |
|---|---|
bacnet_level_read | Read level (lighting) |
bacnet_level_write | Write level (lighting) |
bacnet_state_read | Read on/off state |
bacnet_state_write | Write on/off state |
bacnet_position_read | Read position (shades) |
bacnet_position_write | Write position (shades) |
bacnet_power_read | Read power |
bacnet_energy_read | Read energy |
bacnet_generic_read | Generic read |
bacnet_generic_write | Generic write |
Existing Mappings
Below the mapping form, a table shows all existing zone attribute mappings for the currently selected BACnet object. Each mapping can be removed with the delete button.
Network Tools Tab
The Network Tools tab provides BACnet network management commands.
Device Discovery (Who-Is)
Send a Who-Is broadcast to discover devices. Optionally specify a device ID range (low/high) to limit the broadcast. Leave the range empty for a global broadcast — results appear in the Explorer tab.
Device Management
Select a discovered device to view its info card (name, model, vendor, ID, address, firmware).
Time Synchronization
Send the server's current time to a BACnet device. Choose between local time sync and UTC time sync.
Reinitialize Device
Send a coldstart or warmstart reinitialize command to a remote BACnet device. Requires confirmation before sending.
Reinitializing a device will restart it and may cause it to be temporarily unavailable. Use with caution in production environments.
Communication Control
Enable or disable communication on a remote BACnet device, optionally for a specified duration (in minutes). Set to 0 for indefinite. Requires confirmation.
Disabling communication may make the device unreachable until the duration expires or communication is re-enabled.
Diagnostics Tab
The Diagnostics tab surfaces the BACnet driver's runtime health signals so an integrator can debug write failures, priority lockouts, COV subscription staleness, and transport-level errors without grepping logs.
Summary Cards
Quick-glance counters across the driver state:
- Mapped zones — total BACnet zones currently in memory
- Priority lockouts — zones flagged with
priority_lockout=true(a higher-priority slot is holding the value, so writes at our default priority are ignored) - Zones w/ unsupported points — zones where the driver has marked specific points as priority-unsupported after repeated priority-array read failures
- Recent write failures — count of write errors in the ring buffer (last 20)
- COV subs — active Change-of-Value subscriptions, with a stale count if any have failed renewal 3+ times
- Consecutive op failures — current run of failed reads/writes (the watchdog trips a recycle once this crosses the threshold AND no op has succeeded in ~2 min)
- Client recycles — how many times the underlying BACnet client has been torn down and rebuilt since boot
Client Health
Watchdog state and the last transport-level error message. A non-zero recycle count is informative, not necessarily bad — a single recycle after a transient blip is expected. Sustained recycles point at flapping interfaces or unreachable controllers.
COV Subscriptions
Per-subscription detail: device ID, object, subscribe ID, lifetime (s), seconds since last renewed, and the renewal failure count. Stale rows (3+ failures) highlight in red — the value-on-change stream is dead until you re-subscribe.
Priority Lockouts
Zones where a higher BACnet priority slot is currently winning, so our default-priority writes are silently rejected by the device. Investigate by reading the priority array from the Explorer tab.
Priority-Unsupported Points
Per-(zone, point) entries the driver has given up on after 3 consecutive priority-array read failures. Subsequent writes still go through but skip priority handling. To re-check, clear the <point>_priority_supported attribute on the zone.
Recent Write Failures
Ring buffer of the last 20 write errors with structured diagnostics — device, object, property, ASN.1 tag, JS value type, priority, array index, and the error message. Class:2 Code:9 in the error column means the device rejected the ASN.1 tag — compare the tag column to the value_type to find the mismatch.
Toolbar
- Refresh — re-query the driver
- Auto-refresh — poll every 10 seconds
Settings Tab
The Settings tab shows the current BACnet connection configuration:
- Selected GEM BACnet device (ID, name, driver)
- Current network interface binding
- Number of discovered devices
This tab also contains descriptions of the GEM Device and Network Interface fields for reference.
Related Documentation
- Devices — Creating the BACnet/IP device
- Zones — Zone configuration
- Attributes — Zone attribute mappings