| Developer: | Glenn's Plugins Like this plugin? Show your appreciation! |
| Category: | A/V and IR Equipment |
| Github: | Github Repo |
| Assistance: | Get help! |
| Plugin ID: | com.GlennNZ.indigoplugin.deluxeGraphing |
| Latest release: | v1.1.37 released on Sept. 5, 2026 |
| Release downloaded: | 11 times |
| Requires: | Indigo v2023.2.0 or higher |
| (Check the Releases tab below for older releases that may have different requirements) | |
| Download latest release |
![]()
Deluxe Graphing is an Indigo plugin that provides a simple local web app for viewing historical Indigo device state data as charts (from a PostgreSQL-backed history table). It can also generate PNGs on demand, making it ideal for wall/tablet dashboards and Indigo Control Pages.
It’s designed to work well with dashboard apps such as Kiosk Home:


Multi graphs let you combine several device states into a single chart (for example, multiple “watts” states on the same chart, or a left/right axis pairing such as temperature + power).



This shows how to use the Render PNG URL inside the Indigo Control Page editor so the image can be refreshed on a schedule (or by an Indigo action/trigger).

aspectRatio in a preset's chartJsOverrides to get a fixed-shape chart insteadPresets provide defaults only (colors, chart options, etc.). Your URL options always win, so existing links won’t break.
Create a saved “multi graph” definition that combines multiple device states into a single chart: - each series can have its own label and color - series can be assigned to different axes (for example left/right)
The builder page (shown in MainMulti.png) makes it easy to add multiple series and save them as a named multi graph. The multi graph viewer then displays them together (see Example_multi.png).
Deluxe Graphing can render charts to PNG files and also return the PNG image directly.
This is especially useful when: - your dashboard prefers images rather than embedded web pages - you want to use Indigo Control Pages (see Controlpage.png) - you want a single image file updated on demand (for example, via a schedule)
For multi graphs, the builder page shows a ready-to-copy render URL at the bottom once you have saved a multi graph (see MainMultiPng.png).
For PNG rendering only - Playwright + Chromium browser download (one-time)
Your Indigo log will show the local address to open in a browser.
The resulting chart looks like Example.png.
If you’re building an Indigo Control Page and want the chart to appear as an image:
This gives you a reliable “always show latest chart image” workflow inside Indigo.
Presets let you save a named set of defaults for how graphs look and behave. You manage presets using the built-in Preset Manager page (no manual file editing required).
A preset has three main sections:
uiDefaults
“Simple” defaults that match the same options the UI normally puts into URLs (hours, chart type, colors, fill, stats, font).chartJsOverrides (optional JSON object)
Advanced Chart.js options overrides. This is where you can change legend position, grid/tick styling, tooltip styling, animations, interaction mode, etc.datasetOverrides (optional JSON object)
Advanced per-series dataset settings (line width, points, dashed lines, stepped lines, etc.).
For multi graphs, these overrides are applied to every series.Most common overrides no longer require hand-written JSON — the Preset Manager has form controls that compile into the JSON for you:
plugins.title)datasetOverrides)timeFormat)values)values=true (URL param, preset checkbox, or builder checkbox) draws each point's value above the line — like tooltips that never disappear. This uses the standard chartjs-plugin-datalabels plugin. Roughly every Nth point is labelled (about 12 per series) with automatic hiding of overlapping labels, the most recent point is always labelled, boolean states show ON/OFF, and in multi graphs each series' labels use that series' color.
Fine-tuning via chartJsOverrides uses the plugin's own well-documented options under plugins.datalabels, e.g.:
{
"plugins": {
"datalabels": {
"font": { "size": 13 },
"color": "#ffffff",
"backgroundColor": "rgba(0,0,0,0.6)",
"borderRadius": 4,
"align": "top",
"offset": 8
}
}
}
See the datalabels options reference for everything available (alignment, anchoring, backgrounds, padding, rotation, etc.). Labels only appear when values=true.
Common styling doesn't require JSON:
valuesSize / valuesDecimals URL params, preset uiDefaults fields, or the size field in the builders.plugins.datalabels for you.Anything you type into the advanced JSON boxes still wins over the form-generated values on conflicts.
Notes: - URL parameters still override preset defaults (presets are “defaults”, not hard locks). - If you’re not seeing changes, add a “smoking gun” override like a chart title (example below) to confirm the preset is being applied.
The plugin ships a starter library of presets, copied into your presets folder on startup — only if a preset with that name doesn't already exist, so your own presets and edits are never touched. Alongside the classic theme/legend/grid presets, these showcase the newer options:

