Sandstar Port Manager

Tag Definition for the Sandstar Controls Engine

Define the tags that power Sandstar's hardware-agnostic controls engine.

Port Manager is where you define and manage the tags that drive Project Sandstar -- a hardware-agnostic controls engine that takes hardware-level protocols like I2C, GPIO, and UART and exposes them to Project Haystack. The tags you define in Port Manager are what Sandstar's engine reads and writes.

Browse your device tree, define point tags in bulk, and sync everything in real time. Port Manager gives you one screen to configure thousands of points across dozens of devices, turning hours of manual setup into minutes.

Why It Matters

Sandstar bridges the gap between raw hardware interfaces (I2C, GPIO, UART) and the semantic world of Project Haystack tags. But that abstraction only works when every point is properly tagged -- the engine needs to know what a point is (zone temp, damper command, schedule) to act on it. Port Manager is the tool that defines this mapping, making the controls engine truly hardware-agnostic.

Who It's For

  • Controls engineers defining Haystack tag structures for Sandstar projects
  • System integrators mapping hardware I/O points to Sandstar's tag model
  • Commissioning teams bulk-tagging points across devices

Three-Panel Workspace

Browse your device tree on the left, edit tags in the center, and reference documentation on the right -- all in one view. Designed for commissioning workflows where context switching kills productivity.

All Points Database XETO Save Restart + AV + BV
Devices
Lab AHU-1
192.168.1.42
Production
10.0.1.15
Rooftop-3
10.0.2.8
Channels
▾ Universal Input 1 (15)
1100 0-10V Input 1
1112 Thermistor10K1 Input 1
1120 PT100 Input 1
▾ Universal Input 2 (15)
1200 0-10V Input 2
▸ Digital Outputs (4)
▸ Virtual Channels (3)
Tag Editor Ch 1112 -- Thermistor10K1 Input 1
Identity
navNameZone Temp 1
kindNumber
unit°F
Haystack Tags
point
sensor
temp
air
zone
Documentation
Tag Help Channel Info
unit

The engineering unit for this point's value. Used by SkySpark for conversions and display.

Type: Str | mandatory
temp

Marker tag indicating a temperature measurement point.

Lab AHU-1 -- 192.168.1.42 | 24 points | Build: 0.9.14 Sandstar Port Manager v0.2

Channel Browser

Navigate every I/O channel on the device in an organized, expandable tree. Channels are grouped by physical input -- universal analog, digital, I2C sensors, PWM outputs, and virtual points. Configured channels are highlighted so you can instantly see what's been set up and what still needs attention.

  • Channels grouped by hardware pin and I/O type
  • Green dots mark configured points at a glance
  • Exclusive groups auto-disable unused siblings
  • pointQuery values shown inline with copy-on-click
Channels
Device Lab AHU-1 online
Universal Input 1 (15) Thermistor10K1 Input 1
1100 0-10V Input 1
1101 0-5V Input 1
1112 Thermistor10K1 Input 1
1120 PT100 Input 1
1122 PT1000 Input 1
I2C Sensors (6)
500 BME280 Temperature air temp sensor point
501 BME280 Humidity
502 BME280 Pressure
Digital Outputs (4)
Virtual Channels (3)
+ AV + BV
Tag Editor Ch 1112 -- Thermistor10K1 Input 1
Identity
navName
Zone Temp 1
kind
Number
unit *
°F
Haystack Tags
point *
sensor
his
writable
Signal Processing
Tag name
Marker
+

Structured Tag Editor

Configure each point with the right tags, units, and metadata. The editor organizes tags into logical sections -- Identity, Haystack markers, signal processing -- with context-sensitive controls. Mandatory tags are marked, dropdowns offer valid choices, and toggle switches make marker tags effortless.

  • Collapsible sections: Identity, Haystack, Signal Processing
  • Smart controls: toggles for markers, dropdowns for enums, unit pickers
  • Conditional fields appear when parent markers are enabled
  • Add custom tags with typed value inputs (Str, Number, Bool, Ref, Dict)
Powered by XETO

Schema-Driven Tagging with XETO

