MAM78 Posté(e) le 9 avril 2017 Signaler Posté(e) le 9 avril 2017 (modifié) Merci @Sakkhho cela a enfin fini par marcher. Sais-tu comment ce problème survient afin que je puisse m'en prévenir Modifié le 9 avril 2017 par MAM78
jojo Posté(e) le 10 avril 2017 Signaler Posté(e) le 10 avril 2017 Il y a 10 heures, MAM78 a dit : Sais-tu comment ce problème survient afin que je puisse m'en prévenir il ne faut jamais faire de save du panneau de variables
pepite Posté(e) le 10 avril 2017 Signaler Posté(e) le 10 avril 2017 Exact, je l'avais fait un jour malencontreusement, si tu saves le Panneau de variables, ca met NaN comme valeur, et evidemment, plus rien ne fonctionne lol Ne jamais touche au panneau autrement que pour créer, JAMAIS de SAVE Depuis, moi des que je peux, je passe par des labels ;-). Maintenant j'ai les 2 lol
Titof_44 Posté(e) le 15 avril 2017 Signaler Posté(e) le 15 avril 2017 Super @drboss pour lire les PlayLists. Ca marche au top et merci évidement à @Krikroff. J'ai créé des boutons supplémentaires dans le VD V1. On avait les radios et maintenant les PlayLists.
pepite Posté(e) le 15 avril 2017 Signaler Posté(e) le 15 avril 2017 @Titof_44, j ai rate les playlists :-) Ou ? Quand? Comment ? Partage :-)Envoyé de mon Nexus 5X en utilisant Tapatalk
Titof_44 Posté(e) le 15 avril 2017 Signaler Posté(e) le 15 avril 2017 C'est Page 40 Moi j'ai fait un bouton par playlist dédié dans le VD de Krikroff. Pour mon besoin je reset la Liste à chaque changement de playList en fin de code. Voici le code du bouton Juste à changer : list_nbr = 6 -- playlist number on jffs system of SONOS, You need test it for find interesting list, (j'ai fait au pif en incrémentant de 1 à chaque essai, je pense que j'avais mis les radios avant c'est pour cela que je suis à 6 pour la première liste) uid = "RINCON_B8EXXXXXXXXXX1400" -- find by http://SONOS_IP:1400/status/upnp : clicker Incoming Subscriptions et copier coller l'uid. -- SONOS Play playlist, v.0.1 ------------------------------------------------------------------------------------------- ---made on source of:----------------------------------------------------------------------- -- SONOS Play stream... -- Copyright © 2014 Jean-Christophe Vermandé ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- ---------------------------------- -- User Settings ---------------------------------- selfId = fibaro:getSelfId(); ip = fibaro:get(selfId, 'IPAddress'); port = fibaro:get(selfId, 'TCPPort') or 1400; list_name = "Sonos Playlist Vanessa" --not implemented list_nbr = 6 -- playlist number on jffs system of SONOS, You need test it for find interesting list uid = "RINCON_B8EXXXXXXXXXX1400" -- find by http://SONOS_IP:1400/status/upnp FileVol = 40 PlayUnlimited = "Yes" -- si <> Yes, arrêt après 30s environ --duration = ---------------------------------- -- DO not change bellow this line ---------------------------------- currentTransportState = ""; lastTransportState = ""; currentVolume = 0; lastVolume = 0; ttsVolumeIsDifferent = false; urlencode = function(str) if (str) then str = string.gsub (str, "\n", "\r\n"); str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end); str = string.gsub (str, " ", "+"); end return str; end createRequestBody = function(action, schema, data) return string.format("<u:%s xmlns:u=\"%s\">%s</u:%s>", action, schema, data, action); end clear_last_que = function() -- without this album is added after play song/query return sendSoapMessage( -- control url "/MediaRenderer/Queue/Control", -- service type "urn:schemas-sonos-com:service:Queue:1", -- action { name = "RemoveAllTracks", service = "urn:schemas-sonos-com:service:Queue:1" }, -- soap body data (options) "<QueueID>0</QueueID>,<UpdateID>0</UpdateID>", -- callback (options) function(response) fibaro:debug("Remove"); end); end reponseCallback = function(fnc, args) if (fnc == nil) then return nil; end return fnc(args); end createSocket = function() -- Check IP and PORT before if (ip == nil or port == nil) then fibaro:debug("You must configure IPAddress and TCPPort first"); return; end local socket; local status, err = pcall(function() socket = Net.FTcpSocket(ip, port); socket:setReadTimeout(1000); end); if (status ~= nil and status ~= true) then fibaro:debug("socket status: " .. tostring(status or '')); end if (err ~= nil) then fibaro:debug("socket err: " .. tostring(err or '')); return; end return socket; end disposeSocket = function(socket) if (socket ~= nil) then socket:disconnect(); socket = nil; return true; end return false; end sendSoapMessage = function(url, service, action, args, callback, retry) local socket = createSocket(); if (socket == nil) then return; end retry = retry or 0 -- prepare data local url = "POST " .. url .. " HTTP/1.1"; --local udn = "X-SONOS-TARGET-UDN: uuid:RINCON_B8E937B01D4E01400" -- udn of my SONOS (not need) local soapaction = "SOAPACTION: \"" .. service .. "#" .. action.name .. "\""; local body = createRequestBody(action.name, action.service, tostring(args or "")); local envelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body>" .. body .. "</s:Body></s:Envelope>"; local ctl = "Content-Length: " .. string.len(envelope); --local payload = url .. "\r\n" .. ctl .. "\r\n" .. udn .. "\r\n" .. soapaction .. "\r\n" .. "\r\n" .. envelope; -- with UDN local payload = url .. "\r\n" .. ctl .. "\r\n" .. soapaction .. "\r\n" .. "\r\n" .. envelope; -- write data local bytes, errorcode = socket:write(payload); if (errorcode == 0) then local state, errorcode = socket:read(); if (errorcode == 0) then if (string.len(state or "") > 0) then -- callback if (callback ~= nil) then reponseCallback(callback, state); end -- dispose ... disposeSocket(socket); return true; else fibaro:debug("Error: Invalid response. response length: " .. string.len(state or "")); end else if (retry < 5) then fibaro:debug("retry #"..retry.." action: " .. action.name); return sendSoapMessage(url, service, action, args, callback, (retry + 1)); else fibaro:debug("Error: Code returned "..tostring(errorcode or "")); end end elseif (errorcode == 2) then fibaro:debug("Error: You must check your IP and PORT settings."); else if (retry < 5) then fibaro:debug("retry #"..retry.." action: " .. action.name); return sendSoapMessage(url, service, action, args, callback, (retry + 1)); else fibaro:debug("Error: Code returned "..tostring(errorcode or "")); end end -- dispose ... disposeSocket(socket); -- default response return false; end stop = function() return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "Stop", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID><Speed>1</Speed>", -- callback (options) function(response) fibaro:debug("stop sent"); end); end unMute = function() return sendSoapMessage( -- control url "/MediaRenderer/RenderingControl/Control", -- service type "urn:schemas-upnp-org:service:RenderingControl:1", -- action { name = "SetMute", service = "urn:schemas-upnp-org:service:RenderingControl:1" }, -- soap body data (options) "<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>0</DesiredMute>", -- callback (options) function(response) fibaro:debug("unMute sent"); end); end play = function(duration) return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "Play", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID><Speed>1</Speed>", -- callback (options) function(response) if (duration ~= nil) then fibaro:debug("play sent for " .. duration .. " seconds"); fibaro:sleep(duration); stop(); else fibaro:debug("play sent"); local n = 0; currentTransportState = "TRANSITIONING"; while (currentTransportState == "TRANSITIONING") do if (n > 10) then break end; getTransportState(); fibaro:debug(currentTransportState); fibaro:sleep(5000); n = n + 1; end local i = 0; currentTransportState = "PLAYING"; while (currentTransportState == "PLAYING") do if (i > 10 and PlayUnlimited ~= "Yes") then break end; getTransportState(); fibaro:debug(currentTransportState); fibaro:sleep(2000); i = i + 1; end fibaro:sleep(1000); stop(); end -- update volume with value before tts if different if (ttsVolumeIsDifferent == true) then setVolume(lastVolume); ttsVolumeIsDifferent = false; end end); end sseek = function() return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "Seek", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID>,<Unit>TRACK_NR</Unit>,<Target>1</Target>", -- callback (options) function(response) fibaro:debug("Seek"); end); end que = function() return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "AddURIToQueue", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID>,<EnqueuedURI>file:///jffs/settings/savedqueues.rsq#".. list_nbr.."</EnqueuedURI>,<EnqueuedURIMetaData><DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><item id="SQ:1" parentID="SQ:" restricted="true"><dc:title>".. list_name .."</dc:title><upnp:class>object.container.playlistContainer</upnp:class><desc id="cdudn" nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">RINCON_AssociatedZPUDN</desc></item></DIDL-Lite></EnqueuedURIMetaData>,<DesiredFirstTrackNumberEnqueued>1</DesiredFirstTrackNumberEnqueued>,<EnqueueAsNext>1</EnqueueAsNext>", -- callback (options) function(response) fibaro:debug("que"); end); end setVolume = function(value) return sendSoapMessage( -- control url "/MediaRenderer/RenderingControl/Control", -- service type "urn:schemas-upnp-org:service:RenderingControl:1", -- action { name = "SetVolume", service = "urn:schemas-upnp-org:service:RenderingControl:1" }, -- soap body data (options) "<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredVolume>" .. tostring(value) .. "</DesiredVolume>", -- callback (options) function(response) fibaro:debug("Volume set: " .. value); end); end getVolume = function() fibaro:log("Get volume, please wait..."); return sendSoapMessage( -- control url "/MediaRenderer/RenderingControl/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "GetVolume", service = "urn:schemas-upnp-org:service:RenderingControl:1" }, -- soap body data (options) "<InstanceID>0</InstanceID><Channel>Master</Channel>", -- callback (options) function(response) currentVolume = tonumber(response:match("<CurrentVolume>(.+)</CurrentVolume>") or 0); end); end getTransportState = function() return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "GetTransportInfo", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID>", -- callback (options) function(response) currentTransportState = response:match("<CurrentTransportState>(.+)</CurrentTransportState>") or ""; end); end playFile= function(volume) return sendSoapMessage( -- control url SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI" "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "SetAVTransportURI", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID>,<CurrentURI>x-rincon-queue:"..uid.."#0</CurrentURI>,<CurrentURIMetaData></CurrentURIMetaData>", -- zestawienie playlist -- control url --"/MediaServer/ContentDirectory/Control", -- service type --"urn:schemas-upnp-org:service:ContentDirectory:1", -- action --{ name = "Browse", service = "urn:schemas-upnp-org:service:ContentDirectory:1" }, -- soap body data (options) --"<ObjectID>Q:0</ObjectID>,<BrowseFlag>BrowseDirectChildren</BrowseFlag>,<Filter>dc:title,res,dc:creator,upnp:artist,upnp:album,upnp:albumArtURI</Filter>,<StartingIndex>0</StartingIndex>,<RequestedCount>100</RequestedCount>,<SortCriteria></SortCriteria></u:Browse>", -- callback (options) function(response) -- retrieve current transport state getTransportState(); lastTransportState = currentTransportState; -- unmute before unMute(); -- retrieve volume getVolume(); lastVolume = currentVolume; -- set tts volume if <> with current if (volume ~= nil and volume ~= currentVolume) then setVolume(volume); ttsVolumeIsDifferent = true; end sseek(); play(); end); end clear_last_que(); que(); -- en paramètres: le fichier, puis le volume... playFile(FileVol);
pepite Posté(e) le 20 avril 2017 Signaler Posté(e) le 20 avril 2017 Merci @Titof_44 ;-) Désolé pour le retard de la réponse..le boulet. Excellent, on peut aussi pour Spotify, juste la grande classe very good, very good @drboss thanks a lot. Quelqu'un a trouvé le moyen simple de récupérer le list_nbr ? Plus qu'à tester ;-)
pepite Posté(e) le 20 avril 2017 Signaler Posté(e) le 20 avril 2017 Bon, ben je dois me tromper quelque part, mais où ;-) je ne trouve pas mon list_nbr, je n'en ai qu'une pour l'instant et rien... Le RINCON est bon ;-) Une idée ? je cherche encore
drboss Posté(e) le 20 avril 2017 Signaler Posté(e) le 20 avril 2017 You need to the test, for ex. I have list of 9 playlist (see image bellow). The Sonos sort in application list by alphabet, but for the list give number by sequence of addition. In my example last added list is playlist SAUNA and they have number 9 I haven't the time for write the request for retrieve the list with number and name for for display in debug window. But is more simple when you use spotify with sonos. spotify_user - your spotify login used in sonos spotify_playlist - the id of playlist in spotify retrived like album id from spotify www - see first post. que = function() --playlist from Spotify return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "AddURIToQueue", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID>,<EnqueuedURI>x-rincon-cpcontainer:10062a6cspotify%3auser%3a"..spotify_user.."%3aplaylist%3a"..spotify_playlist.."</EnqueuedURI>,<EnqueuedURIMetaData><DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><item id="10062a6cspotify%3auser%3a"..spotify_user.."%3aplaylist%3a"..spotify_playlist.."" parentID="10082664playlists" restricted="true"><dc:title>Fibaro from Spotify</dc:title><upnp:class>object.container.playlistContainer</upnp:class><desc id="cdudn" nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">SA_RINCON2311_X_#Svc2311-0-Token</desc></item></DIDL-Lite></EnqueuedURIMetaData>,<DesiredFirstTrackNumberEnqueued>2</DesiredFirstTrackNumberEnqueued>,<EnqueueAsNext>1</EnqueueAsNext>", -- callback (options) function(response) fibaro:debug("que"); end); end ----
pepite Posté(e) le 21 avril 2017 Signaler Posté(e) le 21 avril 2017 Thanks @drboss, I try but nothing, i have only one playlist in sonos, and i don't find the list_nbr, i try until 11, i have 6 favorite radios. I do something wrong, but what. I don't use Spotify yet :-( @Titof_44 Comme toi, j'ai rajoute un bouton dans le Sonos Remote pour tester ;-) ..oui oui, je plagie lol Je vous le code peut-être que je rate qqch ;-) -- SONOS Play playlist, v.0.1 ------------------------------------------------------------------------------------------- ---made on source of:----------------------------------------------------------------------- -- SONOS Play stream... -- Copyright © 2014 Jean-Christophe Vermandé ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- ---------------------------------- -- User Settings ---------------------------------- selfId = fibaro:getSelfId(); ip = fibaro:get(selfId, 'IPAddress'); port = fibaro:get(selfId, 'TCPPort') or 1400; list_name = "pepite" --not implemented list_nbr = 11 -- playlist number on jffs system of SONOS, You need test it for find interesting list uid = "RINCON_5CAAFD239EE601400" -- find by http://SONOS_IP:1400/status/upnp FileVol = 40 PlayUnlimited = "Yes" -- si <> Yes, arrêt après 30s environ --duration = ---------------------------------- -- DO not change bellow this line ---------------------------------- currentTransportState = ""; lastTransportState = ""; currentVolume = 0; lastVolume = 0; ttsVolumeIsDifferent = false; urlencode = function(str) if (str) then str = string.gsub (str, "\n", "\r\n"); str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end); str = string.gsub (str, " ", "+"); end return str; end createRequestBody = function(action, schema, data) return string.format("<u:%s xmlns:u=\"%s\">%s</u:%s>", action, schema, data, action); end clear_last_que = function() -- without this album is added after play song/query return sendSoapMessage( -- control url "/MediaRenderer/Queue/Control", -- service type "urn:schemas-sonos-com:service:Queue:1", -- action { name = "RemoveAllTracks", service = "urn:schemas-sonos-com:service:Queue:1" }, -- soap body data (options) "<QueueID>0</QueueID>,<UpdateID>0</UpdateID>", -- callback (options) function(response) fibaro:debug("Remove"); end); end reponseCallback = function(fnc, args) if (fnc == nil) then return nil; end return fnc(args); end createSocket = function() -- Check IP and PORT before if (ip == nil or port == nil) then fibaro:debug("You must configure IPAddress and TCPPort first"); return; end local socket; local status, err = pcall(function() socket = Net.FTcpSocket(ip, port); socket:setReadTimeout(1000); end); if (status ~= nil and status ~= true) then fibaro:debug("socket status: " .. tostring(status or '')); end if (err ~= nil) then fibaro:debug("socket err: " .. tostring(err or '')); return; end return socket; end disposeSocket = function(socket) if (socket ~= nil) then socket:disconnect(); socket = nil; return true; end return false; end sendSoapMessage = function(url, service, action, args, callback, retry) local socket = createSocket(); if (socket == nil) then return; end retry = retry or 0 -- prepare data local url = "POST " .. url .. " HTTP/1.1"; --local udn = "X-SONOS-TARGET-UDN: uuid:RINCON_B8E937B01D4E01400" -- udn of my SONOS (not need) local soapaction = "SOAPACTION: \"" .. service .. "#" .. action.name .. "\""; local body = createRequestBody(action.name, action.service, tostring(args or "")); local envelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body>" .. body .. "</s:Body></s:Envelope>"; local ctl = "Content-Length: " .. string.len(envelope); --local payload = url .. "\r\n" .. ctl .. "\r\n" .. udn .. "\r\n" .. soapaction .. "\r\n" .. "\r\n" .. envelope; -- with UDN local payload = url .. "\r\n" .. ctl .. "\r\n" .. soapaction .. "\r\n" .. "\r\n" .. envelope; -- write data local bytes, errorcode = socket:write(payload); if (errorcode == 0) then local state, errorcode = socket:read(); if (errorcode == 0) then if (string.len(state or "") > 0) then -- callback if (callback ~= nil) then reponseCallback(callback, state); end -- dispose ... disposeSocket(socket); return true; else fibaro:debug("Error: Invalid response. response length: " .. string.len(state or "")); end else if (retry < 5) then fibaro:debug("retry #"..retry.." action: " .. action.name); return sendSoapMessage(url, service, action, args, callback, (retry + 1)); else fibaro:debug("Error: Code returned "..tostring(errorcode or "")); end end elseif (errorcode == 2) then fibaro:debug("Error: You must check your IP and PORT settings."); else if (retry < 5) then fibaro:debug("retry #"..retry.." action: " .. action.name); return sendSoapMessage(url, service, action, args, callback, (retry + 1)); else fibaro:debug("Error: Code returned "..tostring(errorcode or "")); end end -- dispose ... disposeSocket(socket); -- default response return false; end stop = function() return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "Stop", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID><Speed>1</Speed>", -- callback (options) function(response) fibaro:debug("stop sent"); end); end unMute = function() return sendSoapMessage( -- control url "/MediaRenderer/RenderingControl/Control", -- service type "urn:schemas-upnp-org:service:RenderingControl:1", -- action { name = "SetMute", service = "urn:schemas-upnp-org:service:RenderingControl:1" }, -- soap body data (options) "<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>0</DesiredMute>", -- callback (options) function(response) fibaro:debug("unMute sent"); end); end play = function(duration) return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "Play", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID><Speed>1</Speed>", -- callback (options) function(response) if (duration ~= nil) then fibaro:debug("play sent for " .. duration .. " seconds"); fibaro:sleep(duration); stop(); else fibaro:debug("play sent"); local n = 0; currentTransportState = "TRANSITIONING"; while (currentTransportState == "TRANSITIONING") do if (n > 10) then break end; getTransportState(); fibaro:debug(currentTransportState); fibaro:sleep(5000); n = n + 1; end local i = 0; currentTransportState = "PLAYING"; while (currentTransportState == "PLAYING") do if (i > 10 and PlayUnlimited ~= "Yes") then break end; getTransportState(); fibaro:debug(currentTransportState); fibaro:sleep(2000); i = i + 1; end fibaro:sleep(1000); stop(); end -- update volume with value before tts if different if (ttsVolumeIsDifferent == true) then setVolume(lastVolume); ttsVolumeIsDifferent = false; end end); end sseek = function() return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "Seek", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID>,<Unit>TRACK_NR</Unit>,<Target>1</Target>", -- callback (options) function(response) fibaro:debug("Seek"); end); end que = function() return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "AddURIToQueue", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID>,<EnqueuedURI>file:///jffs/settings/savedqueues.rsq#".. list_nbr.."</EnqueuedURI>,<EnqueuedURIMetaData><DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><item id="SQ:1" parentID="SQ:" restricted="true"><dc:title>".. list_name .."</dc:title><upnp:class>object.container.playlistContainer</upnp:class><desc id="cdudn" nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">RINCON_AssociatedZPUDN</desc></item></DIDL-Lite></EnqueuedURIMetaData>,<DesiredFirstTrackNumberEnqueued>1</DesiredFirstTrackNumberEnqueued>,<EnqueueAsNext>1</EnqueueAsNext>", -- callback (options) function(response) fibaro:debug("que"); end); end setVolume = function(value) return sendSoapMessage( -- control url "/MediaRenderer/RenderingControl/Control", -- service type "urn:schemas-upnp-org:service:RenderingControl:1", -- action { name = "SetVolume", service = "urn:schemas-upnp-org:service:RenderingControl:1" }, -- soap body data (options) "<InstanceID>0</InstanceID><Channel>Master</Channel><DesiredVolume>" .. tostring(value) .. "</DesiredVolume>", -- callback (options) function(response) fibaro:debug("Volume set: " .. value); end); end getVolume = function() fibaro:log("Get volume, please wait..."); return sendSoapMessage( -- control url "/MediaRenderer/RenderingControl/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "GetVolume", service = "urn:schemas-upnp-org:service:RenderingControl:1" }, -- soap body data (options) "<InstanceID>0</InstanceID><Channel>Master</Channel>", -- callback (options) function(response) currentVolume = tonumber(response:match("<CurrentVolume>(.+)</CurrentVolume>") or 0); end); end getTransportState = function() return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "GetTransportInfo", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID>", -- callback (options) function(response) currentTransportState = response:match("<CurrentTransportState>(.+)</CurrentTransportState>") or ""; end); end playFile= function(volume) return sendSoapMessage( -- control url SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI" "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "SetAVTransportURI", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID>,<CurrentURI>x-rincon-queue:"..uid.."#0</CurrentURI>,<CurrentURIMetaData></CurrentURIMetaData>", -- zestawienie playlist -- control url --"/MediaServer/ContentDirectory/Control", -- service type --"urn:schemas-upnp-org:service:ContentDirectory:1", -- action --{ name = "Browse", service = "urn:schemas-upnp-org:service:ContentDirectory:1" }, -- soap body data (options) --"<ObjectID>Q:0</ObjectID>,<BrowseFlag>BrowseDirectChildren</BrowseFlag>,<Filter>dc:title,res,dc:creator,upnp:artist,upnp:album,upnp:albumArtURI</Filter>,<StartingIndex>0</StartingIndex>,<RequestedCount>100</RequestedCount>,<SortCriteria></SortCriteria></u:Browse>", -- callback (options) function(response) -- retrieve current transport state getTransportState(); lastTransportState = currentTransportState; -- unmute before unMute(); -- retrieve volume getVolume(); lastVolume = currentVolume; -- set tts volume if <> with current if (volume ~= nil and volume ~= currentVolume) then setVolume(volume); ttsVolumeIsDifferent = true; end sseek(); play(); end); end clear_last_que(); que(); -- en paramètres: le fichier, puis le volume... playFile(FileVol);
drboss Posté(e) le 21 avril 2017 Signaler Posté(e) le 21 avril 2017 Check if in Your code exist many ", because You need use it only on begin & end of string on LUA level. In string (html) You need use " for " < for < etc... I have this problem when I past code first time to forum. The forum convert html &... to normal character when You not change typ of source. I doing concretion on 28.03, please check this in Your VD or paste this que: que = function() return sendSoapMessage( -- control url "/MediaRenderer/AVTransport/Control", -- service type "urn:schemas-upnp-org:service:AVTransport:1", -- action { name = "AddURIToQueue", service = "urn:schemas-upnp-org:service:AVTransport:1" }, -- soap body data (options) "<InstanceID>0</InstanceID>,<EnqueuedURI>file:///jffs/settings/savedqueues.rsq#"..list_nbr.."</EnqueuedURI>,<EnqueuedURIMetaData><DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><item id="SQ:1" parentID="SQ:" restricted="true"><dc:title>"..list_name.."</dc:title><upnp:class>object.container.playlistContainer</upnp:class><desc id="cdudn" nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">RINCON_AssociatedZPUDN</desc></item></DIDL-Lite></EnqueuedURIMetaData>,<DesiredFirstTrackNumberEnqueued>1</DesiredFirstTrackNumberEnqueued>,<EnqueueAsNext>1</EnqueueAsNext>", -- callback (options) function(response) fibaro:debug("que"); end); end
pepite Posté(e) le 22 avril 2017 Signaler Posté(e) le 22 avril 2017 Le 09/03/2017 à 00:46, drboss a dit : The forum editor when i paste code replace the special character coding by character ex. < with <, " with " etc. I think it's ok for the quote. i search " and @lt ;-) in all code I don't understand what happens Look the debug [DEBUG] 19:05:17: Remove [DEBUG] 19:05:17: que [DEBUG] 19:05:17: unMute sent [DEBUG] 19:05:17: Volume set: 40 [DEBUG] 19:05:17: Seek [DEBUG] 19:05:17: play sent [DEBUG] 19:05:17: STOPPED [DEBUG] 19:05:22: STOPPED Thanks a lot of answering. I feel i will pay spotify ;-)
Lazer Posté(e) le 22 avril 2017 Signaler Posté(e) le 22 avril 2017 Bon bah moi mon Sonos Connect:AMP vient de me faire un truc super bizarre ce soir..... mon réseau ne fonctionnait plus, que ça soit en Ethernet ou Wifi, une vraie catastrophe, 99% de paquets perdus ! Je vais voir les switchs et je vois que tout clignote de partout... hum pas bon Je débranche les switchs un par un pour isoler le problème, en partant de la Freebox. Je fini par isoler le switch qui pose problème. Au début j'ai cru que c'était la HC2 de test branché dessus, mais non ! Je finis donc par débrancher le Sonos, et là tout rentre dans l'ordre. Ensuite je le rebranche, et rebelotte. Alors je reboote le Sonos, et maintenant ça refonctionne. Très étrange, avant de le rebooter j'ai eu le temps de voir qu'il envoyait des broadcast en pagaille sur tout le réseau. C'était le premier bug que j'ai vu sur Sonos, mais par contre il était particulièrement méchant. Heureusement que ça n'est pas arrivé en mon absence, j'aurais été bien incapable d'aider Madame à distance ! 1
drboss Posté(e) le 22 avril 2017 Signaler Posté(e) le 22 avril 2017 Je pense que je avais des la même situation il y a un mois. J'ai perdu beaucoup de temps pour trouver une erreur.Comme je l'ai regardé le journal le problème était dans la table arp. Je ne sais pas pourquoi SONOS parfois mal et stocke l'adresse IP avec l'ARP. Il enregistrer l'adresse MAC de l'appareil normalement et aussi avec le début de 9a: de: d0. ex. 192.168.1.232 b8:e9:37:dd:ab:56 et deziem deuxième 9a: de: d0:dd:ab:56 Je ne l'ai pas eu le temps d'analyser, parce que le réseau entier est bloqué, et a la fin je suis retourné au réseau indépendant SONOS de mon WiFi.
Lazer Posté(e) le 24 avril 2017 Signaler Posté(e) le 24 avril 2017 Mon Connect AMP m'a refait le coup hier. En fait je crois que c'est lié au Play 1 qui est en garage, qui bien que connecté en filaire, n'arrive pas à joindre le Play1 de la chambre, qui lui est en Wifi only. Bref, c'est à double tranchant Sonos, les produits sont supers, mais dès qu'on sort de l'usage prévu par le fabricant, on se rend compte des limitations et c'est la cata..... tient, ça me rappelle une marque pommée....
jojo Posté(e) le 25 avril 2017 Signaler Posté(e) le 25 avril 2017 Ah, ah, ah..... Mon pommier de 2011, fait toujours des envieux /jaloux eu égard à sa rapidité...
Lazer Posté(e) le 25 avril 2017 Signaler Posté(e) le 25 avril 2017 Et tu as une VM Windows pour faire tourner les (nombreux) programmes qui ne tournent pas sur Mac, afin de contourner ses limitations, comme 99% des utilisateurs de Mac que je connais. Bref, je ne voulais pas relancer l'éternel débat, mais les faits sont là : ces produits (Sonos, Apple, et plein d'autres) sont géniaux, simples à utiliser, ergonomiques, performantes, bref tous les qualificatifs que tu veux, tant que tu restes dans les limitations prévues par le fabricant. Dès que tu en sors, ça devient vite très très compliqué. Mon contournement à moi, ça va finir que mes Sonos vont se retrouver en vente si ils ne sont pas capables de fonctionner dans une maison de taille pourtant modeste, parce qu'ils ont besoin de communiquer en Wifi, tout ensemble, si seulement l'un d'entre eux est en Wifi. C'est un peu aberrant. Quand je changerai mon appli, normalement cette année, pour un Yamaha, si la fonctionnalité multiroom Musicast me convient, je basculerai tout dessus, car ça semble aussi complet que Sonos, mais avec un choix de matériel très largement plus grand que chez Sonos. Au lieu de 4 ou 5 références, ils ont des dizaines de produits chez Yamaha. (tient, ça me rappelle encore Apple, quand j'avais tenté de basculer sur Mac, au final ce qui m'avait bloqué c'était le choix limité de matériel, je n'avais rien trouvé qui me convenait, moi qui était habitué au choix infini des PC)
BenjyNet Posté(e) le 25 avril 2017 Signaler Posté(e) le 25 avril 2017 C'est surtout le fireconnect qui est intéressant pour le multiroom... Yamaha ou pas Moi j'avais commencé à tirer du câble audio pour du multiroom filaire depuis l'ampli du salon et finalement je m'aperçois que c'est plus galère qu'autre chose (pas du tout WAF de gérer du multiroom sur un ampli HC).
Lazer Posté(e) le 25 avril 2017 Signaler Posté(e) le 25 avril 2017 Fireconnect, c'est chez Onkyo ? Je n'ai pas la même approche : le but n'est pas de gérer le multiroom depuis l'ampli. Mais puisque je vais basculer sur Yamaha, je vais pouvoir tester leur système Multiroom (appelé Musicast). La gamme d'ampli que je vise gère 2 zones, donc j'aurais déjà de quoi tester un minimum. Si ça fonctionne bien (et ça a l'air d'après les quelques tests sur Internet, leur techno a bien évolué depuis que ça a été lancé il y a 2 ans), alors je pourrais décider de remplacer mes 3 Sonos par des appareils identiques de chez Yamaha... donc pas des amplis HC. Mais au final, ça pourrais me faire une solution unifiée, avec 1 seule appli, ce qui est plus sympa que de multiplier les applis. Et le bonus, c'est que le choix d'appareils chez Yamaha est très largement plus large que chez Sonos (et je ne parle pas des amplis HC, sinon la liste serait presque infinie). En plus, à produit équivalent, Yamaha est moins cher que Sonos (c'est pas difficile, Sonos ce sont les plus chers du marché à ma connaissance, hors produits de luxe)
pepite Posté(e) le 25 avril 2017 Signaler Posté(e) le 25 avril 2017 Ah oui, ca pourrait etre sympa ca, tout derrière un seul ampli pour le multiroom. La seule contraine je trouve, c'est le filaire et la gestion des zones des amplis. Mais me suis jamais penché dessus, juste un questionnement ;-)
Lazer Posté(e) le 25 avril 2017 Signaler Posté(e) le 25 avril 2017 Ah non, justement, c'est tout l'inverse ce que je dis : le multiroom ne peut pas, et ne doit pas dépendre, QUE de l'ampli. Il vaut mieux avec des éléments séparés, je ne suis pas fan des gros amplis à 2k€ qui savent gérer 4 zones, parce que problème de câblage dans toute la maison, l'ampli doit être alimenté pour écouter juste un peu de zik dans la SDB, donc ça consomme un max, l'ampli est énorme et ne rentre pas dans la plupart des meubles de salon, etc Par contre, l'ampli EN PLUS, en complément d'une installation multiroom, et qui s'intègre nativement dedans, là ça commence à être sympa. De ce coté là, Yamaha est le plus avancé grâce à leur large catalogue, Denon n'est pas en reste avec une gamme qui commence à s'étoffer (les enceintes HEOS), mais Onkyo est largement à la traine (je crois qu'ils ont prévu de sortir des enceintes aussi, donc ils s'y mettent). 1
BenjyNet Posté(e) le 25 avril 2017 Signaler Posté(e) le 25 avril 2017 C'est galère à gérer @pepite le mutiroom sur ampli...enfin pour nous pas vraiment mais pour le WAF c'est pas bon du tout. Pour le fireconnect il ne me semble pas que ce soit une techno d'Onkyo, c'est de Blackfire je crois et Pioneer et Onkyo ont des enceintes multiroom pour ça. Je sais pas si Yamaha gère les fichiers HD mais c'est le cas pour le fireconnect avec du 24bits/192kHz. Je reconnais que je connais pas bien Yamaha (je suis plutôt Onkyo/Pioneer - méa culpa )
Lazer Posté(e) le 25 avril 2017 Signaler Posté(e) le 25 avril 2017 Yamaha gère les fichiers Hi-Res, mais perso ce n'est pas un critère de choix, je n'ai quasiment que des MP3. Là où ils étaient en retard, c'était sur les services de streaming, mais ils viennent d'annoncer l'ajout de Deezer et quelques autres, donc maintenant je pense qu'ils sont au même point que Sonos (qui reste la référence) Le Musicast de Yamaha a d'autres avantages, par ex tu peux re-streamer en Bluetooth un flux qu'un élément est en train de lire, donc en fait ça revient à dire que le Bluetooth est bidirectionnel. Et ça, Sonos ne sais pas le faire (de toute façon Sonos ne fait pas de BLuetooth du tout alors comme ça c'est réglé). Mais tu peux aussi restreamer n'importe quel flux vers n'importe quel appareil, ça a l'air assez souple.
Messages recommandés