uiDefaults using the form.You can paste this into chartJsOverrides:
{
"aspectRatio": 3.2,
"animation": {
"duration": 1800,
"easing": "easeInOutQuart"
},
"plugins": {
"title": {
"display": true,
"text": "PRESET APPLIED",
"color": "#ff00ff",
"font": {
"size": 18,
"weight": "bold"
},
"padding": {
"top": 6,
"bottom": 10
}
},
"legend": {
"display": true,
"position": "bottom",
"labels": {
"color": "#00ff00",
"font": {
"size": 16,
"weight": "bold"
}
}
},
"tooltip": {
"enabled": true,
"animation": false,
"backgroundColor": "rgba(0,0,0,0.95)",
"titleColor": "#ff00ff",
"bodyColor": "#00ff00",
"borderColor": "#ff00ff",
"borderWidth": 2
}
},
"scales": {
"x": {
"grid": { "color": "rgba(255,0,255,0.25)" },
"ticks": { "color": "#ff00ff" }
},
"y": {
"grid": { "color": "rgba(0,255,0,0.18)" },
"ticks": { "color": "#00ff00" }
}
}
}
And paste this into datasetOverrides:
{
"borderWidth": 6,
"pointRadius": 7,
"pointHoverRadius": 10,
"borderDash": [10, 6]
}
uiDefaults (simple / UI-aligned)hours — default time window (e.g. 24, 48)type — chart type: line, bar, scattertension — line smoothing (0 = angular, 0.4 = smooth)bg — page background color (hex, e.g. #0f1220)line — default accent/line color (hex)fill — fill under the line (true/false)fillColor — fill color (hex)stats — show/hide stat cards (true/false)values — draw point values above the line at spaced intervals, like permanent tooltips (true/false, default false)valuesSize — font size in px for the value labels (default 11)valuesDecimals — decimal places for non-integer value labels (default 1)title — show/hide the device title heading at the top of the page (true/false, default true)transparent — transparent page background and chart panel (true/false, default false)timeFormat — x-axis/tooltip time format: 12 (h:mm a) or 24 (HH:mm); empty = default 24-hourfont — CSS font-family stringchartJsOverrides (advanced Chart.js options)These merge into the Chart.js options object.
plugins.legend.position — move legend: top, bottom, left, rightplugins.legend.labels.color — legend text colorplugins.legend.labels.font.size / weight — legend font stylingplugins.tooltip.* — tooltip colors, borders, enabled/disabledplugins.title.* — add a title (useful as a visual confirmation the preset is applied)scales.x.grid.color / scales.y.grid.color — grid line colorsscales.x.ticks.color / scales.y.ticks.color — tick label colorsanimation.duration / animation.easing — animation tuninginteraction.mode / interaction.intersect — how hovering/tooltip selection behavesdatasetOverrides (advanced per-series dataset options)These merge into each dataset (series).
borderWidth — line thicknessborderDash — dashed line pattern, e.g. [10, 6]pointRadius — point size (0 hides points)pointHoverRadius — point size on hoverstepped — stepped-line behavior (true, "before", "after") for on/off style statesGraphs always display in the viewing browser's local time zone — there is nothing to configure on the display side.
What matters is how the plugin interprets the timestamps stored in your history database, which varies by setup: Indigo's SQL Logger writes UTC into sqlite (datetime('now')), but for PostgreSQL it uses now(), which follows the postgres server's timezone — local time on most Macs, UTC on some servers.
The plugin auto-detects this at startup (sqlite: inspects the ts column default; PostgreSQL: compares the server clock against UTC), logs the result, and then serializes every timestamp with an explicit UTC offset (e.g. 2026-09-05T14:23:01+10:00) so every browser converts it to its own local time correctly.
If your graph times are still shifted, override History timestamps are stored in (UTC / Server local time) in the plugin preferences — the Indigo log line History timestamp zone auto-detect: ... shows what was detected. This setting also keeps the "last N hours" query window aligned with how your data is stored.
Note on timezone overrides via
chartJsOverrides: JSON like"scales": { "x": { "adapters": { "date": { "zone": "America/Chicago" } } } }has no effect — that is achartjs-adapter-luxonfeature, and this plugin useschartjs-adapter-date-fns, which always renders in the browser's time zone. With the fix above you shouldn't need a zone override at all: each browser/wall panel shows its own local time.
For 12-hour vs 24-hour display, use the timeFormat option (URL param, preset uiDefault, or the Time Format selector in the builders) instead of hand-writing displayFormats JSON.
For wall panels and dashboard overlays you often want just the chart — no device title, no legend, and no page background. These three things live in different layers, so they are controlled in different places:
| What | Layer | How to control it |
|---|---|---|
Legend (e.g. sensorvalue) |
Chart.js | Preset Legend display checkbox, or chartJsOverrides → plugins.legend.display: false |
| Device title at the top | HTML <h1> |
title=false URL param, or preset Show device title checkbox |
| Page + chart panel background | CSS | transparent=true URL param, or preset Transparent background checkbox |
Both the single graph (/graph) and multi graph (/graph_multi) pages support:
title=false — hides the device/graph title headingtransparent=true — makes the page background, the chart panel background, and the panel border fully transparentExample:
http://<indigo-server>:8088/graph?device=1828238559&state=sensorvalue&preset=MyPreset&title=false&transparent=true
In the Preset Manager, the uiDefaults section now has two checkboxes:
Combine those with unchecking Legend display in the Chart.js section, and a single preset gives you a completely clean, chart-only, transparent view:
http://<indigo-server>:8088/graph?device=1828238559&state=sensorvalue&preset=MyPreset
As always, URL params override the preset (title=true on the URL re-enables the title even if the preset hides it).
transparent=true also works on the Render PNG URLs (/api/render_png and /api/render_png_multi). The renderer already screenshots with omit_background, so the resulting PNG has a genuinely transparent background — ideal for layering charts over Indigo Control Page backgrounds or dashboard images.
If you set an access token in plugin preferences, the web UI will include it automatically in generated URLs.
| Released on: | Sept. 5, 2026 |
| Requires: | Indigo v2023.2.0+ |
| Downloaded: | 11 times |
| Download this release | |
A major usability release: correct timezones everywhere, charts that fill the browser, permanent point-value labels, form-based styling for nearly everything, and a new built-in preset library.
ts column default; PostgreSQL: server clock vs UTC), logs what it found, and can be overridden to UTC / Server local time.aspectRatio in chartJsOverrides keep a fixed-shape chart (see the new Classic_Fixed preset to restore the old look).title=false — hide the device title headingtransparent=true — fully transparent page + chart panel (also produces transparent PNGs)timeFormat=12|24 — 12-hour or 24-hour axis labels and tooltipsvalues=true — permanent point-value labels above the line (powered by chartjs-plugin-datalabels): auto-spaced (~12 per series with overlap hiding), newest point always labelled, ON/OFF for booleans, per-series colors on multi graphsvaluesSize / valuesDecimals — label font size and decimal placesAll of these pass through to the PNG render endpoints.
New form sections that compile into the overrides JSON for you (your advanced JSON still wins on conflicts):
Seeded on startup, never overwriting existing presets:
History timestamp zone auto-detect: .... If you previously saved plugin prefs with the timestamp zone set to UTC, switch it to Auto-detect in plugin config.dgValueLabels JSON from the short-lived 1.1.31 build, replace it with standard plugins.datalabels options.| v1.1.20 | Requires Indigo v2023.2.0+ | Released Dec. 21, 2025 | 1.1.20 Graphing of all Indigo Devices States, single or combined graphs. Live Updates. URL or PNG |
| Released on: | Dec. 21, 2025 |
| Requires: | Indigo v2023.2.0+ |
| Downloaded: | 55 times |
| Download this release | |
![]()
Deluxe Graphing is an Indigo plugin that provides a simple local web app for viewing historical Indigo device state data as charts (from a PostgreSQL-backed history table). It can also generate PNGs on demand, making it ideal for wall/tablet dashboards and Indigo Control Pages.
It’s designed to work well with dashboard apps such as Kiosk Home:


Multi graphs let you combine several device states into a single chart (for example, multiple “watts” states on the same chart, or a left/right axis pairing such as temperature + power).



This shows how to use the Render PNG URL inside the Indigo Control Page editor so the image can be refreshed on a schedule (or by an Indigo action/trigger).

Presets provide defaults only (colors, chart options, etc.). Your URL options always win, so existing links won’t break.
Create a saved “multi graph” definition that combines multiple device states into a single chart: - each series can have its own label and color - series can be assigned to different axes (for example left/right)
The builder page (shown in MainMulti.png) makes it easy to add multiple series and save them as a named multi graph. The multi graph viewer then displays them together (see Example_multi.png).
Deluxe Graphing can render charts to PNG files and also return the PNG image directly.
This is especially useful when: - your dashboard prefers images rather than embedded web pages - you want to use Indigo Control Pages (see Controlpage.png) - you want a single image file updated on demand (for example, via a schedule)
For multi graphs, the builder page shows a ready-to-copy render URL at the bottom once you have saved a multi graph (see MainMultiPng.png).
For PNG rendering only - Playwright + Chromium browser download (one-time)
Your Indigo log will show the local address to open in a browser.
The resulting chart looks like Example.png.
If you’re building an Indigo Control Page and want the chart to appear as an image:
This gives you a reliable “always show latest chart image” workflow inside Indigo.
Presets let you save a named set of defaults for how graphs look and behave. You manage presets using the built-in Preset Manager page (no manual file editing required).
A preset has three main sections:
uiDefaults
“Simple” defaults that match the same options the UI normally puts into URLs (hours, chart type, colors, fill, stats, font).chartJsOverrides (optional JSON object)
Advanced Chart.js options overrides. This is where you can change legend position, grid/tick styling, tooltip styling, animations, interaction mode, etc.datasetOverrides (optional JSON object)
Advanced per-series dataset settings (line width, points, dashed lines, stepped lines, etc.).
For multi graphs, these overrides are applied to every series.Notes: - URL parameters still override preset defaults (presets are “defaults”, not hard locks). - If you’re not seeing changes, add a “smoking gun” override like a chart title (example below) to confirm the preset is being applied.

