HA Watch for Tesla: a Wear OS app (tile + complication) to control your Tesla through Home Assistant

Tesla has a watch app only for the Apple Watch, so as a Galaxy Watch owner I built my own on top of Home Assistant. I have now cleaned it up so anyone can build it with their own configuration.

Repo: GitHub - MicheleMercuri/WearOS-HA-Watch-for-Tesla: Wear OS app (tile + complication) to control your Tesla through Home Assistant: lock, climate, charging, trunk, optional gates. Not affiliated with Tesla. · GitHub

What it does

  • Main screen: status (online / asleep / charging) and lock state, battery and range, lock/unlock, climate, frunk and trunk, charge port and cable release, horn, flash lights, Sentry Mode, wake up
  • Climate: on/off, target temperature (limits read from your climate entity), window vent, presets
  • Charging: start/stop, live kW, charge limit and amps (the +/- buttons send one command after you stop tapping, not one per tap)
  • Tile: battery and range at a glance, fixed Lock and Unlock buttons, plus up to two one-tap buttons for a button, script, switch, cover or lock entity, for example a driveway gate
  • Complication: battery % on any watch face
  • Optional home screen: two gate buttons and two lights. If you don’t configure them, they don’t appear
  • Vibration and a message when the car confirms a lock/unlock, or when a command fails or gets no answer; a short “Sending to the car…” notification keeps it connected while a command runs
  • English and Italian

It is a remote control through Home Assistant, not a phone key: it needs a data connection.

How it works

The watch only talks to Home Assistant through the REST API. A refresh is a single POST /api/template call for all entities (about 1 KB back), or small per-entity reads with a non-admin token. Refreshes only read HA, so they cost no Tesla API calls; commands and Wake up use your integration’s Tesla API quota like any other HA action.

It is built for the Tesla Custom Integration (HACS). Each entity can be overridden, so other integrations work partly; I would love help from Teslemetry or Tesla Fleet users to add proper mappings.

Security, since it can unlock a car

  • The token is not compiled into the APK: a Gradle task sends it over adb (on stdin, so it is in no command line on the PC and in no system log), and the watch stores it encrypted with an Android Keystore key. The provider that receives it accepts only the adb shell
  • HTTPS only by default
  • Optional local shortcut at home that still verifies the certificate of your public host name, so on a hotel or office Wi-Fi the token is never sent to whatever device has the same IP
  • Tile buttons are handled by the tile service itself: no exported component that sends commands, so other apps on the watch can’t trigger them, and a tile refresh can never repeat one (checked on the watch: one tap, one command)
  • Lock and Unlock have fixed positions on the tile; commands are never retried automatically; the same gate can’t be pulsed twice within 10 s
  • Works with a non-admin token (ha.read_mode=states). After a refused token it stops polling, so it doesn’t pile up failed logins in HA. The README explains what a non-admin token does and does not protect

Install

It is not on the Play Store: you build it with your own local.properties (HA URL, entity prefix, optional buttons), sideload it with adb over Wi-Fi and run ./gradlew provisionToken. Step-by-step instructions are in the README. Please don’t share your APK: it contains your HA address and entity names.

Developed on a Galaxy Watch8 (Wear OS 6) with HA 2026.9 and the Tesla Custom Integration. Tested there: the tile Lock button (one tap, one command), lock confirmation, token provisioning, both read modes and the local shortcut. Feedback, issues and PRs are welcome.

Not affiliated with Tesla, Inc.