One place for ready-made, plug-n-play Grafana dashboards. Every dashboard lives in its own folder with the queries, the data collector it needs, its alert rules and a README that tells you exactly which datasource to create. Pick the folder for your hardware, run one script, done.
The point of this repo is consolidation. Dashboards for single-board computers, power stations, smart-home sensors and self-hosted services tend to end up scattered across gists, forum posts and one-off repos. Here they share a layout, a naming convention and a single provisioning script — so adding the fifth dashboard costs you the same five minutes as the first.
| Dashboard | Hardware | Data source | Alerts | Location |
|---|---|---|---|---|
| Pironman 5 | SunFounder Pironman 5 case | InfluxDB (pironman5) via SunFounder pm_dashboard |
– | ↗ separate repo |
| Raspberry Pi 5 Power | Raspberry Pi 5 | InfluxDB (rpi_power) via the bundled collector |
– | in this repo |
| Anker Solix C300X | Anker Solix C300X power station | InfluxDB (homeassistant) via Home Assistant |
4 rules | in this repo |
Pironman 5 is intentionally not duplicated here. It is maintained in its own repository, fxerkan/pironman_grafana_dashboard, and this repo links to it rather than copying the JSON so there is exactly one source of truth. The
dashboards/pironman-5/folder carries the manifest, the setup notes and the links.
Want to add yours? See CONTRIBUTING.md — the folder layout is fixed and CI checks it for you.
Screenshots are of live instances, not mockups.
git clone https://github.com/fxerkan/grafana-dashboarder.git
cd grafana-dashboarderEach folder documents the data it expects, because a dashboard is only half the story — the collector or integration that fills the database is the other half:
dashboards/raspberry-pi-5-power/— ships a Python collector and a systemd unitdashboards/anker-solix-c300x/— expects Home Assistant to be writing Solix sensors into InfluxDBdashboards/pironman-5/— expects SunFounderpm_dashboard
The provisioning script creates the datasources, imports the dashboards and writes the alert rules over Grafana's HTTP API. It is idempotent — run it as often as you like.
# everything
GRAFANA_URL=http://localhost:3000 \
GRAFANA_AUTH='admin:your-password' \
INFLUX_URL=http://localhost:8086 \
scripts/provision.sh
# or just one dashboard
scripts/provision.sh raspberry-pi-5-powerPrefer a service account token over the admin password:
GRAFANA_TOKEN=glsa_xxxxxxxx scripts/provision.shAll provisioning options
| Variable | Default | Purpose |
|---|---|---|
GRAFANA_URL |
http://localhost:3000 |
Grafana base URL |
GRAFANA_AUTH |
admin:admin |
Basic auth, user:password |
GRAFANA_TOKEN |
– | Service account token; takes precedence over GRAFANA_AUTH |
INFLUX_URL |
http://localhost:8086 |
URL baked into the datasources it creates |
INFLUX_USER / INFLUX_PASS |
– | InfluxDB credentials, if your instance requires them |
SKIP_DATASOURCES |
– | Set to 1 to leave datasources alone |
SKIP_ALERTS |
– | Set to 1 to skip alert rules |
GRAFANA_ALERT_RECEIVER |
– | Pin imported alert rules to this contact point instead of the default notification policy |
No credential is ever stored in this repo. Pass them in the environment.
Grafana → Dashboards → New → Import → Upload JSON file, then pick the folder's
dashboard.json. You will be asked to map the datasource. If your existing InfluxDB datasource has
a different UID than the dashboard expects, rewrite it first:
# what does it expect?
scripts/retarget-datasource.py dashboards/raspberry-pi-5-power/dashboard.json --list
# rpi-power-influx
# point it at the datasource you already have
scripts/retarget-datasource.py dashboards/raspberry-pi-5-power/dashboard.json \
--map rpi-power-influx=P1234567890ABCDEF -o /tmp/rpi5.jsondashboards/<slug>/
├── README.md # what it shows, what it needs, how to install it
├── manifest.json # machine-readable: datasources, variants, alerts, plugins
├── dashboard.json # the dashboard itself (or several variants)
├── alerts.json # optional Grafana unified-alerting rules
└── collector/ # optional agent that produces the data
manifest.json is the contract. It declares which datasource UIDs the dashboard needs, which
Grafana plugins must be installed, which folder the dashboard belongs in and which variants exist.
scripts/provision.sh reads it, and scripts/validate.py enforces that the JSON actually matches
what the manifest promises.
Where a device warrants it, a dashboard ships in more than one flavour — the convention comes from the Pironman 5 dashboards:
| Variant | For |
|---|---|
| Simple | Read-only sensor readings. Nothing to configure, nothing to break. |
| Advanced | Variables, drill-down panels, log panels, REST-API control buttons. |
| Business | Advanced plus Business Variable sliders and dropdowns — the friendliest option on a phone or tablet. |
Dashboards with a single variant just ship dashboard.json. See
docs/conventions.md for the full rules.
- Grafana 10 or newer (11.x recommended — the alert rules use unified alerting)
- InfluxDB 1.8+ with the InfluxQL query language. Every dashboard here queries InfluxQL,
not Flux — see
docs/datasources.mdif you are on InfluxDB 2.x/3.x - Per-dashboard extras (a collector, a Home Assistant integration, a Grafana plugin) are listed in
each folder's README and in its
manifest.json
python3 scripts/validate.pyChecks every folder: manifests parse, dashboard UIDs and titles match the manifest, no stray
numeric id that would collide on import, and no dashboard or alert rule references a datasource
the manifest forgot to declare. CI runs this on every push.
- Getting started — Grafana + InfluxDB from zero, including Docker
- Datasources — UIDs used here, InfluxQL vs Flux, retention policies
- Conventions — folder layout, naming, panel and colour rules
- Contributing — how to add your dashboard
- fxerkan/pironman_grafana_dashboard — the Pironman 5 dashboards, referenced from here
- SunFounder pm_dashboard — data source behind the Pironman dashboards
- thomluther/anker-solix-api — the API library behind the Home Assistant Anker Solix integration
MIT — use them, fork them, ship them.


