Script for Sonos Speakers to do Text-to-Speech and Handle Typical Oddities

Yes, it work on Symfonisk as well. :slight_smile:

Thanks for confirming @bjorn.sivertsen!

There are also the Ikea speaker lamps … add a Hue / colour changing bulb and you an audio/visual notification experience :slight_smile: .

OH I like that, putting a chime followed by the notification. Hmm, maybe I’ll look to create an extended version to do that (just finishing another script at the moment first).

But man, I really wish it was easier to have dependencies between blueprints. I wrote a proposal for it but didn’t get much traction (see here). If I had more spare time I’d pick up Python, dive into the HA codebase and see about adding it myself.

2 Likes

totally share the feeling, so many exciting things to do and only 24 hours a day :slight_smile: Good luck with your other script.

Yup, definitely know what you mean!

Well, finally got the other script up (it’s here if curious) and need to see about what’s next (including your chime suggestion).

Hey @matthewcbyington , I missed this message, and I saw you posted elsewhere. You still need some help?

Hi, great script, thank you for all your effort. I’m amended it slightly to play a single media file locally, which works great. As Sonos is a mult-speaker system, could I please ask how you play this to a group of speakers? stacking multiple actions doesn’t work. Can you group speakers in HA as a entity?

Sorry I’ve just seen your other blue print, Play Media.
That’s basically what I wanted to do, but to snapshot the current state of Sonos and restore it after.

Hey @JamesLodge, so looks like you wanted something to disrupt playback temporarily by playing something else? You could definitely combine this script and the Play Media script. This one has a few more safeguards in place.

Out of curiousity, what is your use case? I liked @saint’s notion of a chime. I’m still considering making an update here to support that but given how hectic things are this time of year for me, may not make it over the next 3 or 4 weeks.

OH and looks like you’re new to HA (at least the community site), welcome!

I would love the ability to add a chime, my girlfriend jumps everytime it starts speaking out of the blue. :smiley:

1 Like

Thanks @Talvish, much appreciated. Yes I’ve been lurking for a while and had HA running for about 8 months now.

Yes my use case is actually for the kids (or possibly this big kid) and similar to @saint. Not sure if any of you are from the UK, but here on the BBC we have a children’s program called Justin’s House and as part of that, when someone rings the door they sing “who’s at the door, who’s at the door, someone better answer it”, that doesn’t do it justice, but the kids love it. If you’re interested here @ 14:22 So I have an mp3 of that stored locally on HA server. It plays when someone presses our Hikvision door station. It works brilliantly thanks to your amazing TTS script which I modified, but would be great to have it in all rooms. As current setup only for our lounge ARC. A you say, time is limited this time if year. I’ll have another look if i get chance between HA and put togerther some pixel LEDs/WLED for the tree, oh an actual real work. Too much cool stuff and not enough time.

Thanks again for your great work.

Thanks very much for creating this. I’m using this for many announcements in the house and love it.

Recently I ran into a small issue. When the speaker is muted in the SONOS app, the automations would not play the announcement audibly. You can see the announcement being played in the SONOS app, also the volume being adjusted, but the speaker stays muted.
Any way to fix this?

I’d like some guidance for a use case that I am working on. My Sonos system consists of speakers in every room and also the garage and back porch. I generally keep all the indoor speakers grouped together and this blueprint has served us well in making announcements when the washer and dryer, etc are done.
Now my use case. One of my Sonos products is a Sonos Port. Basically, the port is connected to an AVR that has some speakers and I use this in my office when listening to music, watching tv or playing games. I have an automation for that receiver that basically switches it to the correct output ports for the Sonos Port whenever the Port goes from Paused to Playing. The issue I’d like to work around is when I am watching tv or playing a game and another automation runs to make the announcement that the washer is done then my receiver switches to the Port output and I lose the video to the tv.
Is there a way that I can point my automation running this script to a Sonos group I have created that doesn’t contain the Sonos Port? That way the announcement is made through the rest of the house and doesn’t interrupt the tv in my office.

In the image I have a group named Announce I’d like to use.
Thanks in advance for any ideas on how I can maybe accomplish this.

Great script, thanks for all the hard work. One question: like one other person on this thread, speakers are not resuming when playing Spotify (started using Spotify phone app or when started using the Sonos app). Two paired speaker sets, all Play:1. If you hit resume on a speaker it replays the TTS. Tested in developer tools, same issue.

And did some more testing. It will eventually resume (over 7 minutes later). Note this was with:

service: script.text_to_speech_on_sonos
data:
  entity_id: media_player.master_bedroom
  message: test
  volume_level: 0.2
  min_wait: 4

Had to bump min_wait to 12, now it works.

Hi @Talvish
Thanks for a great blueprint script.
Have you every used it to notify multiple Sonos devices at the same time, without grouping them?
I setup an automation with the actions running in parallel, but still only the first listed Sonos device plays the TTS.

Hey @goonerx1 (and congrats on your first post).

If you have a single call to the service, and don’t want to group, you can put more than one media_player in the entity_id. For example:

Does this suffice for you? Given how you worded the question, I suspect not, but figured I’d show the simple solution first.

Ya, the min_wait solves oddities … the Sonos HA integration frequently reports state changes/information incorrectly. When it seems like the script isn’t resuming it is because it is actually incorrectly using the remaining length of time of the previously playing song as the amount of time to wait before resuming (because of the HA integration state issue). Using min_wait helps address this.

I am going to look at my script to better address this so the issue will occur with less frequency (and perhaps won’t occur at all); I could argue my script is trying to be too smart and getting caught with the state change integration oddity.