A Dashboard is a live canvas of widgets that visualize what your devices are reporting right now. Each widget is bound to one or more device Attributes and updates on its own over a live connection. You arrange widgets on a grid, resize them, group them, and the layout saves itself. This page covers how dashboards work, how to organize them, and a complete catalog of every widget type with its configuration options.
Where Dashboards Live
Every dashboard belongs to an application. You open, create, and manage an application’s dashboards from its Dashboards page, which is organized as tabs: you open dashboards into tabs and switch between them in place, rather than scrolling a list. A widget you create inside an application stays in that application’s context.
Create, rename, and delete
-
1On the Dashboards page, create a new dashboard. Give it a Dashboard Title (required) and an optional Description.
-
2Rename or edit the title and description any time from the dashboard’s gear menu (Edit). You can also double-click the dashboard’s description to edit it in place; the title is renamed from the Edit dialog (or by double-clicking a dashboard’s tab to rename the tab).
-
3The gear menu also offers Duplicate (creates a “Copy of …” with all its widgets) and Delete. Delete asks for confirmation, then permanently removes the dashboard and every widget on it. Deleting a dashboard cannot be undone — the Undo toast applies only to deleting an individual widget on a dashboard (see The Grid), not to deleting a whole dashboard.
Tabs: keep several dashboards open at once
- Add a hidden dashboard to the tab bar, or create a brand-new one, from the add-tabs dialog.
- Reorder tabs by dragging, rename a tab (with edit permission), and close a tab to hide it from the bar (closing a tab does not delete the dashboard).
The Grid: Adding, Arranging, and Saving
Widgets live on a responsive 12-column grid. With edit permission you can drag, resize, and group them. Without it, the dashboard is view-only.
Layout behavior
| Behavior | Detail |
|---|---|
| Columns | 12 columns on desktop sizes (large, medium, small). On phones the grid collapses to a single column so every widget stacks full width. |
| Move | Drag a widget by the handle in its header. Widgets can overlap while you are editing. |
| Resize | Pull the corner. New widgets drop in at the next free spot at a standard starting size, then resize freely. Auto Align gives each widget a sensible size for its type: gauge, label, progress, pie, and doughnut snap to a small square; line/bar/area/scatter charts to a wider rectangle; tables and maps to a full-width block. |
| Spacers | Add spacer drops a full-width divider that splits the dashboard into vertical sections (for example “KPIs” above, “History” below). Auto Align respects these sections. |
Saving, autosave, and history
- Autosave: layout changes (moves, resizes, spacer edits) persist automatically. A small indicator shows Saving…, then Saved · just now, and warns if a save failed and will retry.
- Auto Align Widgets packs widgets tightly into a clean grid, section by section, in one action.
- Refresh Dashboard re-pulls data for every widget on demand.
- Undo / Redo covers layout commits plus adding and deleting widgets, up to the most recent 20 actions on the current dashboard.
- Full screen expands the dashboard for a wall display. When several dashboards are open as tabs, previous/next arrows flip between those open dashboards.
Live Data
Widgets update themselves. The dashboard opens an authenticated WebSocket connection and keeps every widget current as new readings arrive.
- Charts request a time window (Live or Daily) and stream a series of readings.
- Single-status widgets (gauge, label) request the latest reading only.
- Multi-status widgets (table, map, progress, pie, doughnut) request the latest value per bound attribute.
Widget Data Binding
Every widget is built from one or more Attributes (data points). Each attribute row ties a device to one of its measurements, with a few display options.
| Field | What it does |
|---|---|
| Device | Searchable picker. Type to find a device by name. Required for each attribute row. |
| Attribute | The measurement to show. The list fills only after a device is chosen, and reflects that device’s auto-detected attributes. |
| Statistic | Charts only: how to reduce a window of readings into one aggregated point. Options are Max, Min, Average, Sum, Max absolute, and Min absolute (the default is Max absolute). Hidden when a chart is showing Raw data, since there is nothing to aggregate. Status and multi-status widgets do not show a Statistic. |
| Color | The series, slice, or value color for this attribute. (No Color picker on a Map data point, and it is hidden on a Gauge once Advanced color settings is on.) |
| Decimal places | 0 to 4 decimal places for the displayed value. Shown only on Single Status (Gauge, Label) and Table attributes; the default is 1. |
| Unit (temperature only) | For a temperature attribute, a quick toggle between Celsius (°C) and Fahrenheit (°F). |
Building a Widget
The widget editor has a config panel on the left and a live preview on the right, so you see the real thing as you set it up.
-
1Enter a Widget Title (required) and pick the target Dashboard (hidden when you are already inside one).
-
2Choose a Widget Type: Chart, Single Status, or Multi Status. Then choose a Style (the sub-type) within that type.
-
3Set the type-specific options (time range, scale, table cells, and so on), then add one or more Attributes.
-
4Watch the Preview, then save. The widget drops onto the dashboard at the next free spot.
The Widget Catalog
There are three widget types, each with several styles. The type identifiers are chart, single_status, and multi_status; each style has its own sub-type identifier shown below.
| Type | Styles (sub-type id) |
|---|---|
Chart (chart) | Line (line), Bar (bar), Area (area), Scatter (scatter) |
Single Status (single_status) | Gauge (gauge), Label (label) |
Multi Status (multi_status) | Table (table), Map (map), Progress (progress), Pie (pie), Doughnut (doughnut) |
Chart — Line, Bar, Area, Scatter
What it shows: one or more attributes plotted over time. Use it for trends, comparisons across devices, and history. Charts plot numeric values only.
| Option | What it does |
|---|---|
| Style | Line, Bar, Area, or Scatter. |
| Display Type | Live (a rolling relative window) or Daily (a rotating day-based window). For Daily, the Duration select picks which day to show: Today, Yesterday, Two days ago, or Three days ago. |
| Source Data | The aggregation interval: Raw, 1-minute aggregation, 5-minute aggregation, 10-minute aggregation, 30-minute aggregation, 1-hour aggregation, or 3-hour aggregation. Daily charts cannot use Raw. With Raw selected, the per-attribute Statistic is hidden. |
| X-axis | For Live, Max points caps how many points are drawn (up to 1440) and an optional Display range sets how far back to look (a number plus seconds / minutes / hours / days). For Daily, the Duration day-selector above sets the window. |
| Y-axis | Minimum value and Maximum value. Leave both blank for Auto. If you set one you must set the other, and the max must be greater than the min. |
| Attributes | One or more device attributes, each with a Color and (when aggregating) a Statistic. |
Single Status — Gauge
What it shows: a single device’s latest value as a dial against a min/max range. Use it for “current temperature”, “current CO₂”, and similar at-a-glance KPIs. Exactly one attribute.
| Option | What it does |
|---|---|
| Minimum value / Maximum value | The gauge’s scale ends, entered as whole numbers. Min defaults to 0, max to 100. Both are required, and min must be less than max. |
| Gauge direction | Sweep Minimum to Maximum or Maximum to Minimum. |
| Show scale | Draw the numeric tick marks around the dial. |
| Advanced color settings | Turns on optional threshold bands for the attribute. Each row pairs a target value (shown as ≥ Target value for a Minimum-to-Maximum gauge, or ≤ Target value for Maximum-to-Minimum) with a Gauge color and a Text color, so the dial recolors as the value crosses each threshold. Add rows with the plus button; the first row’s threshold is fixed to the gauge min (or max) and cannot be removed. Each threshold must stay within the min/max range and follow the gauge direction. (With this on, the attribute’s normal Color picker is hidden.) |
| Decimal places | 0 to 4 on the displayed value (default 1). |
Single Status — Label
What it shows: the latest value as plain text with its unit. Use it for compact readouts and for non-numeric attributes (status strings, on/off states) that a gauge cannot show. One attribute.
- Decimal places (0 to 4) for numeric values.
- Color for the value.
- Handles string and boolean values, which is why it pairs well with categorical attributes.
Multi Status — Table
What it shows: a grid of latest values, one attribute per cell. Use it to lay out related readings (for example one row per room, one column per metric).
| Option | What it does |
|---|---|
| Number of Rows / Columns | Grid size. Rows up to 16, columns up to 8, capped so total cells stay at or under 16 (more rows means fewer columns allowed). |
| Show table labels | Toggle the row and column header labels on or off. |
| Row / Column labels | Editable text. Defaults are letters for columns (A, B, C…) and numbers for rows (1, 2, 3…). |
| Cell (per attribute) | Each attribute row gets a Cell picker (A1, B2, and so on) that places it in the grid. Every attribute needs a cell, and two attributes cannot share a cell. |
options.tableLabel, which holds the column labels and row labels ({ "colum": ["A","B"], "row": ["1","2"] }). Each attribute then carries its own placement in options.tableIndex, stored as a JSON string of [row, column] indices (for example the string "[0,1]" means row 1, column B). So a complete table widget needs both: options.tableLabel on the widget for the grid, plus a per-attribute options.tableIndex string for where each value sits. If the grid is resized smaller, any attribute pointing at a cell that no longer exists has its tableIndex cleared, and you re-assign it.Multi Status — Map
What it shows: device pins placed on an uploaded floor plan or site image, colored by attribute. Use it for spatial monitoring (a floor of sensors, a site map).
| Option | What it does |
|---|---|
| Map image (Upload image) | Upload a PNG, JPEG, or WebP floor plan or site image. Required — a warning reads “Map image is required.” and the widget will not save without one. |
| Window: Information | Toggle an on-map info panel for the selected pin. |
| Window: Filter | Toggle an on-map filter control. |
| Advanced Settings | Unlocks per-pin extras: a Use label checkbox that reveals a label-text field, a Place value switch with a Label position (Center, Top, Bottom, Left, Right), and a Related widget select that links the pin to another widget on the dashboard bound to the same device and attribute. |
| Category (per attribute) | The pin icon, chosen from a “Select a category” menu: Air Flow, Temperature, Humidity, CO₂, Acceleration, Door (open/close), Brightness, Motion, Occupancy, and Other. Required per pin. |
| Icon-x / Icon-y (per attribute) | Place the pin from 0 to 100 across and down the image, via a number input or a slider. |
| Show Chart on Click (numeric attributes) | Optionally show a small history chart when a numeric pin is clicked, with its own style, Live/Daily duration, aggregation interval, Y-axis, and color. |
appMapId). A single dashboard can hold up to 16 map widgets; adding more than that is rejected.Multi Status — Progress
What it shows: progress bars toward a target, per attribute. Use it for “X of max” style readouts (people counted vs capacity, output vs goal).
| Option | What it does |
|---|---|
| X-axis Type | Time Scale or Numeric Scale. |
| 24-hour scale | For Time Scale, fix the axis to a full 24-hour span. |
| Per-attribute | Each attribute can carry a task name, a target total, and a start/end time range (time scale) or start/end number range (numeric scale). |
Multi Status — Pie and Doughnut
What it shows: a share-of-total breakdown across attributes. Pie is a filled circle; Doughnut is the same with a hole in the middle. Use them for composition (share of devices by state, contribution to a total).
| Option | What it does |
|---|---|
| Text color | Color of the slice labels. |
| Sort by value (Descending) | Order slices largest to smallest. |
| Show labels outside | Place value labels outside the ring instead of on the slices. |
| Per-attribute | Each attribute is one slice, with its own Color and an optional slice label name. |
Plan Limits
Each plan card in Billing lists a Dashboards allowance for the workspace, which may appear as a specific number or as Unlimited depending on your plan; there is no separate per-widget cap surfaced in the product. The limits that always apply are structural and are covered with each widget above: up to 16 map widgets per dashboard, and up to 16 cells per table widget (up to 16 rows and 8 columns, capped at 16 cells total).