Knoppenrij programmeren voor de bediening van Sonos Play

Freek-Jan Buijsman
Freek-Jan Buijsman Administrator
February 2019 aangepast in Native scripts
*Let op: Het opzoeken van radiozenders werkt niet meer en hierdoor kunnen de URI's die aan de knoppen gekoppeld moeten worden niet meer worden opgezocht.
Echter, vanaf firmware versie 2.8.0 beschikt xxter over een volledige Sonos integratie. Het Sonos element waarmee dit mogelijk is kan in het profiel op een pagina worden toegevoegd.
Dit voorbeeld zal blijven staan ter inspiratie.

Introductie

Aan de hand van dit voorbeeld kan een knoppenrij met 4 knoppen worden geconfigureerd in de xxter app. Met de knoppen kunnen vervolgens op een Sonos(Play) verschillende radiozenders worden gestart.
Iets om rekening mee te houden is dat Sonos bij updates zaken kan veranderen waardoor eea ineens niet meer werkt.

Ter voorbereiding moeten eerst de benodigde uris/links worden opgezocht.
Deze links zijn nodig bij het maken van het script in stap 2.

De voorbereiding

Start de Sonos software en start een radiozender die straks aan een knop moet worden toegewezen.
Ga vervolgens naar de Sonos via zijn lokale IP: http://XXXX:1400/status/radiolog (vul bij XXXX het ip adres van de Sonos in)
Er verschijnt dan een lijstje met informatie:

Timestamp Type URI
371045 playlist http://legato.radiotime.com/Tune.ashx?id=s25548&partnerId=Sonos&serial=00-0E-58-86-D5-B6:5version=31.9
371046 stream x-rincon-mp3radio://icecast.omroep.nl/radio4-bb-mp3
371046 stream aac://icecast.omroep.nl/radio4-bb-aac
371047 stream x-rincon-mp3radio://icecast.omroep.nl/radio4-sb-mp3

In dit voorbeeld is voor de kortste uri gekozen namelijk: aac://icecast.omroep.nl/radio4-bb-aac.
Bewaar deze link ergens en voer vervolgens bovenstaande stappen opnieuw uit voor iedere zender die aan een knop moet worden toegewezen.

Stap 1

We beginnen met het aanmaken van één byte waarde component. Vul bij het byte waarde component een leeg groepsadres in, bijvoorbeeld 5/7/1.
Maak vervolgens 4x een byte waarde zenden component aan. Vul hier hetzelfde groepsadres in als bij de Byte waarde: 5/7/1.
In dit voorbeeld werken we met 4 knoppen, dus hebben we 4 waardes nodig. In dit voorbeeld zijn dat: 0, 1, 2, 3. Deze zijn ingevuld in de kolom "Waarde".
De 0 zal worden gekoppeld aan de uit knop, de 1 aan radio 4 etc.

image

Stap 2

Maak een script, zie screenshot. Onder de screenshot staat de benodigde code om te kopiëren en plakken. De schuin gedrukte regels bij de sourceuris moet worden vervangen voor de links van de in de voorbereiding gekozen voorkeurszenders.
Let op: De dikgedrukte regels zijn apparaten die lokaal gebruikt worden. Deze moeten dus nog worden aangepast zodat ze overeenkomen met de apparaten in de configuratie.
De regels IF BYTE(16/Radio zender kiezen)=0,1,2,3 verwijzen naar de componenten die bij stap 1 zijn aangemaakt. De bytewaarde kan worden geselecteerd uit het lijstje met BYTES (klik op het pijltje naast COMMANDS).
image
IF BYTE (16/Radio zender kiezen)=0
EXECUTE ON UPNPDEVICE (UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) STOP
IF BYTE (16/Radio zender kiezen)=1
BEGIN
EXECUTE ON UPNPDEVICE (UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) SOURCEURI aac://icecast.omroep.nl/radio4-bb-aac
EXECUTE ON UPNPDEVICE (UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) PLAY
EXECUTE ON UPNPDEVICE (UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) UNMUTE
END
IF BYTE( 16/Radio zender kiezen)=2
BEGIN
EXECUTE ON UPNPDEVICE (UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) SOURCEURI aac://8633.live.streamtheworld.com:80/VERONICAAAC_SC
EXECUTE ON UPNPDEVICE (UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) PLAY
EXECUTE ON UPNPDEVICE (UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) UNMUTE
END
IF BYTE (16/Radio zender kiezen)=3
BEGIN
EXECUTE ON UPNPDEVICE (UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) SOURCEURI aac://icecast.omroep.nl/3fm-bb-aac
EXECUTE ON UPNPDEVICE (UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) PLAY
EXECUTE ON UPNPDEVICE (UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) UNMUTE
END
Kopieer en Plak bovenstaande scriptregels in het daarvoor bestemde veld en druk op opslaan en controleren. Wanneer het script niet in orde is word de foutieve tekst rood.
Nogmaals, de apparaten hierboven (dikgedrukte tekst) zijn bij het maken van dit voorbeeld gebruikt. In een andere configuratie hebben deze dus andere namen en nummers.

Stap 3

