0
Under review

Sonos запуск радио

Артур738 4 years ago in iRidium Script / AV and Driver scripts updated 4 years ago 6

Как можно через скрипт запустить определенный радио стрим на конкретном соносе?

Была попытка вырезать функции из sonos скрипта от иридиум, которые отвечают за запуск стрим ссылки, но почемуто через пару раз плейер виснет и больше не реагирует на команды, хотя радио поначалу запускает

Да простят меня скрипт программисты за непонятную логику и кривой синтаксис....


var mute;


var plus;
var minus;
var volume;
var uuid;
var sonos;
var sonosT4;
var sonosT8;
var sonosT9;
var url;
var port;
var host;
var path;
var upnp;
var players = [];


IR.AddListener(IR.EVENT_DEVICE_FOUND, 0, FoundDevice);
function SavePlayers()
{
var data = [];
for(var i = 0; i < players.length; ++i) {
data[i] = players[i].Name + '~http://' + players[i].Host + ':' + players[i].Port + players[i].DescriptionUrl;
IR.SetVariable("Global.SonosPlayers", data.join(','));
}}
IR.AddListener(IR.EVENT_START,0,function()
{
upnp = IR.CreateDevice(IR.DEVICE_UPNP_CONTROL, "UpnpControl");
upnp.Connect();
})

function UpdateGroups()
{
var info = [];
var num = players.length;
grouplist.Clear();
for(var i = 0; i < num; ++i)
{
// Receiving meta data
players[i].InvokeAction("GetMediaInfo", "urn:schemas-upnp-org:service:AVTransport:1", {InstanceID: 0}, function(index)
{
return function(text)
{
//IR.Log("text"+text);
// Save info and wait for all data
var xml = new XML(text);
info[index] = xml["s:Envelope"]["s:Body"]["u:GetMediaInfoResponse"]["CurrentURI"].toString();
//IR.Log("info="+info[index]);
// If received all data, create a groups
if(--num == 0)
{
// Create groups
group = undefined;
zone.Text = "";
groups.length = 0;
for(i = 0; i < info.length; ++i)
{
if(!info[i] || info[i].indexOf("x-rincon:") < 0)
{
players[i].group = undefined;
var ngroup = {parent: players[i],
members: [],
name: players[i].Description.root.device.roomName.toString(),
uri: "x-rincon:" + players[i].Description.root.device.UDN.toString().substr(5)};
groups.push(ngroup);
// Add members
for(var j = 0; j < info.length; ++j)
if(info[j] == ngroup.uri)
{
players[j].group = ngroup;
ngroup.members.push(players[j]);
ngroup.name += ", " + players[j].Description.root.device.roomName;
}
}
}
// Update list
grouplist.Clear();
for(i = 0; i < groups.length; ++i)
grouplist.CreateItem(i, 4, {Text: groups[i].name});
// Select first group
SelectGroup(0);
}
}
}(i));
}
}
function FoundDevice(uuid, url)
{
if(IR.GetDevice(uuid)) return;
var device = IR.CreateDevice(IR.DEVICE_UPNP_DEVICE, uuid);
host = url.indexOf("http://");
if(host >= 0)
{
host += 7;
port = url.indexOf(":", host);
if(port > 0)
{
port += 1;
path = url.indexOf("/", port);
if(path > 0)
{
device.SetParameters({
Host: url.substr(host, port - host - 1),
Port: url.substr(port, path - port),
DescriptionUrl: url.substr(path)});
device.Connect();
IR.AddListener(IR.EVENT_ONLINE, device, function()
{
var xml = this.Description.root.device;
var type = xml.deviceType.toString();
if(type.indexOf("urn:schemas-upnp-org:device:ZonePlayer") >= 0 && xml.modelNumber.toString().indexOf("ZB") < 0)
{
players.push(this);
SavePlayers();

IR.AddListener(IR.EVENT_RECEIVE_EVENT, this, ReceiveEvent, this);
this.Subscribe("urn:schemas-upnp-org:service:AVTransport:1");
this.Subscribe("urn:schemas-upnp-org:service:RenderingControl:1");
this.Subscribe("urn:schemas-upnp-org:service:ContentDirectory:1");
}
}, device);

}
}
}
}

IR.AddListener(IR.EVENT_RECEIVE_EVENT , IR.GetDevice("RINCON_5CAAFD11490D01400"), function(type,text) // кино 103
{
ReceiveEvent() ;
})
IR.AddListener(IR.EVENT_RECEIVE_EVENT , IR.GetDevice("RINCON_000E58DDFACA01400"), function(type,text) //ванная малая104
{
ReceiveEvent() ;
})
IR.AddListener(IR.EVENT_RECEIVE_EVENT , IR.GetDevice("RINCON_B8E937A473F601400"), function(type,text) //гардероб 101
{
ReceiveEvent() ;
})
IR.AddListener(IR.EVENT_RECEIVE_EVENT , IR.GetDevice("RINCON_B8E937A46DCC01400"), function(type,text) //ванная спалня 102
{
ReceiveEvent() ;
})




function Control(){
FoundDevice();

};
//mute = IR.GetItem("TV_T2_volume").GetItem("mute-icon 3");

