Integrating Sonos Snapshot and Restore with Chromecast Audio for Seamless TTS Announcements

Hey everyone! I’ve been diving into some pretty cool home automation projects lately, and I wanted to share a solution I came up with that might interest others. I’ve been using the Monoprice 10761 six-zone WHA amp/controller with HomeAssistant, and it’s been a game-changer for my music setup. It’s natively integrated with HomeAssistant, which makes things so much smoother. I love how versatile it is, and I use it all the time for my music needs.

For sources, I’ve got an old Airport Express for Airplay and a Chromecast Audio for casting. Everything works great for music, but I wanted to integrate TTS announcements using CCOSTAN’s speech engine. The Chromecast Audio is fantastic for TTS, but there’s a catch: when an announcement plays, the music stops, and it doesn’t automatically resume afterward. I noticed that the Sonos media player component has a snapshot and restore feature, which is super handy, but the Chromecast doesn’t have that functionality. Plus, the Chromecast is just a source, not a full-fledged media player.

After some research, I decided to dedicate another Chromecast Audio solely for announcements. I considered using a mixer to blend announcements over the current source, but that would require a mixer and a Chromecast Audio for each source, which seemed a bit too involved. Instead, I went with a script-based solution. I set up scripts to capture the current zone inputs and store them in input_numbers before triggering an announcement. Once the announcement finishes, another script restores the zone inputs or turns them off again. It’s a bit of a workaround, but it works perfectly for my setup.

Most of my music is streaming radio, so missing a few seconds for an announcement isn’t a big deal for me. This setup has been running smoothly, and I’m really happy with how it integrates TTS without disrupting my music playback. If you’re looking to add TTS announcements to your setup, I’d recommend exploring this approach—it’s flexible and doesn’t require a lot of additional hardware.

I’d love to hear if anyone else has tackled a similar problem or has tips for improving this solution. The community here is amazing, and I always learn something new from your experiences! Happy automating! :rocket: