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 that I share across all my plugins. If it exists, its values win over the matching Configure fields. Nobody else needs it, because every key has a Configure field — see the end of this page.
The Configure dialog
Open it with Plugins → Dashboards → Configure…. The fields, in the order the dialog shows them:
| Field | What it does |
|---|---|
| Indigo API URL | The address of Indigo’s web server, such as http://192.168.1.10:8176. Leave it blank for the Indigo Mac itself on the usual port 8176, and fill it in only if your web server uses another port. The “use this at home” link the pages offer over the reflector takes its start and port from here |
| Indigo API Key | The Indigo API key — the long code Indigo gives other programs so they can read and control your devices. The plugin uses it for its own checks, for guest devices and for setup links. It is never written into any public file |
| Camera User / Camera Password | One camera login, shared by every camera that has no login of its own, whatever its make. Only needed if you have cameras. Pressing Save here approves the camera addresses saved on the Settings page at that moment, and the login is only ever sent to approved addresses — so after adding or changing a camera, come back here, press Save and restart the plugin. See Cameras |
| Camera Logins | Only for a camera whose login is not the shared one, written against its address as {"192.168.1.50": {"user": "admin", "password": "its password"}}, one entry per camera. Each goes only to the address it is written against, so it needs no approval. Shown and stored in plain text. Restart the plugin after changing it. See Cameras |
| Pushover User Key | Your Pushover user key, for alert rules sent to your phone (3.47.0). The message goes through the Pushover plugin, which must be installed, enabled and running |
| Carbon Region | Your part of Great Britain, for the grid-carbon half of the Energy page’s When to run it card. Off hides it and stops the lookups. North East England unless you change it. Needs SigenEnergyManager, like the Energy page |
| Auto-seed the API key to LAN browsers | Off for a new install (3.46.0). Ticked, any browser on your home network or Tailscale pairs itself on its first visit, which hands the full API key to any device that asks, a visitor’s phone included, and makes guest links pointless. Unticked, you pair each device once with a setup link — see Pairing a browser. Installs from before 3.46.0 keep the setting they had |
| Extra trusted networks | Blank unless you fill it in (3.60.0). The plugin’s port 8177, which does auto-seeding, guest pairing and live camera video, answers only the Indigo Mac, Tailscale and the network the Mac is plugged into. If your own phones and tablets are on another network, add it here, written like 192.168.2.0/24, with commas between several. A mistyped entry is refused when you press Save. See Which networks are trusted |
| OpenWeatherMap API key, Site latitude, Site longitude | Add sunset, today’s high and low, UV and conditions to the hub’s Weather card. Without them the card still works from your Ecowitt weather station alone |
| System Health: battery device quiet after (hours) | A battery device that has not changed for this many hours is listed as quiet on the System page. 48 unless you change it |
| System Health: low-battery threshold (%) | Devices at or below this level are listed as low on battery. 20 unless you change it |
| go2rtc binary path (optional) | Where go2rtc is, if it is not somewhere the plugin already looks. Leave it blank and the plugin tries the usual command path and then ~/bin/go2rtc |
| SQL Logger backend | Where Indigo’s SQL Logger writes its history: SQLite, the default, or PostgreSQL. Choose PostgreSQL only if you have pointed the SQL Logger at a PostgreSQL server, and then fill in the Host, Port, Database, User and Password fields that appear. Run Test History Connection after changing it |
| Refuse the reflector | Off unless you tick it. Ticked, the pages refuse to run over the Indigo reflector and show the home address instead, and the plugin’s own replies refuse anything that came that way. Indigo’s web server still hands out the page files themselves there — only switching the reflector off in Indigo stops that. See Remote access |
| Log routine activity to the Indigo Event Log | Unticked, the plugin’s routine housekeeping lines go only to its own log file. Tick it while you are setting the plugin up to see them in the Event Log as well. Warnings and errors always reach the Event Log |
| Log Level | The lowest level of message this plugin puts in the Event Log: Debug, Info, Warning or Error. Info unless you change it. Debug puts the routine lines into the Event Log too, so use it while chasing a problem and put it back afterwards |
Cameras, the hub’s camera strip, room extras and hidden scenes are not in this dialog. They are on the dashboards’ own Settings page.
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, a group, or a page link (opens another Dashboards page such as Flow, Menu or Rooms; a pinned Menu or Rooms card leaves the foot of the hub). 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, make (one of the known makes, or other), stream (
sub2, the default, ormain), an RTSP address when the camera needs its own, 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"},
{"host": "192.168.1.53", "name": "Porch", "vendor": "other",
"rtsp": "rtsp://192.168.1.53:554/h264Preview_01_sub"}
]
vendor— the make:dahua,hikvision,amcrest,lorex,annke,reolink,tapo,axis,foscam,univieworother. For all butotherthe plugin knows the usual stream address — see Camera makes.otheris any other camera and needsrtsp.rtsp— the camera’s own stream address, pointing at the same address ashostand with no user name or password in it. Needed forother. For any other make it replaces the usual address, for a model that differs. See Any other make of camera.stream—sub2(the default, the smaller picture) ormain. Not used whenrtspis set, because the address names its stream.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. A listed device also stays in that section when the classifier would no longer put it there. A plug counts as a light only while its name has a light word in it, so renaming “Twigs Light Plug” to “Twigs Plug” would otherwise take it off the room page.
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 |
stillsIdleMinutes | number, default 5 | How often, in minutes, a camera that no page is showing still gets a picture taken, 0 to 60. Those pictures keep camera health and the hub’s “camera offline” warning working with no page open. 0 takes none, so the warning only covers cameras on screen. Cameras a page is showing always get a picture every two seconds. Added in 3.48.0 |
livePoolSize | number, default 6 | How many cameras the Cameras page may show as live (WebRTC) video at once, 0 to 12. The selected camera gets one available slot and the rest refresh as stills. The page also holds it to what the connection’s measured speed carries. Each live tile costs about 1 Mbit/s and some decoding work on the device, so lower it for an older tablet. Before 3.46.0 a saved value was ignored and six was always used |
guestVariables | list of variable names or ids, default none | The Indigo variables a guest-paired device may read (3.46.0). Anything not listed is withheld from guests. A value that is not a list shares nothing |
The alert rules live in the same file (3.47.0) but belong to the Alerts page, which saves them itself: alertRules (the rules), alertsActive (the “alerts active” tick), alertEmail (the default address) and alertRulesRev (a counter that stops an out-of-date page saving over a newer list). The Settings page neither shows them nor changes them, and its raw-JSON box cannot set them. The recent alerts are kept in alert_firings.json beside it.
Credentials in IndigoSecrets.py
You do not need this file. Every credential has a field under Configure, and most people should use those. IndigoSecrets.py is a single file of passwords and keys that I share between all my plugins, so each one is typed in once. If you would like to use it:
- Download
IndigoSecrets_example.pyfrom the top level of the GitHub repository. - Copy it into
/Library/Application Support/Perceptive Automation/on the Indigo Mac. - Rename the copy
IndigoSecrets.py. - Open it in a text editor and fill in the keys below that you need, leaving the rest empty.
- Restart the plugin, or use Plugins → Dashboards → Regenerate Config + Resync Pages.
A value in the file wins over the matching field under Configure. Keep the file private — it holds your passwords in plain text, as the Configure fields do in Indigo’s own preferences file.
Cameras, the hub’s camera strip, room extras and hidden scenes are kept in the file the Settings page writes. The four DASHBOARDS_* keys marked “imported once” were read only on the first start of version 3.27.0 or later with no Settings page file, when the plugin copied them across and said so in the log. After that the Settings page owns them and the keys are not read again.
| 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 | The camera login every camera shares, whatever its make |
CAMERA_LOGINS | A login for each camera that has its own, as {"192.168.1.50": {"user": "admin", "password": "..."}} |
DASHBOARDS_CAMERAS | The camera list (imported once, see above) |
DASHBOARDS_MAIN_CAMERAS | Host addresses for the hub’s strip (imported once) |
DASHBOARDS_ROOM_EXTRAS | The per-room extras dictionary (imported once) |
DASHBOARDS_HIDDEN_SCENES | Action groups to keep off the Scenes page (imported once) |
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 |
PUSHOVER_USER_TOKEN | Your Pushover user key, for alert rules (3.47.0). The Configure field is the fallback |
DASHBOARDS_ALERT_EMAIL | Where alert email goes when a rule names no address and the Alerts page has no default (3.47.0). Read at every start, unlike the other DASHBOARDS_* keys |
Never put a credential into anything under /public/ — that namespace is served without authentication, and over the reflector it is reachable from the internet.