uiDefaults using the form.You can paste this into chartJsOverrides:
{
"aspectRatio": 3.2,
"animation": {
"duration": 1800,
"easing": "easeInOutQuart"
},
"plugins": {
"title": {
"display": true,
"text": "PRESET APPLIED",
"color": "#ff00ff",
"font": {
"size": 18,
"weight": "bold"
},
"padding": {
"top": 6,
"bottom": 10
}
},
"legend": {
"display": true,
"position": "bottom",
"labels": {
"color": "#00ff00",
"font": {
"size": 16,
"weight": "bold"
}
}
},
"tooltip": {
"enabled": true,
"animation": false,
"backgroundColor": "rgba(0,0,0,0.95)",
"titleColor": "#ff00ff",
"bodyColor": "#00ff00",
"borderColor": "#ff00ff",
"borderWidth": 2
}
},
"scales": {
"x": {
"grid": { "color": "rgba(255,0,255,0.25)" },
"ticks": { "color": "#ff00ff" }
},
"y": {
"grid": { "color": "rgba(0,255,0,0.18)" },
"ticks": { "color": "#00ff00" }
}
}
}
And paste this into datasetOverrides:
{
"borderWidth": 6,
"pointRadius": 7,
"pointHoverRadius": 10,
"borderDash": [10, 6]
}
uiDefaults (simple / UI-aligned)hours — default time window (e.g. 24, 48)type — chart type: line, bar, scattertension — line smoothing (0 = angular, 0.4 = smooth)bg — page background color (hex, e.g. #0f1220)line — default accent/line color (hex)fill — fill under the line (true/false)fillColor — fill color (hex)stats — show/hide stat cards (true/false)font — CSS font-family stringchartJsOverrides (advanced Chart.js options)These merge into the Chart.js options object.
plugins.legend.position — move legend: top, bottom, left, rightplugins.legend.labels.color — legend text colorplugins.legend.labels.font.size / weight — legend font stylingplugins.tooltip.* — tooltip colors, borders, enabled/disabledplugins.title.* — add a title (useful as a visual confirmation the preset is applied)scales.x.grid.color / scales.y.grid.color — grid line colorsscales.x.ticks.color / scales.y.ticks.color — tick label colorsanimation.duration / animation.easing — animation tuninginteraction.mode / interaction.intersect — how hovering/tooltip selection behavesdatasetOverrides (advanced per-series dataset options)These merge into each dataset (series).
borderWidth — line thicknessborderDash — dashed line pattern, e.g. [10, 6]pointRadius — point size (0 hides points)pointHoverRadius — point size on hoverstepped — stepped-line behavior (true, "before", "after") for on/off style statesIf you set an access token in plugin preferences, the web UI will include it automatically in generated URLs.