From 34ca1b46f926dd92d92acdf42fa3467a9f05435e Mon Sep 17 00:00:00 2001
From: Christian Pointner <equinox@helsinki.at>
Date: Tue, 2 Feb 2010 18:57:12 +0000
Subject: added silence watching client


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
-- 
cgit v0.10.2