from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import cgi
import sys
import os
PORT = int (sys.argv[1])
KEY = sys.argv[2]
class PennyworthHandler (BaseHTTPRequestHandler):
def do_GET (self):
print (self.path)
query = { }
sensor_name = None
sensor_value = None
sensor_duration = "0"
try:
query = cgi.parse_qs (self.path.split ("?")[1])
sensor_name = query["name"][0]
sensor_value = query["value"][0]
key = query["key"][0]
try:
sensor_duration = query["duration"][0]
except KeyError:
pass
self.send_response (200)
self.send_header ("Content-type", "text/xml")
self.end_headers ()
self.wfile.write ("")
print ("name = " + sensor_name + "; value = " + sensor_value + "; duration = " + sensor_duration)
if (key == KEY):
print ("got key")
command = "tell application \\\"Pennyworth\\\" to log \\\"" + sensor_value + "\\\""
if (sensor_duration != "0"):
command += " with duration " + sensor_duration
command += " from sensor \\\"" + sensor_name + "\\\""
os.system ("/usr/bin/osascript -e \"" + command + "\"")
except KeyError:
self.send_response (500)
self.send_header ("Content-type", "text/xml")
self.end_headers ()
self.wfile.write ("")
except IndexError:
self.send_response (404)
self.send_header ("Content-type", "text/plain")
self.end_headers ()
self.wfile.write ("Unknown path '" + self.path + "'.")
# Post observation to Pennyworth via AppleScript
def do_POST (self):
self.do_GET ()
def main ():
try:
server = HTTPServer (("", PORT), PennyworthHandler)
print ("started server");
server.serve_forever ()
except KeyboardInterrupt:
print ("stopping server...")
server.socket.close ()
if __name__ == "__main__":
main ()