Het aanmaken van een actie om het eerder gemaakte script mee te starten. Bij Voorwaarde -->Component "Radio zender kiezen" invullen (gemaakt in stap1). Bij Actie-->Script "Radio zender kiezen sonos" invullen (gemaakt in stap 2).
image

Stap 4

Maak op een pagina in het profiel een element "Knoppenrij" aan. Kies bij het aantal knoppen voor 4. Begin met het instellen van Knop 1, dit wordt de uit knop.
Bij Status Component kiezen we het component dat in stap 1 is aangemaakt "Radio zender kiezen". De voorwaarde =0 en bij "Sturen bij indrukken" komt op "Radio uit" te staan.
(Voorwaarde 0 en Radio uit verwijzen naar de waarde die is gekozen bij byte waarde zenden in stap 1)

Voor de overige knoppen gebruiken we dezelfde instellingen, behalve voor de "Voorwaarde" en "Sturen bij indrukken"
Knop 2 krijgt "Voorwaarde" 1 en "Sturen bij indrukken" Radio 4.
Knop 3 krijgt "Voorwaarde" 2 en "Sturen bij indrukken" Radio Veronica.
Knop 4 krijgt "Voorwaarde" 3 en "Sturen bij indrukken" Radio 3.
image

De laatste stap is het updaten van het profiel in de app. Nu zou de knoppenrij moeten werken.

Reacties

  • Mogelijk dat niet alle opgezochte Streams meer werken dus hierbij een kleine aanvulling op bovenstaande
    In plaats van te verwijzen naar de Stream kan sinds enige tijd met xxter ook worden verwezen naar een favoriet of een afspeellijst. In dit voorbeeld gebruiken we een favoriet, PLAYFVNAME.

    Let op: de favorieten mogen geen vreemde karakters bevatten en als een spatie gebruikt wordt in de favorietnaam moet in het script in plaats van een spatie een underscore gebruikt worden.

    538 Non Stop wordt dus 538_Non_Stop in het script, mits 538 Non Stop als favoriet in de Sonos app is toegevoegd. Check dus wel even de favorietnaam.

    Het script wordt dan dus als volgt:
    
    IF BYTE(16/Radiozenderkiezen)=1
     EXECUTE ON UPNPDEVICE(UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) STOP
    #
    IF BYTE(16/Radiozenderkiezen)=2
     BEGIN
      EXECUTE ON UPNPDEVICE(UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) PLAYFVNAME 538_Ibiza
      EXECUTE ON UPNPDEVICE(UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) PLAY
      EXECUTE ON UPNPDEVICE(UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) UNMUTE
     END
    #
    IF BYTE(16/Radiozenderkiezen)=3
     BEGIN
      EXECUTE ON UPNPDEVICE(UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) PLAYFVNAME Fresh_FM
      EXECUTE ON UPNPDEVICE(UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) PLAY
      EXECUTE ON UPNPDEVICE(UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) UNMUTE
     END
    #
    IF BYTE(16/Radiozenderkiezen)=4
     BEGIN
      EXECUTE ON UPNPDEVICE(UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) PLAYFVNAME 538_Non_Stop
      EXECUTE ON UPNPDEVICE(UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) PLAY
      EXECUTE ON UPNPDEVICE(UPNPUUID:RINCON_000E5886D5B601400_MR§/Woonkamer - Sonos PLAY:5 Media Renderer) UNMUTE
     END
    Na het commando PLAYFVNAME wordt ook nog een PLAY en een UNMUTE toegevoegd, dit is niet gewijzigd verder.
  • Mark Roks
    Mark Roks Specialist
    In het voorbeeld hierboven wordt er gesproken over de zender "538_Non_Stop". Echter wilde ik "Radio 538 Non-Stop 40" laten afroepen via een script via de Xxter. Deze heb ik eerst toegevoegd aan de "Sonos favorieten". Echter omdat de naam in het script geen "rare tekens" mag bevatten wordt dit in het script: "Radio_538_NonStop_40" (dus wordt het - teken geheel verwijderd en hier achter meteen het restant gezet). Dit is volgens mij ook van toepassing bij andere zenders waar "rare tekens" in staan en men deze graag in een script toe zou willen voegen.
  • Mark Roks
    Mark Roks Specialist
    Zojuist ook geprobeerd bij de zender "100% NL". Deze wordt als favoriet in een script "100_NL".
  • Zojuist ook geprobeerd bij de zender "100% NL". Deze wordt als favoriet in een script "100_NL".

    Dank voor je toevoegingen en het testen Mark :smile:
  • Is er bij Sonos wat gewijzigd? Als ik onderstaande (met juiste IP adres) probeer op te vragen blijft het scherm leeg. Eerder werden de gevraagde gegevens wel getoond.

    Ga vervolgens naar de Sonos via zijn lokale IP: http://XXXX:1400/status/radiolog (vul bij XXXX het ip adres van de Sonos in)
    Er verschijnt dan een lijstje met informatie:
  • Hallo Jan,
    Het lijkt erop dat dit inderdaad niet meer werkt.
    Waar dit aan ligt heb ik nog niet kunnen achterhalen.

    Het eerder geboden alternatief om de radiozenders toe te voegen via de favorieten werkt nog wel.
    Zie hier