function stopAllSonos(){
sonos = IR.GetDevice("RINCON_5CAAFD11490D01400");
sonos.InvokeAction("Pause", "urn:schemas-upnp-org:service:AVTransport:1", {InstanceID: 0} );
ReceiveEvent();
sonosT4 = IR.GetDevice("RINCON_000E58DDFACA01400");
sonosT4.InvokeAction("Pause", "urn:schemas-upnp-org:service:AVTransport:1", {InstanceID: 0} );
ReceiveEvent();
sonosT8 = IR.GetDevice("RINCON_B8E937A473F601400");
sonosT8.InvokeAction("Pause", "urn:schemas-upnp-org:service:AVTransport:1", {InstanceID: 0} );
ReceiveEvent();
sonosT9 = IR.GetDevice("RINCON_B8E937A46DCC01400");
sonosT9.InvokeAction("Pause", "urn:schemas-upnp-org:service:AVTransport:1", {InstanceID: 0} );
ReceiveEvent();
}

function stopPlayT4(){
sonosT4 = IR.GetDevice("RINCON_000E58DDFACA01400");
sonosT4.InvokeAction("Pause", "urn:schemas-upnp-org:service:AVTransport:1", {InstanceID: 0} );
ReceiveEvent();
}

function stopPlayT9(){
sonosT9 = IR.GetDevice("RINCON_B8E937A46DCC01400");
sonosT9.InvokeAction("Pause", "urn:schemas-upnp-org:service:AVTransport:1", {InstanceID: 0} );
ReceiveEvent();
}



function PlayBackT4()
{
sonosT4 = IR.GetDevice("RINCON_000E58DDFACA01400");
sonosT4.InvokeAction("SetVolume", "urn:schemas-upnp-org:service:RenderingControl:1", {InstanceID: 0, Channel: "Master", DesiredVolume: 20});
ReceiveEvent();

var uri = "x-sonosapi-stream:s49630?sid=254&flags=32" //[di] lounge radio
var title = "[DI]Lounge"
var meta = '
meta += 'xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" ';
meta += 'xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" ';
meta += 'xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"';
meta += '><item id="-1" ';
meta += 'parentID="-1" ';
meta += 'restricted="true">';
meta += '<dc:title>' + title + '</dc:title>';
meta += '<upnp:class>object.item.audioItem.audioBroadcast</upnp:class>';
meta += '<desc id="cdudn" ';
meta += 'nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">SA_RINCON65031_';
meta += '</desc></item></DIDL-Lite>';
sonosT4.InvokeAction("SetAVTransportURI", "urn:schemas-upnp-org:service:AVTransport:1",
{InstanceID: 0, CurrentURI: uri, CurrentURIMetaData: meta});
sonosT4.InvokeAction("Play", "urn:schemas-upnp-org:service:AVTransport:1", {InstanceID: 0, Speed: 1});
}

function PlayBackT9()
{
sonosT9 = IR.GetDevice("RINCON_B8E937A46DCC01400");
sonosT9.InvokeAction("SetVolume", "urn:schemas-upnp-org:service:RenderingControl:1", {InstanceID: 0, Channel: "Master", DesiredVolume: 20});
ReceiveEvent();

var uri = "x-sonosapi-stream:s49630?sid=254&flags=32" //[di] lounge radio
var title = "[DI]Lounge"
var meta = '
meta += 'xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" ';
meta += 'xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" ';
meta += 'xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"';
meta += '><item id="-1" ';
meta += 'parentID="-1" ';
meta += 'restricted="true">';
meta += '<dc:title>' + title + '</dc:title>';
meta += '<upnp:class>object.item.audioItem.audioBroadcast</upnp:class>';
meta += '<desc id="cdudn" ';
meta += 'nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">SA_RINCON65031_';
meta += '</desc></item></DIDL-Lite>';
sonosT9.InvokeAction("SetAVTransportURI", "urn:schemas-upnp-org:service:AVTransport:1",
{InstanceID: 0, CurrentURI: uri, CurrentURIMetaData: meta});
sonosT9.InvokeAction("Play", "urn:schemas-upnp-org:service:AVTransport:1", {InstanceID: 0, Speed: 1});
}


/*IR.AddListener(IR.EVENT_ITEM_PRESS, mute, function (){
sonos = IR.GetDevice("RINCON_5CAAFD11490D01400");
sonos.InvokeAction("SetMute", "urn:schemas-upnp-org:service:RenderingControl:1", {InstanceID: 0, Channel: "Master", DesiredMute: mute.Value});
ReceiveEvent() ;
});
*/

function ReceiveEvent(type, text)
{
var xml = new XML(text);
try {
var uri = xml["e:propertyset"]["e:property"].LastChange.Event.InstanceID.CurrentTrackURI["@val"];
if((this.group && this.group.uri != uri) ||
(!this.group && uri.indexOf("x-rincon:") >= 0))
UpdateGroups();
} catch(error) {}
try {
var vars = xml["e:propertyset"]["e:property"].LastChange.Event.InstanceID;
if(vars.Volume)
{
volume.Value = vars.Volume["@val"];
}
if(vars.Mute)
{
mute.Value = vars.Mute["@val"];
}
} catch(error) {
}
}

Under review

Артур, пришлите, пожалуйста, ваш скрипт вместе с проектом (выберите тип комментария "Автору и команде").
Рассмотрение подобных вопросов (поиск проблем в скриптах) занимает много времени, но проблему поищем.

Екатерина, у меня нет варианты "Автору и команде" к комментарию


Прошу прощения, ввела в заблуждение. Тогда напишите отдельный, приватный топик (можно просто на емейл поддержки)

up

Может у кого-то есть функция как запустить и остановить радио стрим на конкретном соносе(есть RINCON)?

Та что выше почему-то посылает сонос в ступор через 2-3 команды вкл/выкл