Adding a Matter light used to mean one of two things for me: carry the lamp to the
Raspberry Pi so it was within Bluetooth range, or let the Companion app do it — which
hands your Thread network credentials to Google Play Services. Neither felt right, so I
built a small Android app that does it differently.
TrueLocal turns your phone into nothing more than a Bluetooth radio for your own
Matter Server. Your HA host runs the commissioning and keeps the Thread dataset; the
phone just relays the Bluetooth traffic over your LAN. Nothing goes to Google, Apple or
any cloud, you can pull the WAN cable and it still works.
What you can do with it
- Add a Matter device without Google Play Services. The dataset never leaves your HA host.
- Add a device that is out of range of your server. Walk the phone to the device instead
of the device to the server. - See which Matter devices around you are in pairing mode, with discriminator, vendor/
product ID and signal strength, so you know whether a device is really advertising and
whether the signal is good enough before you try. - See which Matter nodes your server already has, including offline ones, handy when
cleaning up after a Thread key rotation. - Open the Zigbee network for joining from where the device is. Press permit join on your
phone while standing at the thermostat instead of walking back to a browser. Works with
Zigbee2MQTT and ZHA. - Find out why pairing fails before you start. Each tab has an environment check that
verifies the whole chain: phone Bluetooth, add-ons installed and running, ingress enabled,
integrations loaded, preferred Thread network, BLE proxy active, Thread dataset present,
and whether the/bleendpoint actually accepts a proxy client.
That last one is what I would have wanted most while debugging my own setup. It turns
“pairing doesn’t work” into a list of green and red lines.
How it connects
Everything goes through Home Assistant’s own ingress proxy with a long-lived access token,
so no extra ports need to be exposed and the connection is authenticated. Nothing about
your setup is stored anywhere except on your own phone.
Requirements
- Android 12 or newer
- Home Assistant with the Matter Server add-on (the BLE proxy is enabled by default in
recent versions) for Matter, and/or Zigbee2MQTT or ZHA for Zigbee - A long-lived access token from an administrator account
One tip that surprised me
While a device is in pairing mode, Google Play Services picks up the same Bluetooth
advertisement and pops up its own “device found” notification with a QR scanner. Finishing
that flow shares your Thread credentials with Google anyway. Dismissing it is enough, but you
can turn it off for good under Settings → Google → Devices & sharing → Devices → “Nearby
device notifications”.
Download and source
GitHub - dymen1/ha-truelocal: Pair Matter and Zigbee devices with Home Assistant without the Companion app or Google Play Services, your phone is just the radio. · GitHub (GPL-3.0), APK attached to the v1.0.0 release.
The interface is available in English and Dutch.
Honest caveats
This is a first release, tested on one setup: HA OS 2026.8.3 on a Raspberry Pi 5 with Matter
Server add-on 9.2.0 and Zigbee2MQTT, verified with a Matter light over Thread and a ROBB
ROB_200-040-0 Zigbee thermostat. Error handling is a log line rather than a retry, and it
does one commissioning at a time. It was designed and built by me working with an LLM as a
pair programmer, following the published BLE proxy and websocket API specifications.