If you've commissioned Thread devices through Indigo (or through Domio), Apple's Thread tooling can't see them. Thread Doctor only lists HomeKit accessories. The Matter plugin now gives you that view itself, built from the Thread diagnostics every node already reports.
What you get
- A Thread mesh map page, served by the Indigo Web Server at
Code: Select all
http://<your-indigo-host>:8176/message/com.simons-plugins.indigo-matter/thread
It draws the mesh as a tree: the leader at the top, every router below it, and every end device under whichever router it's parented to. Edges are coloured by signal strength and labelled with link quality and frame-error rate. Below the map is a list of health flags and a table of every node. It's a self-contained page with no JavaScript or external assets, so it reads fine on a phone over the Reflector.
- Plugin menu → "Report Thread mesh…" prints the same picture to the Event Log: each node's role, its neighbour and route links, which node is the leader, any routers the plugin doesn't own, and the health flags. The report ends with the URL of the map page.
- Triggers - Four states on every Thread device: threadRole (leader / router / REED / end device / sleepy end device), threadNeighbourCount, threadLinkRssi and threadHealth (ok / warn / bad). These are the ones you'd bind a trigger to, e.g. "notify me when a sensor's threadHealth goes bad".
Routers on your mesh that aren't Indigo devices (typically your HomePod or Apple TV border router) appear as "Router N", and the leader is captioned "probably your border router" when it's one of those. Everything here is read-only; nothing in this feature writes to a device.
Cached vs live, and how old the data is
By default the page shows what matter-server has cached, which is instant. Sleepy battery devices only report when they wake, so their cached picture can be hours old. To make that honest, every node shows when it was last interviewed (interviewed 6d ago) and, if the plugin has seen a live update from it since it last started, that too (last update 2h ago). Anything older than an hour is highlighted amber, and the header tells you the oldest reading on the fabric and how many nodes have none at all. A couple of fresh readings can't make the whole mesh look freshly surveyed.
Click "Refresh (live)" on the page (or tick the live-read box in the menu report) to read every sleepy device directly. Routers are mains-powered and continuously polled, so they're always current. A live read of a sleepy device has to wait for it to wake, so the pass can take up to a minute; a node napping longer than that shows as unreadable rather than holding everything else up. From the menu, the report follows in the Event Log within about a minute.
What it's useful for
- "Why does this sensor keep dropping off?" Look at its parent link. A weak RSSI, a high frame-error rate, or a long list of parent changes points at radio placement, not the plugin.
- "Is my border router doing the work?" The map shows which router each device actually hangs off. Devices you assumed were talking to the HomePod may be routing through a mains-powered plug three rooms away.
- "Did the mesh split?" A stale cache can show a partition that no longer exists. If the picture looks odd, hit "Refresh (live)" before worrying.
- Automation: bind a trigger to threadHealth to get told when a device's link goes bad, rather than finding out when the automation doesn't fire.
I'd be interested to hear what your mesh looks like, especially if you have more than one border router, or the map places something somewhere that doesn't match reality. Issues and screenshots welcome on GitHub: https://github.com/simons-plugins/indigo-matter/issues
And if more people adopt Thread and see this as useful, maybe we could even have this interactive in dom.io or a Mac app.