Configuration
There are three places a setting can come from, and one of them wins.
- The Settings page (
settings.html, the Settings card on the hub). The first Save writesdashboards_config.jsoninto the plugin’s Preferences folder, and from then on that file is the single source of truth for favourites, custom links, cameras, room extras, hidden scenes, security and the other keys below. Camera changes need a plugin restart, because the streaming pipeline is built at startup; everything else applies at once. - The Configure dialog (Plugins → Dashboards → Configure). Credentials, the history backend, the weather key, the carbon region, logging and the reflector switch live here. These are things a web page should not be able to change.
IndigoSecrets.py, optional. A single file of credentials shared across all the author’s plugins. If it exists, its values take precedence over the matching Configure fields — and on an install that has never saved from the Settings page, its camera and room dictionaries are read too. Nobody else needs it: every key has a Configure field.
The Configure dialog
| Field | What it does |
|---|---|
| Indigo API URL | The REST base URL, e.g. http://192.168.1.10:8176. Blank means the local server on port 8176 |
| Indigo API Key | The Bearer token the plugin uses for its own diagnostics and the guest passthrough. Never written into any public file |
| Camera User / Password | One set of camera credentials, shared across every camera. Works for Dahua and Hikvision |
| Sigen Dashboard URL | Optional link to a legacy Sigenergy mini-dashboard, for the matching menu item |
| Cameras (JSON) | The camera list, for installs that have never saved from Settings — see below |
| Swap-Out Host | A camera that can replace another in the hub’s strip |
| Hidden Scenes (JSON) | Action-group names or ids to keep off the Scenes page |
| Carbon Region | Your UK grid region, for the Carbon page and the hub’s carbon chip |
| Auto-seed the API key to LAN browsers | A new browser on the home network or tailnet pairs itself on first visit |
| OpenWeatherMap API key, latitude, longitude | The hub weather card’s forecast and sun times |
| System Health thresholds | How many hours quiet makes a battery device “quiet”, and what counts as a low battery |
| go2rtc binary path | Where to find go2rtc if it is not on the PATH |
| SQL Logger backend | SQLite (the default) or PostgreSQL, with the connection fields for Postgres |
| Refuse the reflector | Off by default. When on, the pages refuse to run over the Indigo reflector and show the LAN address instead — see Remote access |
| Log routine activity to the Indigo Event Log | Whether the plugin’s own housekeeping lines go to the event log or only to its own log file |
| Log Level | Debug puts the narration back |
The Settings page
Everything the pages read from configuration, editable in the browser. The banner at the top says where it writes.
- Favourites. One-tap tiles for the hub, in the order given. A favourite is a control (toggle a device or run a scene), a reading (show a device state, not tappable), a door tile (shows the door’s state and acts on it), a room shortcut or a group. Pickers take device ids with a live lookup showing which device they resolve to; a favourite pointing at something that no longer exists is named rather than silently dropped.
- Custom links. Extra tiles for the menu’s Tools group — anything with a URL.
- Cameras. Host, name, vendor (Dahua or Hikvision), stream (
sub2, the default, ormain), the rooms it belongs to, and whether it is in the hub’s strip. A swap-out host picker sits at the bottom. Changes here need a plugin restart. - Rooms. Which Indigo device folders become rooms, and a per-room override for anything the automatic classifier gets wrong. Each room shows what it currently resolves to (“1 doors · 0 appliances”), so a room reading “0 doors” that has doors is a classifier needing an override.
- Scenes. Every action group with a tick to hide it from the Scenes page, and a per-folder tick that hides the whole folder.
- Security. The guest pairing URL and token, and the control PIN — asked once per session before any command on the listed devices. It is a speed bump for shared and family devices, not a security boundary, and the page says so.
- Raw JSON. The whole configuration as it will be saved, with From form to regenerate it and Apply to form to parse it back. The escape hatch for anything the forms do not model.
Save checks that the plugin is actually up first: this is the page most likely to be opened straight after a restart, and a save landing on a restarting plugin used to stall the web server.
Cameras
[
{"host": "192.168.1.50", "name": "Front Door", "vendor": "dahua"},
{"host": "192.168.1.51", "name": "Drive", "vendor": "hikvision"},
{"host": "192.168.1.52", "name": "Garden", "vendor": "dahua", "stream": "main", "room": "Garden"}
]
vendor—dahuaorhikvision; it selects the RTSP URL template.stream—sub2(the default, roughly a quarter of the mainstream’s bitrate) ormain.room— a name or a list of names; which room pages show this camera. Omit it to keep the camera off room pages.
The same fields are on the Settings page’s Cameras card, which is the easier way to enter them.
Room extras
Optional, per room. A room with nothing here still shows its lights, motion sensors and contact sensors automatically; the extras unlock the other tile types. Keyed by room name (the Indigo device folder). The Settings page’s Rooms card edits all of this.
doors— a pulse-door tile. Each entry has alabel, one or morerelayIdsto pulse momentarily (garage openers, gate controllers), apulseMsduration, and optionally astatusContactIdcontact sensor andopenWhenContactOnState(true if the contact being On means the door is open). Devices listed here are hidden from the room’s other sections so they do not appear twice.appliances— a read-only tile pairing a power meter (monitorId, live watts) with an ApplianceMonitor cycle device (cycleId, Idle / Running / Door open and last-cycle stats). Either can be omitted.tv— device ids treated as a group, each with a toggle and an All On / All Off for the set.plugs— device ids shown in their own Plugs & Sockets section with a toggle each. They are kept out of the “lights on” count and there is deliberately no bulk button: a freezer or a router could be on one.fire— device ids treated as a fire: an open-loop relay whose state is the last thing sent, not a reading. Shown separately, and the night sweep re-asserts them off.openLoop— device ids whose state cannot be read back (RF relays, IR blasters). A group favourite commands them but never lets their believed state decide the group’s label.mainLight— the light or lights to leave out of the room’s All On / All Off.hideDeviceIds— device ids to keep off that room page altogether.include— a section name to a list of device ids to force into that section whatever the classifier thinks:lights,motion,radiators,windows,sensorsorextras.sortOrder— a section name to a list of device ids that go first, in that order; the rest follow alphabetically.
Other config keys
These live in dashboards_config.json. The Settings page writes them; anything the forms do not model can be set in the raw-JSON box.
| Key | Shape | What it does |
|---|---|---|
roomFolders | list of folder names | Which Indigo device folders become rooms. With nothing set the plugin uses its own defaults, which are one house’s folder names and will produce no rooms on yours |
siteName | string | The name in every page title, the hub heading and the home-screen icon. Default “Dashboards” |
vehicles | [{"id": <device>, "label": "Car 12V"}] | Battery-voltage monitors to list under the Energy page’s battery fleet, with a frozen-reading check |
arrayKwp | number | Your solar array’s rating, for the weather page’s roof-versus-sky cross-check |
actionWatch | object | Per-action-group confirmation rules for scene buttons: which device states confirm which action, so no page carries device numbers |
livePoolSize | number, default 6 | How many cameras show a moving picture at once. Six is a ceiling, not a preference: browsers allow about six long-lived connections per address, so a seventh never connects rather than merely running slowly |
Credentials in IndigoSecrets.py
If you already use IndigoSecrets.py with the author’s other plugins, these are the keys this one looks for. The repo ships IndigoSecrets_example.py with empty placeholders. Every key has a matching Configure field, and installs that have saved from the Settings page read cameras, main cameras, room extras and hidden scenes from dashboards_config.json instead.
| Key | Used for |
|---|---|
INDIGO_URL | REST API base URL |
INDIGO_API_KEY | REST API Bearer token (CLAUDEBRIDGE_BEARER_TOKEN is accepted as an alias) |
DAHUA_USER / DAHUA_PASS | Camera credentials |
DASHBOARDS_CAMERAS | The camera list |
DASHBOARDS_MAIN_CAMERAS | Host addresses for the hub’s strip (must also be in the camera list) |
DASHBOARDS_ROOM_EXTRAS | The per-room extras dictionary |
DASHBOARDS_HIDDEN_SCENES | Action groups to keep off the Scenes page |
SIGEN_DASHBOARD_URL | The legacy Sigenergy mini-dashboard link |
OWM_API_KEY / LATITUDE / LONGITUDE | OpenWeatherMap and your site’s coordinates |
HISTORY_PG_HOST / _PORT / _USER / _PASSWORD / _DATABASE | PostgreSQL, when the SQL Logger writes to Postgres |
Never put a credential into anything under /public/ — that namespace is served without authentication, and over the reflector it is reachable from the internet.