[EDGE] Generic Google TV / Android TV Driver — control any Google TV via SmartThings

Hi all,

I’ve been building a SmartThings Edge driver that controls any Google TV / Android TV device — not tied to a single brand. It talks directly to the same Android TV Remote Service protocol (v2, TLS-based pairing on port 6467, remote control on port 6466) that the official Google Home / Google TV app itself uses, so it should work on any genuine Android TV OS / Google TV device: Sony, TCL, Hisense, the Google TV Streamer, NVIDIA Shield, etc.

Built and tested primarily on a TCL Google TV so far — looking for testers on other brands/models to help shake out any device-specific quirks before I call it stable.

Features

  • Power: on via Wake-on-LAN (if the TV’s MAC address is set and WoL is enabled on the TV), off via the standard power key
  • Volume up/down/mute, plus an approximate setVolume
  • Media playback: play/pause/stop/rewind/fast-forward
  • Channel up/down
  • Full Home/Back/Menu/Settings/D-pad/numeric-keypad navigation via the standard keypadInput capability — this gets the app’s native circular D-pad UI, not a generic button list
  • App launching: launch any app via the standard mediaPresets capability — includes a curated list of common apps (YouTube, Netflix, Disney+, Spotify, etc.) plus fully custom entries you add yourself (Settings → Custom apps), by package name — found directly on the TV under Settings → Apps → (the app), no computer needed
  • A built-in diagnostic: tap the refresh icon on the device to get a connectivity/TLS report logged for troubleshooting

Setup

  1. Join my channel: SmartThings. Add a little smartness to your things.
  2. In the SmartThings app: Add device → Scan for nearby devices — creates an empty “Google TV” placeholder device
  3. Open the device’s Settings and enter the TV’s IP address (a static/reserved IP is strongly recommended)
  4. A 6-character code will appear on the TV screen — enter it in the device’s Settings under “Pairing code”
  5. Done

Known issue #1

The Media Track Control (next/previous track) buttons on the device’s control page don’t respond to taps — confirmed this is an app-side rendering bug, not a driver issue: the exact same commands work correctly when triggered via a Routine instead of the direct UI button. Reported to SmartThings support; using a Routine is a solid workaround in the meantime.

Known issue #2 — App launching may fail after a Google Play Store update

Some testers have hit app launches failing (screen briefly flashes black, then bounces back to Home) after a Google Play Store update on the TV. Confirmed via ADB logcat: the market://launch request gets intercepted by Play Store’s “Instant Launcher” component (InstantLauncherActivity, meant for “try without installing” previews, not normal installed apps) — the launch task opens for a split second, then closes without ever handing off to the real app.

Workaround confirmed working: on the TV, go to Settings → Apps → Google Play Store → Uninstall updates. This reverts Play Store to its older (47.2.17-31 on the tested device — yours may differ), factory-bundled version, and launches work correctly again immediately. Note Play Store auto-updates itself in the background, so this may need repeating if the issue resurfaces later. This has been reported to TCL with full log evidence; will update here if I hear back.**

If something doesn’t work for you**

There’s also a standalone Python script (no SmartThings/hub needed) that checks whether a given device actually speaks this protocol before you even try pairing — useful for ruling out non-certified “Android TV-styled” boxes that don’t run genuine Android TV OS. Happy to share it if useful.

If you hit an issue, the driver logs a detailed step-by-step trace during pairing (smartthings edge:drivers:logcat) — a copy of that log is the fastest way for me to help debug.

Would love feedback from anyone running this on a non-TCL Google TV, especially Sony (I also maintain a Sony-specific driver separately, but curious how this generic one compares) or Hisense.

Thanks!

This is great. Although I can’t seem to get wake on lan working on my tcl

I also didn’t manage to get WOL over Wifi in my TCL. I’ll try later the WOL over wired LAN and let you know.
Meantime you can change to the Energy mode to high consumption mode which live the WiFi connection ON. This works for me…

I tested Chromecast Google TV

At least the power on/off and the keyboard work.

