Tags & Data Sources
Dashboards don't connect directly to databases or APIs. Instead, they bind to tags. Tags are the universal data layer that sits between your data sources and your dashboards.
What Are Tags?
A tag is a named value that updates in real time. Examples:
default.temperature → 72.5
default.pump.speed → 1450
default.alarms.high_temp → true
Every chart, gauge, text block, or color binding in your dashboard reads from tags. When a tag value changes, every dashboard bound to it updates instantly.
Connecting Data Sources
Tags can pull data from multiple source types:
| Source | Description |
|---|---|
| Manual | Set values directly — good for setpoints, constants, and testing |
| SQL | Poll a PostgreSQL, MySQL, or other SQL database on an interval |
| HTTP | Poll a REST API endpoint and extract values from the JSON response |
| InfluxDB | Query InfluxDB v2 with Flux |
| Prometheus | Query Prometheus with PromQL |
| Simulation | Generate synthetic data for demos and testing |
| Computed | Calculate values from other tags using JavaScript |
No matter what the source is, your dashboard binds to the tag the same way. If you swap a simulated source for a real database later, the dashboard doesn't need to change.
Live Data Flow
Data source (database, API, device, etc.)
→ Tag system
→ WebSocket stream
→ Your dashboard updates in real time
The editor preview and the published dashboard both use the same live data stream, so what you see while building is what your users see in production.
Historian
Control Seat automatically records tag history to ClickHouse. You can query historical data for:
- Raw points — every recorded value in a time range
- Last values — the most recent value for a set of tags
- Aggregates — averages, min, max, and count over time buckets
Historian data powers time-series charts and historical replay features.
Example Tag
{
"path": "process.pump.speed",
"type": "float64",
"writable": true,
"source_kind": "sql"
}
Why Tags?
- One naming model — dashboards use tag paths regardless of the underlying source
- Portable bindings — swap data sources without changing dashboards
- Controlled writes — write operations go through a managed path, not raw device APIs
- Shared address space — live values, historian, simulation, and computed values all use the same tag paths