diff --git a/acf-app/openpdu-model.lua b/acf-app/openpdu-model.lua index 6c7cfd9..92b0e3c 100755 --- a/acf-app/openpdu-model.lua +++ b/acf-app/openpdu-model.lua @@ -2,86 +2,47 @@ local mymodule = {} posix = require("posix") fs = require("acf.fs") +json = require('cjson') +modelfunctions = require("modelfunctions") -local configpath = "/etc/openpdu/" +local s = modelfunctions.run_executable({"/usr/bin/openpdu", "outlets", "-j"}) +local o = json.decode(s) +local outlets = {} -local config = {} -for i=1,8 do - config[i]={socket=i,status="unknown",description="Socket " .. tostring(i),actions={"on","off"}} +for Index, Value in pairs( o.outlets ) do + if (Value.powerstatus) then + s = "On" + else + s = "Off" + end + outlets[Value.outlet+1] = {outlet=Value.outlet,status=s,description=Value.description,actions={"on","off"}} end -config[1].gpio=1 -config[2].gpio=2 -config[3].gpio=3 -config[4].gpio=7 -config[5].gpio=8 -config[6].gpio=9 -config[7].gpio=11 -config[8].gpio=12 + + + mymodule.status = function() - mymodule.updatestatus() - return cfe({ type="structure", value=config, label="Outlets" }) + return cfe({ type="structure", value=outlets, label="Outlets" }) end -mymodule.updatestatus = function() - for i=1,8 do - f = "/sys/class/gpio/gpio" .. tostring(config[i].gpio) .. "/value" - v = fs.read_file(f) - if (tonumber(v) == 0) then - s = "On" - elseif (tonumber(v) == 1) then - s = "Off" - else - s = "unknown (" .. tostring(v) .. ")" - end - config[i].status = s - end -end - - -mymodule.setpower = function(socket, power, ret) - -- Check to make sure the socket is valid - if (socket == nil) then - ret.errtxt = "Socket cannot be nil" - elseif (not type(socket) == "number") then - ret.errtxt = "Socket must be a number" - elseif (tonumber(socket) < 0) then - ret.errtxt = "Socket must be >0" - elseif (tonumber(socket) > 8) then - ret.errtxt = "Socket must be <=8" - end - - -- If it is, poweron the socket - if (ret.errtxt == nil ) then - f = "/sys/class/gpio/gpio" .. tostring(config[tonumber(socket)].gpio) .. "/value" - if (power == 1) then - ret.descr = "Socket " .. tostring(socket) .. " Powered ON" - p = "0" - else - ret.descr = "Socket " .. tostring(socket) .. " Powered OFF" - p = "1" - end - v = fs.write_file(f, p) - return ret - end - - return ret +mymodule.setpower = function(outlet, power, ret) + return modelfunctions.run_executable({"/usr/bin/openpdu", "setpower", outlet, power}) end mymodule.get_setpower = function(self, clientdata) - local socket = cfe({label="Socket", value=clientdata.socket or ""}) - return cfe({ type="group", label="Set Socket Power state", value={socket=socket} }) + local outlet = cfe({label="Outlet", value=clientdata.outlet or ""}) + return cfe({ type="group", label="Set Outlet Power state", value={outlet=outlet} }) end mymodule.setpoweron = function(self, r) - mymodule.setpower(r.value.socket.value, 1, r) + mymodule.setpower(r.value.outlet.value, 1, r) return r end mymodule.setpoweroff = function(self, r) - mymodule.setpower(r.value.socket.value, 0, r) + mymodule.setpower(r.value.outlet.value, 0, r) return r end diff --git a/acf-app/openpdu-status-html.lsp b/acf-app/openpdu-status-html.lsp index 22914cd..7091010 100755 --- a/acf-app/openpdu-status-html.lsp +++ b/acf-app/openpdu-status-html.lsp @@ -25,7 +25,7 @@ <% local header_level = htmlviewfunctions.displaysectionstart(view, page_info) %> - + <% if viewlibrary.check_permission("edit") or viewlibrary.check_permission("power") then %> @@ -37,18 +37,18 @@ local redir = cfe({type="hidden", value=page_info.orig_action}) for i,item in ipairs(view.value) do %> - + <% if viewlibrary.check_permission("edit") or viewlibrary.check_permission("power") then %> <% end %>
Socket #Outlet # Status Description
<%= html.html_escape(item.socket) %><%= html.html_escape(item.outlet) %> <%= html.html_escape(item.status) %> <%= html.html_escape(item.description) %> - <% local socket = cfe({type="hidden", value=item.socket}) %> + <% local outlet = cfe({type="hidden", value=item.outlet}) %> <% if viewlibrary.check_permission("edit") then - htmlviewfunctions.displayitem(cfe({type="link", value={socket=socket, redir=redir}, label="", option="Edit", action="edit" }), page_info, -1) + htmlviewfunctions.displayitem(cfe({type="link", value={outlet=outlet, redir=redir}, label="", option="Edit", action="edit" }), page_info, -1) end %> <% if viewlibrary.check_permission("poweron") or viewlibrary.check_permission("poweroff") then - htmlviewfunctions.displayitem(cfe({type="form", value={socket=socket, redir=redir}, label="", option="Power ON", action="poweron" }), page_info, -1) - htmlviewfunctions.displayitem(cfe({type="form", value={socket=socket, redir=redir}, label="", option="Power OFF", action="poweroff" }), page_info, -1) + htmlviewfunctions.displayitem(cfe({type="form", value={outlet=outlet, redir=redir}, label="", option="Power ON", action="poweron" }), page_info, -1) + htmlviewfunctions.displayitem(cfe({type="form", value={outlet=outlet, redir=redir}, label="", option="Power OFF", action="poweroff" }), page_info, -1) end %>