[Release] - Speaker Central

Oohhhh, I see the secret now is one app for each "real" speaker and the same "proxy" device for all that I want to be used as part of that. I figured I was missing something since the app's description sounded exactly like what I wanted, but I couldn't figure out how to do it in one gigantic child app like I was trying to do. Thanks again!

I am having some trouble with Speaker Central.
I have not gotten any thing to speak yet,

I have saved Cobra Apps, Speaker Central, and Speaker Central Child to Hubitat Apps Code and ProxySpeechPlayer to Hubitat Drivers

Speaker: Fabriq Riff


Child Device (Name XXX):

Any ideas on what I missed or messed up?
Some explanation about the Device Commands would be helpful.

Can you show me how you configured the child app for your speaker?
Is it a music player or speech synth?

I tried music player and speech synth - Same 2 errors - No Joy

Any chance Device Network ID should be an IP address?

Not required

Did you install the child and parent app (not just save the code but actually install it)?

I had not done the install. I installed Cobra, parent, and child. When I ran a rule from a button it got stuck in a loop. see log

I think it is time to remove remove all of Cobra and Speaker Central and reload and Install Cobra and Speaker Central.

1 Like

After adding all the code.
Install Cobra Apps
Then from within Cobra apps select and install speaker central
Then from within speaker central you install & configure the child app (which does the talking)

Thanks - I will let you know, probably Monday

No Joy
I removed Speaker Central and Cobra
Rebooted the hub
Renamed the speaker - Shop Speaker
Saved Cobra Apps, Speaker Central parent and child, and ProxySpeechPlayer
Installed Cobra Apps
Opened Cobra Apps and added Speaker Central to the container
When I tried to add a speaker and hit Done it would think for 3-4 seconds and refresh the page.
No speaker device was created

After several hours of removing and reinstalling Cobra and re-configuring, Cobra will not add any apps at all.

At this point I am open to any suggestions

Cobra AppsUser Created App


Name Type Value

disableAll bool false
IncludedApps enum ["Scheduled Switch","Speaker Central"]
updateNotification bool false
Event Subscriptions

No Event Subscriptions are set.

Application State

Name Value

appInstalled COMPLETE
appList [Scheduled Switch, Speaker Central]
author Cobra
btnCall updateBtn
btnName Check For Update
CobraAppCheck cobraapps.json
Comment 14th January 2019
Copyright Ⓒ 2019 Cobra
ExternalName Cobra Apps Container
InternalName CobraParent
msg Enabled by Cobra Apps
newBtn No Update Available
newver 2.6.0
parentDisable false
status Current
UpdateInfo Added 'Speaker Central'
updateURI https://raw.githubusercontent.com/CobraVmax/Hubitat/master/Apps/01%20-%20INSTALL%20ME%20FIRST/Cobra%20Apps%20Container/Cobra%20Apps%20Container.groovy
version 2.6.0
Scheduled Jobs

Handler Next Run Time Prev Run Time Status Schedule

updateCheck 2019-05-03 9:00:00 AM CDT PENDING 0 0 9 ? * FRI *

You need to manually create a virtual device and assign the proxyspeech driver to it.
This is then configured as the child app when configuring it


Sorry for the delay - Other projects were calling.
I have not gotten my Fabriq Riff to utter a word. Several questions though:

  1. Should this speaker be set up as a Music Player?
  2. How does the code locate the physical speaker?
    I named the Proxy Device the same as the Speaker Name (Shop Speaker)
    I don't think that is working.
  3. What else can I look for?

I believe that you need to setup your speakers first with ‘media renderer’ app
I don’t use that as I have sonos, alexa and google home devices and my speakers connect directly to Hubitat
My app will only work once you have setup one or more speakers correctly

Looks like the driver is missing some functionality/signatures that break with the New Notification App. Any chance you'll be revisiting?

2019-05-11 12:11:18.304 pm errorgroovy.lang.MissingMethodException: No signature of method: user_driver_Cobra_ProxySpeechPlayer_1315.playTextAndRestore() is applicable for argument types: (java.lang.String, java.lang.Long) values: [present, 45]

This is already enabled in the current driver & childapp

However; I have a new version of both driver and childapp to release soon.
I haven't tested with the new notify app so perhaps I should before release.


Are you selecting the proxyspeechplayer as a music player or a speechsynth?

The implementation in the current driver doesn't include the long value in the signature.

1 Like

I have updated the driver, parent and child apps

1 Like

Unfortunately the latest release didn't solve the problem playTextAndRestore problem I'm experiencing. While I'm not getting an exception in the logs anymore, now if I select Music Player and set a volume in Notifications app, nothing gets played at all on through the proxy.

The signature for playTextAndRestore(string, long) is still missing as far as I can see in the code. That's what the notifications app tries to send to the speaker.

I think there is a problem with the child app on the new update? I can't pick the virtual device (the proxy speaker device) anymore. When I save I get "No Virtual Device Set" in the log.

Also, why is there a setting for "Use existing speech proxy device" on the parent? That shouldn't be there, right? If you move the proxy device up to the parent level then you can't use different groups of speakers for different scenarios. That should be a question the child app is asking. I have three announcement groups that all operate differently depending on the mode and other factors that I can't set in your app but I can set in RM. If I can only set the proxy device at the parent level then I am limited to one proxy device and I can't get the all the combinations I need anymore. I used to be able to have a proxy device per child app. Hopefully that hasn't changed.

It also means I can't have two different volumes easily if I can't define the condition with your control types. For example, if water is leaking I don't want to have to turn on a virtual switch and then speak something and have to turn the virtual switch off afterwards. I don't want to have to maintain switches to maintain volumes. I could just use a different proxy device that was always fixed volume loud when the child apps had their own proxy devices. It was much easier when the virtual speaker device was tied to the child.

*edit: Also, do you know where this comes from on every reboot?

groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (com.hubitat.hub.domain.Event) values: [com.hubitat.hub.domain.Event@17b23313]
Possible solutions: wait(), any(), wait(long), each(groovy.lang.Closure), any(groovy.lang.Closure), take(int) (updated)

This is the only app that sends the volume with the text to speak
I'll add some additional code to the handler to cover this

I'll look at this again and make some 'option' changes
This was changed so that the parent could create the proxy device for you (to try and help new users)
I couldn't see a use for more than one proxy as volume levels etc are set in child app and pushed before speaking so only one proxy device is really needed.

Personally I have lots of different volume levels and different scenarios where certain speakers are enabled/disabled
All use the same proxy device

The error on boot is some code which I thought I had removed which was designed to reinitialise everything on boot (but didn't really work)
I'll check that again