User Tools

Site Tools


action_http

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Last revision Both sides next revision
action_http [2018/08/11 16:13]
Niek
action_http [2018/08/14 18:15]
Niek Fixed busy state at startup and made DEVICE optional again
Line 11: Line 11:
  
 function M.check(parameters) function M.check(parameters)
- if parameters['​DEVICE'​] ​== nil then + if parameters['​DEVICE'​] ​~= nil then  
- error("​http action requires a \"​DEVICE\"​ statement"​);​ + if #​parameters['​DEVICE'​]['​value'​] ~= 1 or parameters['​DEVICE'​]['​value'​][2] ~= nil then 
- end + error("​http action \"​DEVICE\"​ only takes one argument"​);​ 
-  + end 
- if #​parameters['​DEVICE'​]['​value'​] ~= 1 or parameters['​DEVICE'​]['​value'​][2] ~= nil then + local devname = parameters['​DEVICE'​]['​value'​][1] 
- error("​http action \"​DEVICE\"​ only takes one argument"​);​+ local devobj = pilight.config.device(devname);​ 
 + if devobj == nil then 
 + error("​http action device \""​ .. devname .. "​\"​ does not exist"​);​ 
 + end 
 + if devobj.getLabel == nil or devobj.getColor == nil then 
 + error("​http action device \""​ .. devname .. "​\"​ isn't a generic_label device"​);​ 
 + end 
 + if devobj.getColor() == "​busy"​ then -- reset busy state 
 + local async = pilight.async.thread();​ 
 + local data = async.getUserdata();​ 
 + data['​device'​] = devname; 
 + data['​old_data'​] = devobj.getLabel();​ 
 + data['​new_state'​] = "​ready"​ 
 + async.setCallback("​thread"​);​ 
 + async.trigger();​ 
 + end
  end  end
   
Line 62: Line 77:
  end  end
  end  end
- +
- local dev = nil +
- local nrdev = #​parameters['​DEVICE'​]['​value'​];​ +
- for i = 1, nrdev, 1 do +
- dev = pilight.config.device(parameters['​DEVICE'​]['​value'​][i]);​ +
- if dev == nil then +
- error("​http action device \""​ .. parameters['​DEVICE'​]['​value'​][i] .. "​\"​ does not exist"​);​ +
- end +
- if dev.getLabel == nil or dev.getColor == nil then +
- error("​http action device \""​ .. parameters['​DEVICE'​]['​value'​][i] .. "​\"​ isn't a generic_label device"​);​ +
- end +
- end +
  return 1;  return 1;
 end end
Line 80: Line 83:
 function M.callback(http) ​ function M.callback(http) ​
  local data = http.getUserdata();​  local data = http.getUserdata();​
- local devname = data['​device'​];​ + if data['​device'​] ~= nil then 
- local devobj = pilight.config.device(devname);​+ local devname = data['​device'​];​ 
 + local devobj = pilight.config.device(devname);​ 
 + local info = "​code="​ .. tostring(http.getCode()) .. "&​size="​ .. tostring(http.getSize()) 
 + if string.len(http.getMimetype()) > 0 then 
 + info = info .."&​mimetype="​ .. http.getMimetype() 
 + end 
 + if devobj.setColor(info) == false then 
 + error("​http action device \""​ .. devname .. "​\"​ color could not be set to  \""​ .. info .. "​\""​) 
 + end 
 + if devobj.setLabel(http.getData()) == false then 
 + error("​http action device \""​ .. devname .. "​\"​ label could not be set to  \""​ .. http.getData() .. "​\""​) 
 + end
  
- local info = "​code="​ .. tostring(http.getCode()) .. "&​size="​ .. tostring(http.getSize()) + devobj.send(); 
- if string.len(http.getMimetype()) > 0 then + end 
- info = info .."&​mimetype="​ .. http.getMimetype() +
- end +
-  +
- if devobj.setColor(info) == false then +
- error("​http action device \""​ .. devname .. "​\"​ color could not be set to  \""​ .. info .. "​\""​+
- end +
- if devobj.setLabel(http.getData()) == false then +
- error("​http action device \""​ .. devname .. "​\"​ label could not be set to  \""​ .. http.getData() .. "​\""​) +
- end +
- +
- devobj.send();​+
  
 + if http.getCode() == 200 then
 + error("​http action calling ".. http.getUrl() .. " succeeded, received \""​ .. http.getData() .. "​\""​);​
 + else
 + error("​http action calling ".. http.getUrl() .. " failed with code " .. tostring(http.getCode()));​
 + end
 end end
  
-function M.thread(thread) -- set color to "​busy"​, preserve old data+function M.thread(thread) -- only set color to new state, preserve old data
  local data = thread.getUserdata();​  local data = thread.getUserdata();​
  local devname = data['​device'​];​  local devname = data['​device'​];​
  local devobj = pilight.config.device(devname);​  local devobj = pilight.config.device(devname);​
  
- if devobj.setColor("​busy"​) == false then + if devobj.setColor(data['​new_state'​]) == false then 
- error("​http action device \""​ .. devname .. "​\"​ color could not be set to \"busy\""​)+ error("​http action device \""​ .. devname .. "​\"​ color could not be set to \" ​.. data['​new_state'​].. ​\""​)
  end  end
  
Line 138: Line 146:
  data['​device'​] = devname;  data['​device'​] = devname;
  data['​old_data'​] = old_data;  data['​old_data'​] = old_data;
 + data['​new_state'​] = "​busy"​
  
  async.setCallback("​thread"​);​  async.setCallback("​thread"​);​
Line 166: Line 175:
  return {  return {
  name = "​http",​  name = "​http",​
- version = "0.2",+ version = "0.3",
  reqversion = "​8.1.1",​  reqversion = "​8.1.1",​
  reqcommit = "​0"​  reqcommit = "​0"​
Line 172: Line 181:
 end end
  
-return M;</​file>​+return M; 
 +</​file>​
action_http.txt · Last modified: 2018/08/15 14:28 by Niek