Skip to content

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

FieldTypeDescription
templatestringRequired. Must be "timeline"
valueobjectThe 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
unitstringUnit suffix on value display (e.g. "°C", "%"). Max 32 characters. Used as fallback when units is set
unitsobjectPer-series unit overrides. Keys must match value keys; missing keys fall back to unit. Max 32-char values
scalestringY-axis scaling: "linear" (default) or "logarithmic"
decimalsintegerDecimal places for display. null = auto-detect. Range 0–10
smoothingbooleanCurve interpolation between points. Default: false (straight segments)
thresholdsarrayUp to 5 horizontal reference lines. Each has value (required), color, and label (max 12 chars)
statestringStatus text (e.g. "Heating", "Monitoring")
iconstringSF Symbol name (e.g. "chart.xyaxis.line") or MDI icon with mdi: prefix
accent_colorstringNamed 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

  1. Start tracking (ENDED -> ONGOING): Set initial value, unit, and display options (scale, smoothing, thresholds)
  2. Send data points (ONGOING -> ONGOING): Push updated values — the sparkline grows with each push
  3. 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