Hubitat's built-in TTS support leverages Amazon's Poly Text to Speech cloud service for any 'new' TTS phrases. Once a phrase has been converted into an audio file, that file is cached on the Hubitat hub will be reused any time that phrase is requested again. This audio file is sent over the LAN to the Sonos speaker for playback.
So, there is a little Amazon Cloud involved, but that can be kept to a minimum as long as your TTS phrases don't include things that always change, like the date and time.
If you want 100% local only TTS... with the latest Hubitat firmware you can now store files on the hub. I actually store audio files (mp3) on the hub that play a little tune each time the mailbox is opened. One could easily record their own voice, store it as an mp3 file on the hub, and then have a Sonos speaker play that audio file based on whatever trigger you'd like. While not exactly 'Text to Speech', it would be 100% local with no cloud involvement.
Here is an example using the Hubitat Notifications App for my mailbox.
Edit: Use the Media Player Capability in order to specify a URL to be played.
