Articles About Home
Back to articles

Fixing Frozen HK Citation Speakers with Home Assistant

· · 5 min read

The Setup

Last year my partner and I both picked up Samsung phones. Each came with a free Harman Kardon Citation One speaker as part of a promotion. We set them up, connected Google Assistant, and were genuinely impressed. The sound quality for a compact speaker is excellent — warm, balanced, and loud enough to fill a room.

Within a week I'd ordered three more. Kitchen, hallway, back bedroom, master bedroom, living room — music and voice control everywhere. For the price, it felt like a steal.

The Problem

The joy lasted about four days.

We started noticing that speakers would randomly stop responding to voice commands. You'd say "Hey Google, what's the weather?" and instead of a helpful answer, you'd get:

  • "Something went wrong. Try again in a few seconds."
  • "Sorry, try logging in via the Google Home app."
  • "There was a glitch. Try again in a few seconds."

The strange part: Bluetooth streaming still worked fine. Spotify Connect still worked. The speaker wasn't crashed — Google Assistant was just... frozen. The only fix was to physically unplug the speaker, wait a few seconds, and plug it back in.

With five speakers, this became a daily chore. Someone would walk into the kitchen, try to ask for a timer, get the frozen response, sigh, and pull the plug. Not exactly the smart home dream.

Digging Deeper

I run Home Assistant on my home network, so I had a decent starting point for investigation. The Citation One speakers run a variant of Google's Cast platform, which exposes a local HTTP API on port 8008 and an HTTPS service on port 8443.

I started poking at both ports on a known-frozen speaker versus a healthy one. The difference was immediate and consistent.

Healthy speaker (Master bedroom):

POST /setup/get_app_device_id  →  77ms
POST /setup/reboot             →  31ms
GET  https://:8443/eureka_info →  45ms

Frozen speakers:

Kitchen:      get_app_device_id=5000ms (timeout!)  reboot=42ms
Back bedroom: get_app_device_id=2544ms             reboot=53ms
Hallway:      get_app_device_id=38ms               reboot=3106ms

Three symptoms, and here's the interesting bit — different speakers exhibited different ones. The Kitchen speaker was slow on get_app_device_id but fast on reboot. The Hallway speaker was the opposite. A single-endpoint check would have missed half of them.

I also discovered a third indicator: port 8443, the HTTPS service that powers Google Assistant's cloud communication. On a frozen speaker, it hangs completely — the connection times out after a few seconds. On a healthy speaker, it responds instantly. This turned out to be the most reliable signal of all, because some frozen speakers still responded normally on port 8008.

Building the Detection

Armed with three reliable symptoms, I built a Home Assistant custom integration: ha-hk-citation.

It does three things every five minutes:

  1. Discovers speakers via mDNS — scans for _googlecast._tcp.local. services and filters to HK Citation models
  2. Probes each speaker with three checks — two POST requests on port 8008 (measuring response time) and one HTTPS request on port 8443 (checking for timeout)
  3. Exposes a binary sensor per speaker — Connected means healthy, Disconnected means frozen

No configuration needed beyond clicking "Add Integration". Speakers appear automatically as they're discovered on the network. If a speaker gets a new IP address from DHCP, the integration handles it transparently — your automations don't break.

The Automation

Detection is only half the solution. The other half is doing something about it.

I ordered five Sonoff MINIR4M smart switches — one for each speaker's mains plug. They're tiny enough to fit behind the wall socket, run on Wi-Fi, and integrate natively with Home Assistant.

Now the clever part. You don't want to reboot a speaker the instant it freezes. These speakers play a boot chime when they restart, and if someone's asleep or in a meeting, that's not ideal. So the automation looks like this:

  • Trigger: binary_sensor.kitchen_speaker_health turns to Disconnected
  • Conditions: It's daytime (8am–10pm) AND nobody is home (presence detection via phone GPS)
  • Action: Turn off the smart plug, wait 10 seconds, turn it back on

If the speaker freezes at night, it waits until morning. If someone's home, it waits until they leave. The speaker reboots at a convenient time, and by the time anyone tries to talk to it, it's already back and responsive.

The Result

After running this setup for a couple of weeks, the experience is night and day. Every speaker responds when spoken to. The freezes still happen — that's a firmware issue I can't fix — but the recovery is automatic and invisible.

The integration is open source and installable via HACS: github.com/azgooon/ha-hk-citation. If you have Citation speakers and a Home Assistant instance, give it a try. The speakers deserve it — they really do sound great when they're actually working.

More articles