Port Manager uses XETO -- Project Haystack's extensible type system -- to describe every channel type the Sandstar engine supports. No hardcoded tag lists, no guessing which tags belong together.

When you select a channel, Port Manager fetches the XETO schema from the device, then dynamically builds the right form: mandatory tags are pre-filled, optional tags are grouped by category, and conditional tags only appear when their parent marker is enabled.

Dynamic form generation
Fields render based on tag type -- Number inputs for numerics, toggle switches for markers, dropdowns for Str with choices.
Mandatory tag prefill
When you configure a new point, required Haystack tags are filled in automatically -- no missed markers.
Conditional children
Enable hysteresis and its child tags appear. Disable it and they vanish -- no clutter.
Type browser
Inspect every channel type the device supports, see required/optional tags, and view raw zinc definitions.
XETO Type Browser GET /xeto?channel=1
AnalogInput
raw: analog · channels 1-4
Selected
DigitalInput
raw: digital · channels 5-8
4 tags
I2CSensor
raw: i2c · virtual
7 tags
PWMOutput
raw: pwm · channels 9-12
5 tags
AnalogInput Schema 12 tags
Identity
enabled * Marker
kind * Str
Number
Display
unit Str choices
celsius ↓
Filtering
hysteresis Marker
hystOn conditional
1.0
hystOff conditional
0.5

Instant Search

Find the right Haystack prototype in seconds with built-in FlexSearch. Type a few keywords and matching protos appear instantly, organized by category. Select one and the correct marker tags are applied to your point automatically -- no need to memorize tag combinations.

The All Points table gives you a sortable, filterable overview of every configured point on the device. See channels, names, values, sync status, and protos in one dense, scannable grid.

  • FlexSearch indexes 40+ Haystack prototypes across 10 categories
  • Auto-generates pointQuery from selected markers
  • All Points table with sortable columns and click-to-edit
Proto Selector
air temp
air temp sensor point Air
air temp sp point Air
zone air temp sensor point Zone
zone air temp sp point Zone
air × temp × sensor × point ×
pointQuery: air and temp and sensor and point
All Points Live -- synced 2m ago
Ch Name Kind Unit Value Proto
1112Zone Temp 1Number°F72.4air temp sensor
501BME280 HumidityNumber%RH45.2air humidity sensor
2100Fan EnableBool--truefan run cmd
3001Cooling SetpointNumber°F74.0air temp sp
Sync Status
Live -- synced 30s ago
Ch Name Value Status Sync
1112 Zone Temp 1 72.4 ok synced
500 BME280 Temperature 71.8 ok synced
3001 Cooling Setpoint 74.0 ok pending
3002 Heating SP Override 68.0 -- new
2100 Fan Enable true error synced
2 pending changes
Discard Save to Device

Real-Time Sync

Every change you make is tracked and synced to the device in real time. The sync column shows you exactly which points are up-to-date, which have pending edits, and which are newly created. Hit Save and your changes write directly to the device -- no export/import dance required.

  • Per-point sync status: synced, pending, new
  • Live value and error status from the device
  • Dirty state tracking with Ctrl+S save shortcut
  • Cached data available offline from IndexedDB

Multi-Device Management

Connect to multiple Sandstar controllers and SkySpark servers simultaneously. Switch between devices with a click -- your connection state, cached points, and configuration follow you. Every device type speaks the same language in Port Manager.

Lab AHU-1
192.168.1.42:8085
Sandstar Device connected
Configured points24
Build version0.9.14
ModeDirect IP
Production Server
10.0.1.15:8080
SkySpark connected
Configured points186
Projectcampus-hvac
ProtocolHTTPS
Rooftop-3
10.0.2.8:8085
Sandstar Device offline
Cached points18
Last connected2h ago
ModeDirect IP
2
Connection types
Sandstar + SkySpark
IDB
Offline cache
IndexedDB persistence
40+
Haystack protos
Air, Water, Zone, Elec...
Ctrl+S
Keyboard shortcuts
Save, add, navigate

Interested in this project?

Explore the source code, contribute, or get in touch.