From 4ee2501ff864b8e15202ee814e8bafcc0c2adf6c Mon Sep 17 00:00:00 2001
From: Christian Pointner <equinox@realraum.at>
Date: Tue, 24 Feb 2015 02:32:10 +0000
Subject: [PATCH] moved raspberry and router gpio to pi_as_powerwitch on
 github

---
 raspberrypi_gpio_relay_licht/index.html          |  218 --------------
 raspberrypi_gpio_relay_licht/indexz.html         |  218 --------------
 raspberrypi_gpio_relay_licht/move_lights.sh      |    2 -
 raspberrypi_gpio_relay_licht/rc.local            |   41 ---
 raspberrypi_gpio_relay_licht/realraumsimpel.png  |  Bin 10572 -> 0 bytes
 raspberrypi_gpio_relay_licht/realraumsimpelz.png |  Bin 17426 -> 0 bytes
 raspberrypi_gpio_relay_licht/stuff.py            |  348 ----------------------
 raspberrypi_gpio_relay_licht/style.css           |   70 -----
 raspberrypi_gpio_relay_licht/stylez.css          |   70 -----
 raspberrypi_gpio_relay_licht/switch.html         |    5 -
 router_gpio_relay_licht/mswitch.cgi              |   60 ----
 router_gpio_relay_licht/rc.local                 |   14 -
 router_gpio_relay_licht/switch.cgi               |  248 ---------------
 13 files changed, 1294 deletions(-)
 delete mode 100644 raspberrypi_gpio_relay_licht/index.html
 delete mode 100755 raspberrypi_gpio_relay_licht/indexz.html
 delete mode 100644 raspberrypi_gpio_relay_licht/move_lights.sh
 delete mode 100644 raspberrypi_gpio_relay_licht/rc.local
 delete mode 100755 raspberrypi_gpio_relay_licht/realraumsimpel.png
 delete mode 100755 raspberrypi_gpio_relay_licht/realraumsimpelz.png
 delete mode 100755 raspberrypi_gpio_relay_licht/stuff.py
 delete mode 100755 raspberrypi_gpio_relay_licht/style.css
 delete mode 100755 raspberrypi_gpio_relay_licht/stylez.css
 delete mode 100644 raspberrypi_gpio_relay_licht/switch.html
 delete mode 100755 router_gpio_relay_licht/mswitch.cgi
 delete mode 100644 router_gpio_relay_licht/rc.local
 delete mode 100755 router_gpio_relay_licht/switch.cgi

