TrueLocal – add Matter and Zigbee devices from your phone, without the Companion app or Google Play Services

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 /ble endpoint 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.