LogicMachine Forum
Reboot Chromecast - Printable Version

+- LogicMachine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: Reboot Chromecast (/showthread.php?tid=955)



Reboot Chromecast - BjornHBrudeli - 23.08.2017

Hi,
I'm struggling with controlling a Chromecast from LM. I'm using  this script provided by Erwin:
Code:
-- ****** Control Chromecast with 1 byte object version 1.0 created by Erwin van der Zwart ******* -- -- **************************************** SET PARAMETERS *************************************** -- -- Chromecast IP address ip_chromecast = '192.168.10.23' -- Additional info from browser about -- http://192.168.10.23:8008/ssdp/device-desc.xml -- http://192.168.10.23:8008/setup/scan_results -- http://192.168.10.23:8008/setup/eureka_info?options=detail -- http://192.168.10.23:8008/setup/supported_timezones -- http://geeknizer.com/how-chromecast-works-chromecast-protocol-explained/ value = event.getvalue() require 'socket.http' function control_chromecast(uri, request)  local request_body = request  local response_body = { }  local res, code, response_headers = socket.http.request  {    url = "http://" .. ip_chromecast .. ":8008/" .. uri;    method = "POST";    headers =    {      ["Content-Type"] = "application/x-www-form-urlencoded";      ["Content-Length"] = #request_body;    };    source = ltn12.source.string(request_body);    sink = ltn12.sink.table(response_body);  }  return res, code, response_headers end -- Action on value 1 if value == 1 then     -- Start Youtube video     res, code, response_headers = control_chromecast('apps/YouTube', [[v=_iuBO1lkch8]]) end -- Action on value 2 if value == 2 then     -- Stop Youtube video     res, code, response_headers = control_chromecast('apps/YouTube', [[DELETE]]) end -- Action on value 3 if value == 3 then     -- Start Chromecast Homescreen     res, code, response_headers = control_chromecast('apps/ChromeCast', [[]]) end -- Log results resulthandling = false if resulthandling == true then  -- Handler for results  log("Status:", res and "OK" or "FAILED")  log("HTTP code:", code)  log("Response headers:")  if type(response_headers) == "table" then    for k, v in pairs(response_headers) do      log(k, ":", v)    end  else    -- Would be nil, if there is an error    log("Not a table:", type(response_headers))  end  log("Response body:")  if type(response_body) == "table" then    log(table.concat(response_body))  else  end end
Action value 1 and 2 does work. Value 3 gives an error 404 on the tv screen.

From my windows command line I can reboot the chromecast by doing this:
curl -Lv -H Content-Type:application/json http://192.168.22.99:8008/setup/reboot  -d "{""params"":""now""}" 

and start youtube with this:
curl -Lv -H Content-Type:application/json http://192.168.22.99:8008/apps/YouTube -d v=_iuBO1lkch8



I would like to do a reboot and get the homescreen/screensaver running from the LM.

I've added:

Code:
-- Action on value 4 if value == 4 then  -- Reboot Chromecast  res, code, response_headers = control_chromecast('setup/reboot', [[{params=now}]] ) end

But the response is 400 bad request (from Wireshark). I've tried changing the parameters to "{""params"":""now""}", [["{""params"":""now""}" ]] and all possible variations in between. I'm out of clue.

Would anyone help me?

Best regards
Bjorn


RE: Reboot Chromecast - BjornHBrudeli - 23.08.2017

I just needed to post here before I saw what I had to do:

This script reboots the Chromecast:

Code:
require'socket.http' response_body = {} request_body = [[{"params":"now"}]] socket.http.request{  url = "http://192.168.22.99:8008/setup/reboot";    method = "POST";    headers = {    ["Content-Type"] = "application/json";         ["Content-Length"] = string.len(request_body)     };     source = ltn12.source.string(request_body);     sink = ltn12.sink.table(response_body); }
 
I still cant force the screensaver back though.