This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Check if SONOS queue is empty
#3
Hi David,

I had some spare time and added it to the function:

Code:
-- Set Sonos IP address sonos_ipaddress = '192.168.10.31' -- Function to send commands to Sonos function upnpavcmd(host, port, cmd, param)  local client, soap, reqs, service, res, err  require('socket')  client = socket.tcp()  client:settimeout(3)  -- Try connecting to upnp endpoint  res, err = client:connect(host, port)  if not res then    return nil, err  end  -- Guess service name based on command  if cmd == 'SetVolume' or  cmd == 'GetVolume' or  cmd == 'SetMute' or  cmd == 'GetMute' or  cmd == 'SetBass' or  cmd == 'GetBass' or  cmd == 'SetTreble' or  cmd == 'GetTreble' or  cmd == 'SetLoudness' or  cmd == 'GetLoudness' then    media = 'MediaRenderer'    service = 'RenderingControl'  elseif cmd == 'Browse' then    media = 'MediaServer'    service = 'ContentDirectory'  else    media = 'MediaRenderer'    service = 'AVTransport'  end  -- Soap envelope  soap = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' ..           '<s:Body>' ..             '<u:' .. cmd .. ' xmlns:u="urn:schemas-upnp-org:service:' .. service .. ':1">' ..               '<InstanceID>0</InstanceID>' ..               (param or '') ..             '</u:' .. cmd .. '>' ..           '</s:Body>' ..         '</s:Envelope>'  -- Http request    reqs = 'POST /' .. media .. '/' .. service .. '/Control HTTP/1.1\r\n' ..         'CONNECTION: close\r\n' ..         'HOST: ' .. host .. ':' .. port .. '\r\n' ..         'CONTENT-LENGTH: ' .. soap:len() .. '\r\n' ..         'CONTENT-TYPE: text/xml; charset="utf-8"\r\n' ..         'SOAPACTION: "urn:schemas-upnp-org:service:' .. service .. ':1#' .. cmd .. '"\r\n' ..         '\r\n' .. soap  -- Send http request  res, err = client:send(reqs)  if not res then    return nil, err  end  -- Get reply and close connection  res, err = client:receive('*a')  client:close()  return res, err end -- Get what's in the queue function getQueueContent(ip, port) BrowseConfig = '<ObjectID>Q:0</ObjectID>' ..  '<BrowseFlag>BrowseDirectChildren</BrowseFlag>' ..  '<Filter>*</Filter>' ..  '<StartingIndex>0</StartingIndex>' ..  '<RequestedCount>0</RequestedCount>' ..  '<SortCriteria>*</SortCriteria>'  result,err = upnpavcmd(ip, port, 'Browse', BrowseConfig)  return result,err end -- Command to get queue content and count (<NumberReturned>) queuecontent = getQueueContent(sonos_ipaddress, 1400) for i in string.gmatch(queuecontent, '<NumberReturned.-</NumberReturned>') do  if i ~= nil then    queuecount =  i:match([[<NumberReturned>(.-)</NumberReturned>]])    if queuecount then      queuecount = tonumber(queuecount)    end  end end -- Do action(s) based on number of items inside queue if queuecount > 0 then  -- Put here your normal play action else  -- Put here your URI play action end

BR,

Erwin van der Zwart
Reply


Messages In This Thread
RE: Check if SONOS queue is empty - by Erwin van der Zwart - 26.06.2016, 21:08

Forum Jump: