Timeline Template
A real-time sparkline chart for tracking values over time. Each push sends a data point; the server accumulates history and delivers the sparkline data to iOS via push notifications.
Fields
| Field | Type | Description |
|---|---|---|
template | string | Required. Must be "timeline" |
value | object | The data point(s) for this push. Required. A labeled map (e.g. {\"CPU\": 72.5} or {\"CPU\": 72.5, \"GPU\": 45.2}). Max 4 series, 32-char keys |
unit | string | Unit suffix on value display (e.g. "°C", "%"). Max 32 characters. Used as fallback when units is set |
units | object | Per-series unit overrides. Keys must match value keys; missing keys fall back to unit. Max 32-char values |
scale | string | Y-axis scaling: "linear" (default) or "logarithmic" |
decimals | integer | Decimal places for display. null = auto-detect. Range 0–10 |
smoothing | boolean | Curve interpolation between points. Default: false (straight segments) |
thresholds | array | Up to 5 horizontal reference lines. Each has value (required), color, and label (max 12 chars) |
state | string | Status text (e.g. "Heating", "Monitoring") |
icon | string | SF Symbol name (e.g. "chart.xyaxis.line") or MDI icon with mdi: prefix |
accent_color | string | Named color or hex. Default: teal |
Info
The server accumulates history automatically — each push appends a timestamped data point. The history field in the response is read-only (client-supplied history is ignored). Up to 300 points per series are stored; APNs payloads are dynamically downsampled via LTTB to fit 4KB while preserving peaks and visual shape.
Example: Single Value
Server temperature monitoring
{
"state": "ONGOING",
"content": {
"template": "timeline",
"value": {"Temperature": 13.7},
"unit": "°C",
"state": "Heating",
"icon": "thermometer.medium",
"accent_color": "orange",
"smoothing": true
}
}Example: Multi-Value with Thresholds
System health with mixed units
{
"state": "ONGOING",
"content": {
"template": "timeline",
"value": {
"CPU": 72.5,
"GPU": 45.2,
"Fan": 60.0,
"SSD": 38.1
},
"unit": "%",
"units": { "GPU": "°C", "SSD": "°C" },
"state": "Monitoring",
"thresholds": [
{ "value": 80, "color": "red", "label": "Critical" },
{ "value": 60, "color": "orange" }
]
}
}Typical Flow
- Start tracking (
ENDED -> ONGOING): Set initial value, unit, and display options (scale, smoothing, thresholds) - Send data points (
ONGOING -> ONGOING): Push updated values — the sparkline grows with each push - Stop tracking (
ONGOING -> ENDED): Final value displayed, sparkline frozen
Tip
Value-only updates are delivered at low priority to conserve the iOS push budget. Changing scale, smoothing, decimals, unit, or units triggers high-priority delivery.
Use Cases
- Server monitoring — CPU temperature, memory usage, network throughput over time
- Smart home — room temperature trends, humidity tracking, energy consumption
- 3D printing — hotend/bed temperature curves during a print
- CI/CD — build time trends, test suite duration over consecutive runs
- IoT — sensor readings over time with threshold alerts