How to receive a notification (or whatever) when the volume is changed by any client on the network.
I am ok in opening a socket, which seems to be the way it travels over the network but I don't know what
the frame will look like.
I can control many functions of my Sonos using the POST apis.
That is one thing that I can't figure out.
Any help on the matter is much appreciated!
thx
Page 1 / 1
The "notifications" are standard UPnP events, which basically works like this:
a controller (your device) subscribes to events by sending an HTTP request to the player in question, with information about endpoint to send notifications to (which would receive standard UPnP SOAP request), and also for how long (timeout). That endpoint needs to be alive and respond with a 200 OK at this time, since it would be tested for availability (IIRC) and also send the first event immediately.
Once that is done, ever ytime a volume change is made, it would send a request with verb NOTIFY and a UPnP body with one or more event tags, which you would be able to parse.
Before the timeout occurs, you would need to re-subscribe once again, and preferably provide the "sid" (subscription ID) you received when subscribing the first time. If this fail, you would need to subscribe from scratch again.
If you want to see some samples of the data, you can look at these mocks I use for my tests:
An actual subscribe request: https://gist.github.com/jishi/66ed97e69edddb1a036dd6b515030bd2
Volume event request: https://gist.github.com/jishi/f6f760ca3a84ea992ac405a266970eb1
It might also be wise to unsubscribe gracefully if possible, by sending a UNSUBSCRIBE verb with the SID header in the request.
Hope that helps!
a controller (your device) subscribes to events by sending an HTTP request to the player in question, with information about endpoint to send notifications to (which would receive standard UPnP SOAP request), and also for how long (timeout). That endpoint needs to be alive and respond with a 200 OK at this time, since it would be tested for availability (IIRC) and also send the first event immediately.
Once that is done, ever ytime a volume change is made, it would send a request with verb NOTIFY and a UPnP body with one or more event tags, which you would be able to parse.
Before the timeout occurs, you would need to re-subscribe once again, and preferably provide the "sid" (subscription ID) you received when subscribing the first time. If this fail, you would need to subscribe from scratch again.
If you want to see some samples of the data, you can look at these mocks I use for my tests:
An actual subscribe request: https://gist.github.com/jishi/66ed97e69edddb1a036dd6b515030bd2
Volume event request: https://gist.github.com/jishi/f6f760ca3a84ea992ac405a266970eb1
It might also be wise to unsubscribe gracefully if possible, by sending a UNSUBSCRIBE verb with the SID header in the request.
Hope that helps!
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.