diff options
-rw-r--r-- | openwrt/rhctl/files/rhctl.config | 7 | ||||
-rw-r--r-- | silence-watch.lua | 96 |
2 files changed, 103 insertions, 0 deletions
diff --git a/openwrt/rhctl/files/rhctl.config b/openwrt/rhctl/files/rhctl.config index 8634637..cf25990 100644 --- a/openwrt/rhctl/files/rhctl.config +++ b/openwrt/rhctl/files/rhctl.config @@ -39,3 +39,10 @@ config 'luaclient' option log 'syslog:3,luaclient-mode-watch,daemon' option command_sock '/var/run/rhctl/switchctl.sock' option lua_file '/usr/share/rhctl/mode-watch.lua' + +config 'luaclient' +# option disabled 1 + option name 'silence-watch' + option log 'syslog:3,luaclient-silence-watch,daemon' + option command_sock '/var/run/rhctl/switchctl.sock' + option lua_file '/usr/share/rhctl/silence-watch.lua' diff --git a/silence-watch.lua b/silence-watch.lua new file mode 100644 index 0000000..c1cea54 --- /dev/null +++ b/silence-watch.lua @@ -0,0 +1,96 @@ +-- +-- rhctl +-- +-- Copyright (C) 2009 Christian Pointner <equinox@spreadspace.org> +-- +-- This file is part of rhctl. +-- +-- rhctl is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- any later version. +-- +-- rhctl is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with rhctl. If not, see <http://www.gnu.org/licenses/>. +-- + +socket = require("socket") + +function send_mail(address, subject, bodytext) + local fp = assert(io.popen("/usr/sbin/mini_sendmail -smailrelay -fnoreply@helsinki.at " .. address, "w")) + + fp:write("Subject: " .. subject .. "\n") + fp:write("To: " .. address .. "\n") + fp:write("\n") + fp:write(bodytext) + fp:write("\n") + fp:close() +end + +current_state = nil + +function process_cmd(message) + log.printf(log.DEBUG, "received message: '%s'", message) + + silence_state = string.match(message, "S0S,(%d)") + + if(silence_state and silence_state ~= current_state) then + if(silence_state == "0") then + log.printf(log.NOTICE, "seen some noise") + send_mail("logs@helsinki.at", "[RHCTL] sees some noise", + "There is some noise at output 1 of the audioswitch\nCurrent State is: " .. message) + else + if (silence_state == "1") then + send_mail("logs@helsinki.at", "[RHCTL] silence detected ", + "Silence detected at output 1 of the audioswitch, make some noise!!\nCurrent State is: " .. message) + end + end + current_state = silence_state + end + + return 0 +end + +function main_loop(opt) + log.printf(log.NOTICE, "main_loop started") + local sig = signal.init() + local cmdfd = cmd.init() + + cmd.send_string("listen silence"); + cmd.send_string("switch *0SS"); + + local return_value = 0 + while return_value == 0 do + local readable, _, err = socket.select({ sig , cmdfd }, nil) + if(err) then + log.printf(log.ERROR, "select returned with error: %s", err) + return_value = -1 + else + for _, input in ipairs(readable) do + if(input == sig) then + return_value = signal.handle() + if(return_value == 1) then break end + else + if(input == cmdfd) then + return_value = cmd.recv_data(process_cmd) + if(return_value ~= 0) then break end + else + log.printf(log.ERROR, "select returned invalid handle??") + return_value = -1 + break; + end + end + end + end + end + + clear_leds() + + signal.stop() + return return_value +end |