diff --git a/raspberrypi_gpio_relay_licht/index.html b/raspberrypi_gpio_relay_licht/index.html
deleted file mode 100644
index 55f7c1b..0000000
--- a/raspberrypi_gpio_relay_licht/index.html
+++ /dev/null
@@ -1,218 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" type="text/css" href="style.css">
-</head>
-
-
-
-<script type="text/javascript">
-
-   var pc1_state=false;
-   var pc2_state=false;
-   var pc3_state=false;
-   var pc4_state=false;
-   var pc5_state=false;
-   var pc6_state=false;
-
-function callBackButtons(req)
-{
-	if(req.status != 200)
-	{
-		return;
-	}
-
-
-	var data = JSON.parse(req.responseText);
-
-		if(data['ceiling1']==true)
-		{
-			pc1_state=true;
-			document.getElementById("pc1").style.background="green";
-		}
-		else 
-		{
-			pc1_state=false;
-			document.getElementById("pc1").style.background="red";
-		}
-		
-
-                if(data['ceiling2']==true)
-                {
-                        pc2_state=true;
-                        document.getElementById("pc2").style.background="green";
-                }
-                else 
-                {
-                        pc2_state=false;
-                        document.getElementById("pc2").style.background="red";
-                }
-		
-                if(data['ceiling3']==true)
-                {
-                        pc3_state=true;
-                        document.getElementById("pc3").style.background="green";
-                }
-                else 
-                {
-                        pc3_state=false;
-                        document.getElementById("pc3").style.background="red";
-                }
-		
-
-                if(data['ceiling4']==true)
-                {
-                        pc4_state=true;
-                        document.getElementById("pc4").style.background="green";
-                }
-                else 
-                {
-                        pc4_state=false;
-                        document.getElementById("pc4").style.background="red";
-                }
-
-
-                if(data['ceiling5']==true)
-                {
-                        pc5_state=true;
-                        document.getElementById("pc5").style.background="green";
-                }
-                else 
-                {
-                        pc5_state=false;
-                        document.getElementById("pc5").style.background="red";
-                }
-
-                if(data['ceiling6']==true)
-                {
-                        pc6_state=true;
-                        document.getElementById("pc6").style.background="green";
-                }
-                else 
-                {
-                        pc6_state=false;
-                        document.getElementById("pc6").style.background="red";
-                }
-}
-
-function updateButtons(uri) {
-  var req = new XMLHttpRequest;
-  req.overrideMimeType("application/json");
-  req.open("GET", uri, true);
-  req.onload  = function() {callBackButtons(req)};
-  req.setRequestHeader("googlechromefix","");
-  req.send(null);
-}
-function sendMultiButton( str ) {
- url = "/cgi-bin/mswitch.cgi?"+str;
-  updateButtons(url);
-}
-
-
-//function pc(n) switches light n
-
-function pc1()
-{
-	if(pc1_state===true)
-        {
-	   pc1_state=false;
-	   sendMultiButton("ceiling1=0")
-	   document.getElementById("pc1").style.background="red";
-	}	
- 	else
-	{
-	   pc1_state=true;
-	   sendMultiButton("ceiling1=1")
-           document.getElementById("pc1").style.background="green";
-	}
-}
-function pc2()
-{
-	if(pc2_state===true)
-        {
-	   pc2_state=false;
-           sendMultiButton("ceiling2=0")		
-	   document.getElementById("pc2").style.background="red";
-	}	
- 	else
-	{
-	   pc2_state=true;
-	   sendMultiButton("ceiling2=1")	
-           document.getElementById("pc2").style.background="green";
-	}
-}
-function pc3()
-{
-	if(pc3_state===true)
-        {
-	   pc3_state=false;
-	   sendMultiButton("ceiling3=0")	
-	   document.getElementById("pc3").style.background="red";
-	}	
- 	else
-	{
-	   pc3_state=true;
-	   sendMultiButton("ceiling3=1")
-           document.getElementById("pc3").style.background="green";
-	}
-}
-function pc4()
-{
-	if(pc4_state===true)
-        {
-	   pc4_state=false;
-	   sendMultiButton("ceiling4=0")
-	   document.getElementById("pc4").style.background="red";
-	}	
- 	else
-	{
-	   pc4_state=true;
-	   sendMultiButton("ceiling4=1")
-           document.getElementById("pc4").style.background="green";
-	}
-}
-function pc5()
-{
-	if(pc5_state===true)
-        {
-	   pc5_state=false;
-	   sendMultiButton("ceiling5=0")
-	   document.getElementById("pc5").style.background="red";
-	}	
- 	else
-	{
-	   pc5_state=true;
-	   sendMultiButton("ceiling5=1")
-           document.getElementById("pc5").style.background="green";
-	}
-}
-
-function pc6()
-{
-	if(pc6_state===true)
-        {
-	   pc6_state=false;
-	   sendMultiButton("ceiling6=0")
-	   document.getElementById("pc6").style.background="red";
-	}	
- 	else
-	{
-	   pc6_state=true;
-	   sendMultiButton("ceiling6=1")
-           document.getElementById("pc6").style.background="green";
-	}
-}
-
-setInterval("updateButtons('/cgi-bin/mswitch.cgi');", 30*100 );
-updateButtons("/cgi-bin/mswitch.cgi");
-</script>
-
-<body>
-<div style="position:absolute; top:640px;"><a href="switch.html">Link to ALL switches</a></div>
-<div class="pc1" id="pc1" onclick="pc1()"></div>
-<div class="pc2" id="pc2" onclick="pc2()"></div>
-<div class="pc3" id="pc3" onclick="pc3()"></div>
-<div class="pc4" id="pc4" onclick="pc4()"></div>
-<div class="pc5" id="pc5" onclick="pc5()"></div>
-<div class="pc6" id="pc6" onclick="pc6()"></div>
-</body>
-</html>
diff --git a/raspberrypi_gpio_relay_licht/indexz.html b/raspberrypi_gpio_relay_licht/indexz.html
deleted file mode 100755
index fa03ef3..0000000
--- a/raspberrypi_gpio_relay_licht/indexz.html
+++ /dev/null
@@ -1,218 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" type="text/css" href="stylez.css">
-</head>
-
-
-
-<script type="text/javascript">
-
-   var pc1_state=false;
-   var pc2_state=false;
-   var pc3_state=false;
-   var pc4_state=false;
-   var pc5_state=false;
-   var pc6_state=false;
-
-function callBackButtons(req)
-{
-	if(req.status != 200)
-	{
-		return;
-	}
-
-
-	var data = JSON.parse(req.responseText);
-
-		if(data['ceiling1']==true)
-		{
-			pc1_state=true;
-			document.getElementById("pc1").style.background="green";
-		}
-		else 
-		{
-			pc1_state=false;
-			document.getElementById("pc1").style.background="red";
-		}
-		
-
-                if(data['ceiling2']==true)
-                {
-                        pc2_state=true;
-                        document.getElementById("pc2").style.background="green";
-                }
-                else 
-                {
-                        pc2_state=false;
-                        document.getElementById("pc2").style.background="red";
-                }
-		
-                if(data['ceiling3']==true)
-                {
-                        pc3_state=true;
-                        document.getElementById("pc3").style.background="green";
-                }
-                else 
-                {
-                        pc3_state=false;
-                        document.getElementById("pc3").style.background="red";
-                }
-		
-
-                if(data['ceiling4']==true)
-                {
-                        pc4_state=true;
-                        document.getElementById("pc4").style.background="green";
-                }
-                else 
-                {
-                        pc4_state=false;
-                        document.getElementById("pc4").style.background="red";
-                }
-
-
-                if(data['ceiling5']==true)
-                {
-                        pc5_state=true;
-                        document.getElementById("pc5").style.background="green";
-                }
-                else 
-                {
-                        pc5_state=false;
-                        document.getElementById("pc5").style.background="red";
-                }
-
-                if(data['ceiling6']==true)
-                {
-                        pc6_state=true;
-                        document.getElementById("pc6").style.background="green";
-                }
-                else 
-                {
-                        pc6_state=false;
-                        document.getElementById("pc6").style.background="red";
-                }
-}
-
-function updateButtons(uri) {
-  var req = new XMLHttpRequest;
-  req.overrideMimeType("application/json");
-  req.open("GET", uri, true);
-  req.onload  = function() {callBackButtons(req)};
-  req.setRequestHeader("googlechromefix","");
-  req.send(null);
-}
-function sendMultiButton( str ) {
- url = "/cgi-bin/mswitch.cgi?"+str;
-  updateButtons(url);
-}
-
-
-//function pc(n) switches light n
-
-function pc1()
-{
-	if(pc1_state===true)
-        {
-	   pc1_state=false;
-	   sendMultiButton("ceiling1=0")
-	   document.getElementById("pc1").style.background="red";
-	}	
- 	else
-	{
-	   pc1_state=true;
-	   sendMultiButton("ceiling1=1")
-           document.getElementById("pc1").style.background="green";
-	}
-}
-function pc2()
-{
-	if(pc2_state===true)
-        {
-	   pc2_state=false;
-           sendMultiButton("ceiling2=0")		
-	   document.getElementById("pc2").style.background="red";
-	}	
- 	else
-	{
-	   pc2_state=true;
-	   sendMultiButton("ceiling2=1")	
-           document.getElementById("pc2").style.background="green";
-	}
-}
-function pc3()
-{
-	if(pc3_state===true)
-        {
-	   pc3_state=false;
-	   sendMultiButton("ceiling3=0")	
-	   document.getElementById("pc3").style.background="red";
-	}	
- 	else
-	{
-	   pc3_state=true;
-	   sendMultiButton("ceiling3=1")
-           document.getElementById("pc3").style.background="green";
-	}
-}
-function pc4()
-{
-	if(pc4_state===true)
-        {
-	   pc4_state=false;
-	   sendMultiButton("ceiling4=0")
-	   document.getElementById("pc4").style.background="red";
-	}	
- 	else
-	{
-	   pc4_state=true;
-	   sendMultiButton("ceiling4=1")
-           document.getElementById("pc4").style.background="green";
-	}
-}
-function pc5()
-{
-	if(pc5_state===true)
-        {
-	   pc5_state=false;
-	   sendMultiButton("ceiling5=0")
-	   document.getElementById("pc5").style.background="red";
-	}	
- 	else
-	{
-	   pc5_state=true;
-	   sendMultiButton("ceiling5=1")
-           document.getElementById("pc5").style.background="green";
-	}
-}
-
-function pc6()
-{
-	if(pc6_state===true)
-        {
-	   pc6_state=false;
-	   sendMultiButton("ceiling6=0")
-	   document.getElementById("pc6").style.background="red";
-	}	
- 	else
-	{
-	   pc6_state=true;
-	   sendMultiButton("ceiling6=1")
-           document.getElementById("pc6").style.background="green";
-	}
-}
-
-setInterval("updateButtons('/cgi-bin/mswitch.cgi');", 30*100 );
-updateButtons("/cgi-bin/mswitch.cgi");
-</script>
-
-<body>
-<div class="pc1" id="pc1" onclick="pc1()"></div>
-<div class="pc2" id="pc2" onclick="pc2()"></div>
-<div class="pc3" id="pc3" onclick="pc3()"></div>
-<div class="pc4" id="pc4" onclick="pc4()"></div>
-<div class="pc5" id="pc5" onclick="pc5()"></div>
-<div class="pc6" id="pc6" onclick="pc6()"></div>
-
-</body>
-</html>
diff --git a/raspberrypi_gpio_relay_licht/move_lights.sh b/raspberrypi_gpio_relay_licht/move_lights.sh
deleted file mode 100644
index cf7b075..0000000
--- a/raspberrypi_gpio_relay_licht/move_lights.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-curl 'http://licht.realraum.at/cgi-bin/mswitch.cgi?ceiling1=1&ceiling2=0&ceiling3=0&ceiling4=0&ceiling5=0&ceiling6=0'; sleep 3; curl 'http://licht.realraum.at/cgi-bin/mswitch.cgi?ceiling1=1&ceiling2=1&ceiling3=0&ceiling4=0&ceiling5=0&ceiling6=0'; sleep 3; curl 'http://licht.realraum.at/cgi-bin/mswitch.cgi?ceiling1=0&ceiling2=1&ceiling3=0&ceiling4=1&ceiling5=0&ceiling6=0'; sleep 3; curl 'http://licht.realraum.at/cgi-bin/mswitch.cgi?ceiling1=0&ceiling2=0&ceiling3=1&ceiling4=1&ceiling5=0&ceiling6=0'; sleep 3; curl 'http://licht.realraum.at/cgi-bin/mswitch.cgi?ceiling1=0&ceiling2=0&ceiling3=1&ceiling4=0&ceiling5=1&ceiling6=0'; sleep 3; curl 'http://licht.realraum.at/cgi-bin/mswitch.cgi?ceiling1=0&ceiling2=0&ceiling3=0&ceiling4=0&ceiling5=1&ceiling6=1'; sleep 3; curl 'http://licht.realraum.at/cgi-bin/mswitch.cgi?ceiling1=0&ceiling2=0&ceiling3=0&ceiling4=0&ceiling5=0&ceiling6=1'; sleep 3; curl 'http://licht.realraum.at/cgi-bin/mswitch.cgi?ceiling1=0&ceiling2=0&ceiling3=0&ceiling4=0&ceiling5=0&ceiling6=0';
diff --git a/raspberrypi_gpio_relay_licht/rc.local b/raspberrypi_gpio_relay_licht/rc.local
deleted file mode 100644
index 33672c7..0000000
--- a/raspberrypi_gpio_relay_licht/rc.local
+++ /dev/null
@@ -1,41 +0,0 @@
-#! /bin/sh
-### BEGIN INIT INFO
-# Provides:          rc.local
-# Required-Start:    $all
-# Required-Stop:
-# Default-Start:     2 3 4 5
-# Default-Stop:
-# Short-Description: Run /etc/rc.local if it exist
-### END INIT INFO
-
-
-PATH=/sbin:/usr/sbin:/bin:/usr/bin
-
-. /lib/init/vars.sh
-. /lib/lsb/init-functions
-
-do_start() {
-	if [ -x /etc/rc.local ]; then
-	        [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)"
-		/etc/rc.local
-		ES=$?
-		[ "$VERBOSE" != no ] && log_end_msg $ES
-		return $ES
-	fi
-}
-
-case "$1" in
-    start)
-	do_start
-        ;;
-    restart|reload|force-reload)
-        echo "Error: argument '$1' not supported" >&2
-        exit 3
-        ;;
-    stop)
-        ;;
-    *)
-        echo "Usage: $0 start|stop" >&2
-        exit 3
-        ;;
-esac
diff --git a/raspberrypi_gpio_relay_licht/realraumsimpel.png b/raspberrypi_gpio_relay_licht/realraumsimpel.png
deleted file mode 100755
index 0b9cbb1507d619a1a7806177fb2994ac3bfa5135..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10572
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
V3MXsqK@39_WmRwI{`T;X{{lCj?Z^NC

diff --git a/raspberrypi_gpio_relay_licht/realraumsimpelz.png b/raspberrypi_gpio_relay_licht/realraumsimpelz.png
deleted file mode 100755
index 38e29040c48ede1d3f3e0f5ce579f332d0d21561..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17426
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

diff --git a/raspberrypi_gpio_relay_licht/stuff.py b/raspberrypi_gpio_relay_licht/stuff.py
deleted file mode 100755
index 689c345..0000000
--- a/raspberrypi_gpio_relay_licht/stuff.py
+++ /dev/null
@@ -1,348 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-import os
-import os.path
-import sys
-#import threading
-import logging
-import logging.handlers
-import time
-import signal
-import subprocess
-import types
-import ConfigParser
-import traceback
-import random
-import zmq
-import zmq.utils.jsonapi as json
-import urllib
-import ephem
-
-logger = logging.getLogger()
-logger.setLevel(logging.INFO)
-lh_syslog = logging.handlers.SysLogHandler(address="/dev/log",facility=logging.handlers.SysLogHandler.LOG_LOCAL2)
-lh_syslog.setFormatter(logging.Formatter('play-sound-status.py: %(levelname)s %(message)s'))
-logger.addHandler(lh_syslog)
-lh_stderr = logging.StreamHandler()
-logger.addHandler(lh_stderr)
-
-def isTheSunDown():
-    ephemobs=ephem.Observer()
-    ephemobs.lat='47.06'
-    ephemobs.lon='15.45'
-    ephemsun=ephem.Sun()
-    ephemsun.compute()
-    return ephemobs.date > ephemobs.previous_setting(ephemsun) and ephemobs.date < ephemobs.next_rising(ephemsun)
-
-
-class UWSConfig:
-  def __init__(self,configfile=None):
-    self.configfile=configfile
-    self.config_parser=ConfigParser.ConfigParser()
-    #make option variable names case sensitive
-    self.config_parser.optionxform = str
-    self.config_parser.add_section('debug')
-    self.config_parser.set('debug','enabled',"False")
-    self.config_parser.add_section('broker')
-    self.config_parser.set('broker','uri',"tcp://torwaechter.realraum.at:4244")    
-    self.config_parser.add_section('tracker')
-    self.config_parser.set('tracker','secs_movement_before_presence_to_launch_event','1')
-    self.config_parser.set('tracker','secs_presence_before_movement_to_launch_event','120')
-    self.config_mtime=0
-    if not self.configfile is None:
-      try:
-        cf_handle = open(self.configfile,"r")
-        cf_handle.close()
-      except IOError:
-        self.writeConfigFile()
-      else:
-        self.checkConfigUpdates()
-
-  def checkConfigUpdates(self):
-    global logger
-    if self.configfile is None:
-      return
-    logging.debug("Checking Configfile mtime: "+self.configfile)
-    try:
-      mtime = os.path.getmtime(self.configfile)
-    except (IOError,OSError):
-      return
-    if self.config_mtime < mtime:
-      logging.debug("Reading Configfile")
-      try:
-        self.config_parser.read(self.configfile)
-        self.config_mtime=os.path.getmtime(self.configfile)
-      except (ConfigParser.ParsingError, IOError), pe_ex:
-        logging.error("Error parsing Configfile: "+str(pe_ex))
-      if self.config_parser.get('debug','enabled') == "True":
-        logger.setLevel(logging.DEBUG)
-      else:
-        logger.setLevel(logging.INFO)
-
-  def writeConfigFile(self):
-    if self.configfile is None:
-      return
-    logging.debug("Writing Configfile "+self.configfile)
-    try:
-      cf_handle = open(self.configfile,"w")
-      self.config_parser.write(cf_handle)
-      cf_handle.close()
-      self.config_mtime=os.path.getmtime(self.configfile)
-    except IOError, io_ex:
-      logging.error("Error writing Configfile: "+str(io_ex))
-      self.configfile=None
-
-  def getValue(self, name):
-    underscore_pos=name.find('_')
-    if underscore_pos < 0:
-      raise AttributeError
-    return self.getSectionValue(name[0:underscore_pos], name[underscore_pos+1:])
-
-  def getSectionValue(self, section, name):
-    try:
-      return self.config_parser.get(section,name)
-    except (ConfigParser.NoOptionError, ConfigParser.NoSectionError):
-      return None
-
-  def __getattr__(self, name):
-    underscore_pos=name.find('_')
-    if underscore_pos < 0:
-      raise AttributeError
-    try:
-      return self.config_parser.get(name[0:underscore_pos], name[underscore_pos+1:])
-    except (ConfigParser.NoOptionError, ConfigParser.NoSectionError):
-      raise AttributeError
-
-
-def runRandomAction(action_list,user,args=[]):
-  if not type(action_list) == types.ListType:
-    raise ValueError("runRandomAction: action_list must be a list")
-  return executeAction(random.choice(action_list),user,args)
-
-def runRemoteCommand(remote_host,remote_shell,user,args=[]):
-  global sshp,uwscfg
-  sshp = None
-  try:
-    cmd = "ssh -i /flash/tuer/id_rsa -o PasswordAuthentication=no -o StrictHostKeyChecking=no %RHOST% %RSHELL%"
-    cmd = cmd.replace("%RHOST%",remote_host).replace("%RSHELL%",remote_shell).replace("%ARG%", " ".join(args)).replace("%USER%", user)
-    logging.debug("runRemoteCommand: Executing: "+cmd)
-    sshp = subprocess.Popen(cmd.split(" "), bufsize=1024, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False)
-    logging.debug("runRemoteCommand: pid %d: running=%d" % (sshp.pid,sshp.poll() is None))
-    if not sshp.poll() is None:
-      logging.error("runRemoteCommand: subprocess %d not started ?, returncode: %d" % (sshp.pid,sshp.returncode))
-      return False
-    return True
-  except Exception, ex:
-    logging.error("runRemoteCommand: "+str(ex))
-    traceback.print_exc(file=sys.stdout)
-    if not sshp is None and sshp.poll() is None:
-      if sys.hexversion >= 0x020600F0:
-        sshp.terminate()
-      else:
-        subprocess.call(["kill",str(sshp.pid)])
-      time.sleep(1.5)
-      if sshp.poll() is None:
-        logging.error("runRemoteCommand: subprocess still alive, sending SIGKILL to pid %d" % (sshp.pid))
-        if sys.hexversion >= 0x020600F0:
-          sshp.kill()
-        else:
-          subprocess.call(["kill","-9",str(sshp.pid)])
-    time.sleep(5)
-    return False
-
-def runShellCommand(cmd,ptimeout,stdinput,user,args=[]):
-  global uwscfg
-  cmd = cmd.replace("%ARG%"," ".join(args)).replace("%USER%", user)
-  if ptimeout is None or float(ptimeout) > 45:
-    ptimeout = 45
-  else:
-    ptimeout = int(float(ptimeout))
-  popenTimeout2(cmd,stdinput,ptimeout=ptimeout)
-
-def executeAction(action_name, user, args=[]):
-  if action_name is None:
-    logging.error("executeAction: action_name is None")
-    return False
-  action_type = uwscfg.getValue(action_name+"_type")
-  if action_type is None:
-    logging.error("executeAction: action %s not found or has no type" % action_name)
-    return False
-  action_delay=uwscfg.getValue(action_name+"_delay")
-  logging.info("executeAction %s of type %s for user %s with delay %s" % (action_name,action_type,user,action_delay))
-  if not action_delay is None:
-    time.sleep(float(action_delay))
-
-  action_arg = uwscfg.getValue(action_name+"_arg")
-  if not action_arg is None:
-    args += [action_arg]
-
-  #"registered" actions
-  if action_type == "remotecmd":
-    return runRemoteCommand(uwscfg.getSectionValue(action_name,"remote_host"), uwscfg.getSectionValue(action_name,"remote_shell"), user=user, args=args)
-  elif action_type == "shellcmd":
-    return runShellCommand(cmd=uwscfg.getSectionValue(action_name,"cmd"), ptimeout=uwscfg.getSectionValue(action_name,"timeout"), stdinput=uwscfg.getSectionValue(action_name,"stdinput"), user=user, args=args)
-  elif action_type == "nothing":
-    return True
-  elif action_type == "random":
-    return runRandomAction(action_list=uwscfg.getSectionValue(action_name,"one_of").split(" "),user=user,args=args)
-  else:
-    return executeAction(action_type,user=user,args=args)
-
-def playThemeOf(user,fallback_default):
-  global uwscfg
-  uwscfg.checkConfigUpdates()
-  if user is None:
-    user = ""
-  config=uwscfg.getValue("mapping_"+str(user))
-  if config is None:
-    config=uwscfg.getValue("mapping_"+str(fallback_default))
-  logging.debug("playThemeOf: action for user %s: %s" % (user,config))
-  executeAction(config,user,[])
-
-def popenTimeout1(cmd, pinput, returncode_ok=[0], ptimeout = 20.0, pcheckint = 0.25):
-  logging.debug("popenTimeout1: starting: " + cmd)
-  try:
-    sppoo = subprocess.Popen(cmd, stdin=subprocess.PIPE, shell=True)
-    sppoo.communicate(input=pinput)
-    timeout_counter=ptimeout
-    while timeout_counter > 0:
-      time.sleep(pcheckint)
-      timeout_counter -= pcheckint
-      if not sppoo.poll() is None:
-        logging.debug("popenTimeout1: subprocess %d finished, returncode: %d" % (sppoo.pid,sppoo.returncode))
-        return (sppoo.returncode in returncode_ok)
-    #timeout reached
-    logging.error("popenTimeout1: subprocess took too long (>%fs), sending SIGTERM to pid %d" % (ptimeout,sppoo.pid))
-    if sys.hexversion >= 0x020600F0:
-      sppoo.terminate()
-    else:
-      subprocess.call(["kill",str(sppoo.pid)])
-    time.sleep(1.0)
-    if sppoo.poll() is None:
-      logging.error("popenTimeout1: subprocess still alive, sending SIGKILL to pid %d" % (sppoo.pid))
-      if sys.hexversion >= 0x020600F0:
-        sppoo.kill()
-      else:
-        subprocess.call(["kill","-9",str(sppoo.pid)])
-    return False
-  except Exception, e:
-    logging.error("popenTimeout1: "+str(e))
-    return False
-
-def popenTimeout2(cmd, pinput, returncode_ok=[0], ptimeout=21):
-  logging.debug("popenTimeout2: starting: " + cmd)
-  try:
-    sppoo = subprocess.Popen(cmd, stdin=subprocess.PIPE, shell=True)
-    if sys.hexversion >= 0x020600F0:
-      old_shandler = signal.signal(signal.SIGALRM,lambda sn,sf: sppoo.kill())
-    else:
-      old_shandler = signal.signal(signal.SIGALRM,lambda sn,sf: os.system("kill -9 %d" % sppoo.pid))
-    signal.alarm(ptimeout) #schedule alarm
-    if not pinput is None:
-      sppoo.communicate(input=pinput)
-    sppoo.wait()
-    signal.alarm(0) #disable pending alarms
-    signal.signal(signal.SIGALRM, old_shandler)
-    logging.debug("popenTimeout2: subprocess %d finished, returncode: %d" % (sppoo.pid,sppoo.returncode))
-    if sppoo.returncode < 0:
-      logging.error("popenTimeout2: subprocess took too long (>%ds) and pid %d was killed" % (ptimeout,sppoo.pid))
-    return (sppoo.returncode in returncode_ok)
-  except Exception, e:
-    logging.error("popenTimeout2: "+str(e))
-    try:
-      signal.signal(signal.SIGALRM, old_shandler)
-    except:
-      pass
-    return False
-
-def decodeR3Message(multipart_msg):
-    try:
-        return (multipart_msg[0], json.loads(multipart_msg[1]))
-    except Exception, e:
-        logging.debug("decodeR3Message:"+str(e))
-        return ("",{})
-
-
-def touchURL(url):
-  try:
-    f = urllib.urlopen(url)
-    rq_response = f.read()
-    logging.debug("touchURL: url: "+url)
-    #logging.debug("touchURL: Response "+rq_response)
-    f.close()
-    return rq_response
-  except Exception, e:
-    logging.error("touchURL: "+str(e))
-
-
-def exitHandler(signum, frame):
-  logging.info("stopping")
-  try:
-    zmqsub.close()
-    zmqctx.destroy()
-  except:
-    pass
-  sys.exit(0)
-
-#signals proapbly don't work because of readline
-#signal.signal(signal.SIGTERM, exitHandler)
-signal.signal(signal.SIGINT, exitHandler)
-signal.signal(signal.SIGQUIT, exitHandler)
-
-logging.info("Door Status Listener 'PlaySound' started")
-
-if len(sys.argv) > 1:
-  uwscfg = UWSConfig(sys.argv[1])
-else:
-  uwscfg = UWSConfig()
-
-while True:
-  try:
-    #Start zmq connection to publish / forward sensor data
-    zmqctx = zmq.Context()
-    zmqctx.linger = 0
-    zmqsub = zmqctx.socket(zmq.SUB)
-    zmqsub.setsockopt(zmq.SUBSCRIBE, "DoorCommandEvent")
-    zmqsub.setsockopt(zmq.SUBSCRIBE, "PresenceUpdate")
-    zmqsub.setsockopt(zmq.SUBSCRIBE, "BoreDoomButtonPressEvent")
-#    zmqsub.setsockopt(zmq.SUBSCRIBE, "MovementSensorUpdate")
-    zmqsub.setsockopt(zmq.SUBSCRIBE, "DoorAjarUpdate")
-    zmqsub.setsockopt(zmq.SUBSCRIBE, "DoorProblemEvent")
-    zmqsub.connect(uwscfg.broker_uri)
-
-    last_status=None
-    last_user=None
-    unixts_panic_button=None
-    unixts_last_movement=0
-    unixts_last_presence=0
-    while True:
-      data = zmqsub.recv_multipart()
-      (structname, dictdata) = decodeR3Message(data)
-      logging.debug("Got data: " + structname + ":"+ str(dictdata))
-
-      #uwscfg.checkConfigUpdates()
-
-      if structname == "PresenceUpdate" and "Present" in dictdata:
-        if dictdata["Present"] and last_status != dictdata["Present"]:
-          #someone just arrived
-          if isTheSunDown():
-            touchURL("http://slug.realraum.at/cgi-bin/switch.cgi?id=mashadecke&power=on")
-            touchURL("http://localhost/cgi-bin/mswitch.cgi?ceiling3=1&ceiling4=1")
-            touchURL("http://slug.realraum.at/cgi-bin/switch.cgi?id=couchred&power=on")
-            touchURL("http://slug.realraum.at/cgi-bin/switch.cgi?id=bluebar&power=on")
-        last_status=dictdata["Present"]
-        if not last_status:
-          #everybody left
-          touchURL("http://localhost/cgi-bin/mswitch.cgi?ceiling1=0&ceiling2=0&ceiling3=0&ceiling4=0&ceiling5=0&ceiling6=0")
-          touchURL("http://slug.realraum.at/cgi-bin/switch.cgi?id=all&power=off")
-        continue
-
-  except Exception, ex:
-    logging.error("main: "+str(ex))
-    traceback.print_exc(file=sys.stdout)
-    try:
-      zmqsub.close()
-      zmqctx.destroy()
-    except:
-      pass
-    time.sleep(5)
diff --git a/raspberrypi_gpio_relay_licht/style.css b/raspberrypi_gpio_relay_licht/style.css
deleted file mode 100755
index 2560904..0000000
--- a/raspberrypi_gpio_relay_licht/style.css
+++ /dev/null
@@ -1,70 +0,0 @@
-body 
-{
-	background-image:url("./realraumsimpel.png");
-        background-repeat:no-repeat;
-}
-
-#pc1
-{
-    background-color:#f00;	
-}
-.pc1
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:370px;
-    left:697px;
-    background-color:#f00;
-    z-index:20;
-}
-.pc2
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:142px;
-    left:697px;
-    background-color:#f00;
-    z-index:20;
-}
-.pc3
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:370px;
-    left:402px;
-    background-color:#f00;
-    z-index:20;
-}
-.pc4
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:142px;
-    left:402px;
-    background-color:#f00;
-    z-index:20;
-}
-.pc5
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:370px;
-    left:127px;
-    background-color:#f00;
-    z-index:20;
-}
-.pc6
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:142px;
-    left:127px;
-    background-color:#f00;
-    z-index:20;
-}
diff --git a/raspberrypi_gpio_relay_licht/stylez.css b/raspberrypi_gpio_relay_licht/stylez.css
deleted file mode 100755
index 96a87fb..0000000
--- a/raspberrypi_gpio_relay_licht/stylez.css
+++ /dev/null
@@ -1,70 +0,0 @@
-body 
-{
-	background-image:url("./realraumsimpelz.png");
-        background-repeat:no-repeat;
-}
-
-#pc1
-{
-    background-color:#f00;	
-}
-.pc1
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:370px;
-    left:697px;
-    background-color:#f00;
-    z-index:20;
-}
-.pc2
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:142px;
-    left:697px;
-    background-color:#f00;
-    z-index:20;
-}
-.pc3
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:370px;
-    left:402px;
-    background-color:#f00;
-    z-index:20;
-}
-.pc4
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:142px;
-    left:402px;
-    background-color:#f00;
-    z-index:20;
-}
-.pc5
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:370px;
-    left:127px;
-    background-color:#f00;
-    z-index:20;
-}
-.pc6
-{
-    position:absolute;
-    height:122px;
-    width:122px;
-    top:142px;
-    left:127px;
-    background-color:#f00;
-    z-index:20;
-}
diff --git a/raspberrypi_gpio_relay_licht/switch.html b/raspberrypi_gpio_relay_licht/switch.html
deleted file mode 100644
index 5bf1fba..0000000
--- a/raspberrypi_gpio_relay_licht/switch.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0; URL=http://licht.realraum.at/cgi-bin/switch.cgi?nofloat=1">
-</head>
-</html>
diff --git a/router_gpio_relay_licht/mswitch.cgi b/router_gpio_relay_licht/mswitch.cgi
deleted file mode 100755
index c389c38..0000000
--- a/router_gpio_relay_licht/mswitch.cgi
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-
-VALID_ONOFF_IDS="7 18 20"
-GPIOPATH=/sys/class/gpio/gpio
-
-for QUERY in `echo $QUERY_STRING | tr '&' ' '`; do
-  for VALIDID in $VALID_ONOFF_IDS; do
-    if [ "$QUERY" == "$VALIDID=1" ]; then
-      eval "GPIO_$VALIDID"=1
-    elif [ "$QUERY" == "$VALIDID=0" ]; then
-      eval "GPIO_$VALIDID=0"
-    elif [ "$QUERY" == "$VALIDID=q" ]; then
-      eval "GPIO_$VALIDID=q"
-    fi
-  done
-  if [ "$QUERY" == "mobile=1" ]; then
-    MOBILE='1'
-    NOFLOAT='1'
-  elif [ "$QUERY" == "nofloat=1" ]; then
-    NOFLOAT='1'
-  fi
-done
-
-
-print_gpio_state() {
-  GPIOVALUE=$(cat "${GPIOPATH}${1}/value")
-  if [ "$GPIOVALUE" = "1" ]; then
-    echo -n "true"
-  else
-    echo -n "false"
-  fi
-}
-
-gpio_is_on() {
-  GPIOVALUE=$(cat "${GPIOPATH}${1}/value")
-  [ "$GPIOVALUE" = "1" ]
-}
-
-echo "Content-type: text/html"
-echo ""
-
-echo "{"
-for CHECKID in $VALID_ONOFF_IDS; do
-  VAL=""
-  VAL="$(eval echo \$GPIO_$CHECKID)"
-  if [ $VAL == 1 -o $VAL == 0 ]; then
-    echo "$VAL" > "${GPIOPATH}${CHECKID}/value"
-  fi
-  echo -n "\"$CHECKID\":"
-  print_gpio_state $CHECKID
-  echo ","
-done
-echo "\"-1\":false}"
-#      echo "<html>"
-#      echo "<head>"
-#      echo "<title>Realraum Relay Switch</title>"
-#      echo '<script type="text/javascript">window.location="/cgi-bin/switch.cgi";</script>'
-#      echo "</head></html>"
-#      exit 0
-
diff --git a/router_gpio_relay_licht/rc.local b/router_gpio_relay_licht/rc.local
deleted file mode 100644
index 4978362..0000000
--- a/router_gpio_relay_licht/rc.local
+++ /dev/null
@@ -1,14 +0,0 @@
-# Put your custom commands here that should be executed once
-# the system init finished. By default this file does nothing.
-
-rmmod gpio_button_hotplug
-echo 7 > /sys/class/gpio/export
-echo 18 > /sys/class/gpio/export
-echo 20 > /sys/class/gpio/export
-echo 29 > /sys/class/gpio/export
-echo out > /sys/class/gpio/gpio7/direction
-echo out > /sys/class/gpio/gpio18/direction
-echo out > /sys/class/gpio/gpio20/direction
-echo out > /sys/class/gpio/gpio29/direction
-
-exit 0
diff --git a/router_gpio_relay_licht/switch.cgi b/router_gpio_relay_licht/switch.cgi
deleted file mode 100755
index 01dce98..0000000
--- a/router_gpio_relay_licht/switch.cgi
+++ /dev/null
@@ -1,248 +0,0 @@
-#!/bin/sh
-
-for QUERY in `echo $QUERY_STRING | tr '&' ' '`; do
-  for VALUE in `echo $QUERY | tr '=' ' '`; do
-    if [ "$VALUE" == "id" ]; then
-      ID='?'
-    elif [ "$ID" == "?" ]; then
-      ID=$VALUE
-    elif [ "$VALUE" == "power" ]; then
-      POWER='?'
-    elif [ "$POWER" == "?" ]; then
-      POWER=$VALUE
-    elif [ "$VALUE" == "mobile" ]; then
-      MOBILE='1'
-      NOFLOAT='1'
-    elif [ "$VALUE" == "nofloat" ]; then
-      NOFLOAT='1'
-    fi
-    i=$i+1
-  done
-done
-
-
-GPIOPATH=/sys/class/gpio/gpio
-#VALID_ONOFF_IDS="7 18 20 29"
-VALID_ONOFF_IDS="7 18 20"
-VALID_SEND_IDS=""
-
-print_gpio_state() {
-  GPIOVALUE=$(cat "${GPIOPATH}${1}/value")
-  if [ "$GPIOVALUE" = "1" ]; then
-    echo "ON"
-  else
-    echo "Off"
-  fi
-}
-
-gpio_is_on() {
-  GPIOVALUE=$(cat "${GPIOPATH}${1}/value")
-  [ "$GPIOVALUE" = "1" ]
-}
-
-if [ "$POWER" == "1" -o "$POWER" == "0" ]; then
-  for CHECKID in $VALID_ONOFF_IDS ; do
-    if [ "$CHECKID" == "$ID" ]; then
-      echo "$POWER" > "${GPIOPATH}${ID}/value"
-      echo "Content-type: text/html"
-      echo ""
-      echo "<html>"
-      echo "<head>"
-      echo "<title>Realraum Relay Switch</title>"
-      echo '<script type="text/javascript">window.location="/cgi-bin/switch.cgi";</script>'
-      echo "</head></html>"
-      exit 0
-    fi
-  done
-fi
-
-DESC_7="Decke Links Vorne"
-DESC_20="Decke Rechts Vorne"
-DESC_18="Decke Rechts Mitte"
-#DESC_29="GPIO Nicht Belegt"
-
-echo "Content-type: text/html"
-echo ""
-echo "<html>"
-echo "<head>"
-echo "<title>Realraum Relay Power</title>"
-echo '<script type="text/javascript">'
-
-echo 'function callbackUpdateButtons(req) {
-  if (req.status != 200) {
-    return;
-  }
-  var data = JSON.parse(req.responseText);
-  for (var keyid in data) {
-    on_btn = document.getElementById("onbtn_"+keyid);
-    off_btn = document.getElementById("offbtn_"+keyid);
-    if (on_btn && off_btn)
-    {
-      on_btn.className = "onbutton";
-      off_btn.className = "offbutton";
-      if (data[keyid])
-      { on_btn.className += " enableborder"; }
-      else
-      { off_btn.className += " enableborder"; }
-    }
-  }
-}'
-
-echo 'function updateButtons(uri) {
-  var req = new XMLHttpRequest;
-  req.overrideMimeType("application/json");
-  req.open("GET", uri, true);
-  req.onload  = function() {callbackUpdateButtons(req)};
-  req.setRequestHeader("googlechromefix","");
-  req.send(null);
-}'
-
-echo 'function sendMultiButton( str ) {
- url = "/cgi-bin/mswitch.cgi?"+str;
-  updateButtons(url);
-}'
-
-echo 'setInterval("updateButtons(\"/cgi-bin/mswitch.cgi\");", 30*1000);'
-
-echo 'function sendButton( onoff, btn )'
-echo '{'
-echo ' var req = new XMLHttpRequest();'
-echo ' url = "/cgi-bin/switch.cgi?power="+onoff+"&id="+btn;'
-echo ' req.open("GET", url ,false);'
-echo ' //google chrome workaround'
-echo ' req.setRequestHeader("googlechromefix","");'
-echo ' req.send(null);'
-echo '}'
-echo '</script>'
-echo '<style>'
-echo 'div.switchbox {'
-echo '    float:left;'
-echo '    margin:2px;'
-#echo '    max-width:236px;'
-echo '    max-width:300px;'
-echo '    font-size:10pt;'
-echo '    border:1px solid black;'
-#echo '    height: 32px;'
-echo '    padding:0;'
-echo '}'
-
-echo 'div.switchnameleft {'
-echo '    width:12em; display:inline-block; vertical-align:middle; margin-left:3px;'
-echo '}'
-
-echo 'span.alignbuttonsright {'
-echo '    top:0px; float:right; display:inline-block; text-align:right; padding:0;'
-echo '}'
-
-echo 'div.switchnameright {'
-echo '    width:12em; display:inline-block; vertical-align:middle; float:right; display:inline-block; margin-left:1ex; margin-right:3px; margin-top:3px; margin-bottom:3px;'
-echo '}'
-
-echo 'span.alignbuttonsleft {'
-echo '    float:left; text-align:left; padding:0;'
-echo '}'
-
-echo '.onbutton {'
-echo '    font-size:11pt;'
-echo '    width: 40px;'
-echo '    height: 32px;'
-echo '    background-color: lime;'
-echo '    margin: 0px;'
-echo '}'
-
-echo '.offbutton {'
-echo '    font-size:11pt;'
-echo '    width: 40px;'
-echo '    height: 32px;'
-echo '    background-color: red;'
-echo '    margin: 0px;'
-echo '}'
-
-echo '.sendbutton {'
-echo '    font-size:11pt;'
-echo '    width: 40px;'
-echo '    height: 32px;'
-#echo '    background-color: grey;'
-echo '    margin: 0px;'
-echo '}'
-
-echo '.enableborder {
-    font-weight: bold;
-    font-variant: small-caps;
-    border-style: inset;'
-echo '}'
-echo '</style>'
-echo "</head>"
-echo "<body>"
-#echo "<h1>Realraum rf433ctl</h1>"
-#echo "<div style=\"float:left; border:1px solid black;\">"
-echo "<div style=\"float:left;\">"
-echo "<div style=\"float:left; border:1px solid black; margin-right:2ex; margin-bottom:2ex;\">"
-for DISPID in $VALID_ONOFF_IDS; do
-  NAME="$(eval echo -n \$DESC_$DISPID)"
-  [ -z "$NAME" ] && NAME=$DISPID
-
-  echo "<div class=\"switchbox\">"
-  echo "<span class=\"alignbuttonsleft\">"
-  if gpio_is_on $DISPID; then
-  echo " <button id=\"onbtn_$DISPID\" class=\"onbutton enableborder\" onClick='sendMultiButton(\"$DISPID=1\");'>On</button>"
-  echo " <button id=\"offbtn_$DISPID\" class=\"offbutton\" onClick='sendMultiButton(\"$DISPID=0\");'>Off</button>"
-  else
-  echo " <button id=\"onbtn_$DISPID\" class=\"onbutton\" onClick='sendMultiButton(\"$DISPID=1\");'>On</button>"
-  echo " <button id=\"offbtn_$DISPID\" class=\"offbutton enableborder\" onClick='sendMultiButton(\"$DISPID=0\");'>Off</button>"
-  fi
-  echo "</span>"
-  echo -n "<div class=\"switchnameright\">$NAME</div>"
-#  echo -n "<div class=\"switchnameright\">$NAME ("
-#  print_gpio_state $DISPID
-#  echo ")</div>"
-  echo "</div>"
-
-  if [ "$NOFLOAT" == "1" ]; then
-    echo "<br/>"
-  fi
-done
-
-echo "<div class=\"switchbox\">"
-echo "<span class=\"alignbuttonsleft\">"
-echo -n " <button class=\"onbutton\" onClick='sendMultiButton(\""
-for DISPID in $VALID_ONOFF_IDS; do echo -n "$DISPID=1&"; done
-echo "\");'>On</button>"
-echo -n " <button class=\"offbutton\" onClick='sendMultiButton(\""
-for DISPID in $VALID_ONOFF_IDS; do echo -n "$DISPID=0&"; done
-echo "\");'>Off</button>"
-echo "</span>"
-echo -n "<div class=\"switchnameright\">Alle</div>"
-echo "</div>"
-if [ "$NOFLOAT" == "1" ]; then
-  echo "<br/>"
-fi
-echo "</div>"
-
-if [ "$MOBILE" != "1" -a -n "$VALID_SEND_IDS" ]; then
-
-echo "<div style=\"float:left; border:1px solid black; margin-right:2ex; margin-bottom:2ex;\">"
-
-ITEMCOUNT=0
-
-for DISPID in $VALID_SEND_IDS; do
-  ITEMCOUNT=$((ITEMCOUNT+1))
-  NAME="$(eval echo \$DESC_$DISPID)"
-  [ -z "$NAME" ] && NAME=$DISPID
-
-  echo "<div class=\"switchbox\">"
-  echo "<span class=\"alignbuttonsleft\">"
-  echo " <button class=\"sendbutton\" onClick='sendButton(\"on\",\"$DISPID\");'> </button>"
-  echo "</span>"
-  echo "<div class=\"switchnameright\">$NAME</div>"
-  echo "</div>"
-  if [ "$NOFLOAT" == "1" -a $((ITEMCOUNT % 2 )) -ne 1 ]; then
-    echo "<br/>"
-  fi
-
-done
-echo "</div>"
-fi
-echo "</div>"
-echo "</body>"
-echo "</html>"
-- 
1.7.10.4