2026-08-02T07:01:16.670037112Z INFO Generic Google TV  <Device:  (Google TV)> received command: {"args":{},"capability":"refresh","command":"refresh","component":"main","named_args":{},"positional_args":{}}
2026-08-02T07:01:16.671283029Z DEBUG Generic Google TV  Found CapabilityCommandDispatcher handler in googletv
2026-08-02T07:01:16.672025071Z INFO Generic Google TV  [googletv-report] ===== Google TV diagnostic report =====
2026-08-02T07:01:16.672663946Z INFO Generic Google TV  [googletv-report] IP address: 192.168.1.101
2026-08-02T07:01:16.695278362Z INFO Generic Google TV  [googletv-report] Pairing port (6467): REACHABLE -- reachable
2026-08-02T07:01:16.748071446Z INFO Generic Google TV  [googletv-report] Remote port (6466): REACHABLE -- reachable
2026-08-02T07:01:18.518946821Z INFO Generic Google TV  [googletv-report] TLS handshake on 6467: OK -- TLS handshake succeeded, TV presented a certificate
2026-08-02T07:01:18.534414404Z INFO Generic Google TV  [googletv-report] Current remote connection: CONNECTED
2026-08-02T07:01:18.535227779Z INFO Generic Google TV  [googletv-report] Last known TV power state: true
2026-08-02T07:01:18.535879738Z INFO Generic Google TV  [googletv-report] ----- Verdict -----
2026-08-02T07:01:18.536500946Z INFO Generic Google TV  [googletv-report] The hub CAN reach and TLS-handshake with this TV. If pairing/commands still fail, the problem is in the driver logic -- send this whole report plus a fresh pairing attempt log.
2026-08-02T07:01:18.537161738Z INFO Generic Google TV  [googletv-report] ===== end of report =====
2026-08-02T07:01:18.537771196Z DEBUG Generic Google TV  Google TV device thread event handled

Any way we can automate a routine for it to jump straight to the Home page or to start the screen saver? Also, whenever I go to the device, I get this message

Wajo357Joey W.
You can ignore this message, I see it as well but everything continue to work fine.
Regarding home screen, you have a home button near the D-PAD should work fine and display you Home screen,
While in Home screen , press the back button twice it should start your screen saver.

Look good !! thanks you for updating that works well with Google Chromecast

@dotan_shai@dotan_shai, I understand. However, I am trying to automate these behaviors, and I don’t see a way to do it from a routine.

Does the driver’s Lua code support the use of multiple devices? For example, Chromecast Google TV and Sony Android TV.

Only using RulesAPI

Example Rule:

Rule using AWA

  {
    "if": {
      "equals": {
        "left": {
          "device": {
            "devices": [
              "-- Switch ID --"
            ],
            "component": "main",
            "capability": "switch",
            "attribute": "switch",
            "trigger": "Always"
          }
        },
        "right": {
          "string": "on"
        }
      },
      "then": [
        {
          "command": {
            "devices": [
              "-- Android TV ID --"
            ],
            "commands": [
              {
                "component": "main",
                "capability": "keypadInput",
                "command": "sendKey",
                "arguments": [
                  {
                    "string": "HOME"
                  }
                ]
              }
            ]
          }
        }
      ]
    }
  }

keypadInput all Key Codes

developer.smartthings.com/capabilities/keypadInput

keypadInput capability presentation has only Detail View definition ( no automation actions )

Although I’m not a developer / programmer, I would love to learn more with regards to using the rulesAPI. Since I’m a visual learner, are you aware of any good youtube tutorials to help walk me through this?

SmartThings “official” RulesAPI document

Rules | Developer Documentation | SmartThings

I don’t remember the youtube videos.

If you get stuck with rules API… I modified the driver so you’ll be able to set home screen or activate your screen saver within rules. Give your hub few hours for the driver to update or re install from my channel… Tell me if it works you.

P. B. For screen saver I mimic pressing the home screen button and two time pressing the back button

Yes — the driver already supports multiple independent devices. Each TV gets its own connection, pairing state, and reconnect handling scoped to that specific device object, so a Chromecast with Google TV and a Sony Android TV (or any mix of Google TV devices) can run side by side without conflict.

I got the updated driver. Thanks!

FYI, it seems like the screensaver needs a little more work. Depending on where you are on the home screen, sometimes the screensaver is 1 button to the left and others 2 buttons to the left. I guess it depends on whether the HOME icon is selected or not.

It may be better to mimic 2 home commands and then one back, or two right and an enter.

How can I add another device?


Is it possible to clean up the favourites list? The list is full of apps I don’t recognize.

I put Israeli apps 1st , then the others. You can add you own Apps in setting , there are some instructions there…Custom apps will be in top of the list. Here is an example how to add Televizio App. Go to setting and add the following text :

Televizio|market://launch?id=com.ottplay.ottplay

You are right !! I changed this to the way you suggested. Now it is single Home , follow by Single Back. I hope this fix work for you.

This is actually pretty great. If only Samsung TVs had this level of control.

Thank you! It definitely works better when already on the home screen. Yet, when not on the home screen (using an app), or starting when the TV is off, it doesn’t work. Is there some other enhancements that can be done? Maybe HOME twice and then back, with more of a wait for power on?

Thanks again!