github leikoilja/ha-google-home v1.17.0

28 minutes ago

πŸ“± Bluetooth presence and smarter alarm automations

Use your Google speakers to detect whether your phone is home and react to alarm and timer events in automations. You can also choose which Google homes to include, inspect firmware and Wi-Fi details, and troubleshoot problems with new diagnostics and quieter logs.

⚠️ Before you update

  • Removed devices are cleaned up automatically, usually 20–40 minutes after Google stops listing them. After a factory reset, check the new device's entity IDs and any automations that use them.
  • Entity names now follow Home Assistant's language. Existing entity IDs stay the same; new ones may use translated names.
  • Turning off polling now stops all automatic checks, including Bluetooth scans. Refresh devices still updates device data, but does not run Bluetooth scans.
  • An update interval of 0 no longer stops regular checks. If your saved interval is below 1 second, the integration uses 15 seconds while polling is enabled. A repair lets you save the default or turn polling off instead.

✨ Highlights

πŸ“± Bluetooth tracking with your speakers

Turn off the lights when everyone leaves, or use your phone's presence in other automations. Enable Bluetooth tracking in the integration's options, then select Track a Bluetooth device.

To track a phone, you'll need its Identity Resolving Key (IRK), which lets the integration recognize it as its Bluetooth address changes. See Add a device to track for instructions. Devices with a fixed Bluetooth address can use that address instead.

Under good scan conditions and with no additional departure delay, a phone can show home within about a minute of arriving and not_home about 60–90 seconds after leaving. Each tracker also shows which speakers hear it and how strongly. Tracking reports presence at home, without identifying rooms, and a speaker can hear a phone just outside. If scans can't establish presence, the tracker can show unknown or unavailable.

To reduce brief false departures, set an Additional departure delay of up to 120 seconds for an individual tracker. You can change it later through Reconfigure, without adding the device again. It delays real departures too, while arrival detection stays unchanged.

Tracking is off by default. Whether scanning affects Bluetooth audio playback hasn't been tested. See Bluetooth tracking for setup and limitations.

Thanks to @Lash-L (#891) and @marcusds (#964) for their earlier work on Bluetooth tracking! πŸ™

πŸ“Ÿ More about each device

When a speaker keeps dropping off, you now have more clues:

  • Firmware version on the device page, plus an update sensor showing whether the device reports an update waiting.
  • Wi-Fi network and signal strength sensors to help investigate connection problems.
  • Uptime, showing the estimated time of the device's last boot, to help investigate unexpected restarts.

Wi-Fi and uptime sensors are disabled by default; enable the ones you need on the device page. These values normally refresh about every 20 minutes, and some devices don't report them all. The update sensor relies on the device's own report; an available update hasn't yet been observed in testing. See Device entities for details.

🏠 Choose which Google homes to add

If your account belongs to several Google homes, you can now choose which ones to include during setup or later in Configure. Existing installs keep every home until you change the selection. A new home attribute on each device sensor also helps distinguish speakers with the same name.

Thanks, @jazzyisj, for asking in #363!

πŸ”” React to alarm and timer events

Turn on a light when an alarm stops ringing, or react when it's snoozed. The new Alarm events and Timer events entities let you select these events in the automation editor, including changes to items beyond the speaker's next alarm or timer.

Ringing updates are faster too. For alarms and timers the integration already knows about, the end of ringing now usually shows within about 10 seconds while the speaker keeps answering, even with a long update interval.

Events reflect changes seen during checks: they can miss a short ring, and stopped doesn't prove someone dismissed it. For precise timing at a known due time, keep using the sensor's time trigger. The automation examples show both approaches, plus a script to announce timers from all your speakers.

⏸️ Stop checking individual devices

Disable a speaker that's unplugged or out of use in Home Assistant to stop checking it while your other speakers keep updating. Disabled speakers also stop Bluetooth scanning and no longer prevent trackers from confirming that you're away. Enable the device again when you want to use it.

🩺 Easier troubleshooting, quieter logs

Download diagnostics from the integration's menu to see device status and Bluetooth scan coverage. System information also has a Google Home section showing whether Google's servers and your devices are reachable.

Repeated failures no longer fill the log with the same error: it records the problem when it starts and reports when it clears. Sign-in and device errors describe what actually failed, with recovery guidance that also accounts for polling being off.

πŸ† Platinum on the quality scale

The integration now meets all applicable rules through Platinum on Home Assistant's integration quality scale, covering setup, recovery, documentation and code quality. This is our own assessment: Home Assistant awards tiers only to built-in integrations, so the integration page still says Custom integration.

πŸ› A few fixes worth mentioning

  • Bluetooth trackers can restore a recently confirmed state after a restart while fresh scans resume. A speaker that stops returning scan results no longer blocks away detection indefinitely: after five minutes, it drops out of the required scanners. At least one active scanner must still confirm absence.
  • Speakers keep updating when Google's device list is temporarily unavailable, and one speaker failing its first update no longer prevents the others from setting up.
  • Unexpected alarm and timer replies no longer make a speaker's entities unavailable. Unknown statuses show as unknown; unreadable replies keep the previous values.
  • Refresh devices can bring unavailable sensors back, including when polling is off. Devices that reject every token from Google also cause far fewer repeat requests.

There are translation improvements throughout, and the docs have shorter guides, more automation examples and clearer troubleshooting steps.

Requires Home Assistant 2026.11.0 or newer.

Thanks to everyone who reported problems, suggested improvements or shared feedback. ❀️

πŸ“‹ All changes

117 merged pull requests since v1.16.0. Full comparison.

πŸš€ Features (26)
  • Add an optional departure delay to individual Bluetooth trackers @KapJI (#1265)
  • Add events for observed alarm and timer transitions @KapJI (#1262)
  • Show Bluetooth scan coverage and tracker states in diagnostics @KapJI (#1260)
  • Add an uptime sensor for the estimated last boot time @KapJI (#1257)
  • Show a repair for a saved update interval below 1 second @KapJI (#1239)
  • Show an icon for each Google Home action @KapJI (#1213)
  • Log a failing speaker or Google list fetch once, and log when it works again @KapJI (#1207)
  • Stop setup when Google reports no home for the account @KapJI (#1205)
  • Show a repair when none of the account's homes is selected or Google reports no home @KapJI (#1201)
  • Stop updating a device while it's disabled in Home Assistant @KapJI (#1199)
  • Show in System information whether Google answers and how many devices don't @KapJI (#1195)
  • Log a failed fetch of Google's device list once, and log when it works again @KapJI (#1193)
  • Get tokens and devices from Google with glocaltokens' async API @KapJI (#1189)
  • Get speakers' addresses from the integration's own mDNS browser only @KapJI (#1186)
  • Show which speakers hear a tracked Bluetooth device, and how strongly @KapJI (#1187)
  • Track phones and other Bluetooth devices with the speakers @KapJI (#1106)
  • Look for devices without an address at known hosts every 5 minutes @KapJI (#1183)
  • Warn when polling is turned off, and keep refreshes working without it @KapJI (#1182)
  • Show each device's Wi-Fi network and signal strength @KapJI (#1181)
  • Check a speaker right after its alarm or timer is due, and while it rings @KapJI (#1180)
  • Show each device's Google home in a home attribute @KapJI (#1179)
  • Show each device's firmware version and whether it has an update @KapJI (#1178)
  • Choose which Google homes to add @KapJI (#1174)
  • Add diagnostics to attach to bug reports @KapJI (#1171)
  • Translate entity names into Home Assistant's language @KapJI (#1172)
  • Remove devices that Google no longer lists @KapJI (#1170)
πŸ› Bug Fixes (21)
  • Correct misleading sign-in and device messages @KapJI (#1266)
  • Preserve Bluetooth tracker state across restarts and expire inactive scanners @KapJI (#1263)
  • Correct retry guidance when polling is off and entities are disabled @KapJI (#1261)
  • Correct retry guidance when polling is off and all devices are disabled @KapJI (#1259)
  • Make a device's alarms, timers and settings unavailable after 5 updates without its address @KapJI (#1254)
  • Say to reload the integration when it starts without devices while polling is off @KapJI (#1253)
  • Let Refresh devices bring back a speaker whose sensors are unavailable @KapJI (#1238)
  • Keep a speaker's entities working when its alarms reply can't be read @KapJI (#1232)
  • Bring back a deleted speaker when Google lists it again @KapJI (#1235)
  • Require an update interval of at least 1 second @KapJI (#1231)
  • Log why Google rejects the master token at a scheduled fetch during setup @KapJI (#1225)
  • Ask Google less often for a device that rejects every token Google gives it @KapJI (#1223)
  • Give up on a Bluetooth request after 4 seconds so scans are read in time @KapJI (#1214)
  • Say to run Refresh devices when a delete fails on a rejected token while polling is off @KapJI (#1215)
  • Translate the error shown when Google rejects the sign-in at setup @KapJI (#1204)
  • Say to run Refresh devices when a device rejects its token while polling is off @KapJI (#1198)
  • Finish setup when a device's first update fails unexpectedly @KapJI (#1197)
  • Log the actual reason the integration reloads for Bluetooth tracking @KapJI (#1185)
  • Shorten the update interval label and explain it below the field @KapJI (#1184)
  • Make the actions exist and fail clearly while the entry isn't loaded @KapJI (#1169)
  • Update each speaker separately from Google's device list @KapJI (#1168)
🈡 Translations (5)
  • Use one Thai term for polling throughout the integration @KapJI (#1246)
  • Fix broken sign-in and help links in Korean and Traditional Chinese @KapJI (#1209)
  • Use the Romanian word for timers in the timer actions and errors @KapJI (#1200)
  • Ask which homes' devices to add in Japanese, Korean and Thai setup @KapJI (#1190)
  • Use Home Assistant's own names for its dialogs and buttons in our messages and docs @KapJI (#1188)
πŸ“„ Documentation (17)
  • Warn that an offered update undoes a fix installed from master, and answer common setup questions @KapJI (#1251)
  • Correct reference page details that don't match the code @KapJI (#1250)
  • Document an unsupported way to set, snooze or stop alarms with a spoken command @KapJI (#1249)
  • Describe installing and removing the integration through the Marketplace @KapJI (#1165)
  • List the integration's features in the README and make the docs link obvious @KapJI (#1242)
  • Link the script that reads out running timers from the docs homepage @KapJI (#1241)
  • Add troubleshooting for setups that don't load or keep retrying, and fix the debug-log steps @KapJI (#1236)
  • Show contributors how to set up the dev instance and pass the pull request checks @KapJI (#1234)
  • Add docs examples for a stopped alarm, a new timer and several alarm volumes @KapJI (#1230)
  • Explain why a Bluetooth tracker stays unknown, and correct the docs on its states @KapJI (#1229)
  • Add a docs example that reads out the timers on every speaker @KapJI (#1227)
  • Add a diagram of how the integration works for contributors @KapJI (#1222)
  • Link the installs badge to how Home Assistant counts installs @KapJI (#1217)
  • Show a Platinum quality scale badge in the README and docs @KapJI (#1212)
  • Trim the docs and keep each detail on one page @KapJI (#1211)
  • Explain the entity IDs that a reset or replacement speaker gets @KapJI (#1175)
  • Say what the reboot button's state means @KapJI (#1177)
🧱 Dependency Updates (9)
πŸ”§ Internal improvements (26)
  • Keep mDNS implementation constants beside their consumers @KapJI (#1264)
  • Correct the comment on why signing in again schedules its own reload @KapJI (#1252)
  • Share the address check that four entity classes repeat, and remove unused data @KapJI (#1248)
  • Say the integration still needs setting up after script/develop starts @KapJI (#1244)
  • Validate issue forms and the template chooser config in prek @KapJI (#1240)
  • Label new bug reports and feature requests when they're opened @KapJI (#1237)
  • Clarify label descriptions and remove four rarely used labels @KapJI (#1233)
  • Move questions from Discussions to a Question issue form @KapJI (#1228)
  • Ask for the versions when someone starts a Q&A discussion @KapJI (#1226)
  • Reject translated text that would become part of a link @KapJI (#1221)
  • Check quality_scale.yaml in CI and test against Home Assistant 2026.11.0b4 @KapJI (#1218)
  • Ask issue reporters to pick a template instead of a blank issue @KapJI (#1216)
  • Shorten the bug form's diagnostics and System information field @KapJI (#1210)
  • Ask for the Google Home section of System information on every bug report @KapJI (#1208)
  • Classify the integration as cloud polling again @KapJI (#1206)
  • Record the integration's quality scale, and classify it as local polling @KapJI (#1196)
  • Turn the bug report template into a form that requires the versions @KapJI (#1194)
  • Run hassfest and the HACS check daily @KapJI (#1191)
  • Keep the manifest's other requirements when publishing a release @KapJI (#1192)
  • Show coverage and translation stats in the PR's checks list @KapJI (#1176)
  • Move entity icons to icons.json @KapJI (#1173)
  • Set PARALLEL_UPDATES to 0 on each platform @KapJI (#1167)
  • Ship each release as google_home.zip so installs are counted @KapJI (#1166)
  • Remove the config flow's unused flow matching @KapJI (#1161)
  • Tidy up the integration's internals @KapJI (#1159)
  • Split api.py into smaller modules @KapJI (#1156)
🧰 Maintenance (13)
  • Test Bluetooth presence for multiple tracked devices in one scan @KapJI (#1258)
  • Test that Bluetooth tracking ignores other devices' addresses @KapJI (#1255)
  • Test that signing in again reloads a loaded entry once with the new token @KapJI (#1247)
  • Test which alarm and timer the sensors show with missed alarms and paused timers @KapJI (#1245)
  • Test that a failed Bluetooth scan read doesn't show a phone as away, and three other scan cases @KapJI (#1243)
  • Test that a timeout between two failures doesn't log the failure again @KapJI (#1224)
  • Keep the tests' clock in place when a test also freezes time @KapJI (#1202)
  • Describe the homes field at setup, and test that flows finish after each error @KapJI (#1203)
  • Test discovering speakers through Home Assistant's flow manager @KapJI (#1162)
  • Test that each placeholder in the flow texts gets a value @KapJI (#1160)
  • Report test coverage in CI and require 90% for every file @KapJI (#1157)
  • Test signing in and the options through Home Assistant's flow manager @KapJI (#1158)
  • Test the integration running inside Home Assistant @KapJI (#1152)

Don't miss a new ha-google-home release

NewReleases is sending notifications on new releases.