#!/usr/bin/env python3 import http.server import serial import time import struct import sys import os import glob class Handler(http.server.BaseHTTPRequestHandler): def Handler(self): self.port = None def open_port(self): ports = glob.glob("/dev/ttyACM*") if len(ports) == 0: return False self.port = serial.Serial(ports[0], 9600) def serial_send(self, data): try: if not self.port: self.open_port() port.write(data) except Exception as e: print("First try exception: " + str(e)) try: self.open_port() port.write(data) except Exception as e: print("Second try exception: " + str(e)) print("Giving up. Command not sent.") def do_HEAD(self): self.send_header("Access-Control-Allow-Origin", "*") def do_POST(self): parts = self.path.split("/") method = "cmd_" + parts[1].replace("-", "_") if hasattr(self, method): getattr(self, method)(*parts[2:]) self.send_response(200) self.send_header("Content-type", "ok") self.send_header("Access-Control-Allow-Origin", "*") self.end_headers() self.wfile.write(b"ok\r\n") def cmd_lights(self, state): port.write(bytes(state, "utf-8")) def cmd_screens(self, state): if state not in ["off", "on"]: return os.system("xset dpms force " + state) def cmd_tv(self, button): if button not in ["mute", "voldown", "volup", "power", "pc", "ext-4"]: return if button == "ext-4": button = "source up up up up ok menu menu"; os.system("ssh konata /home/matti/bin/rem " + button) def cmd_lock_konata(self): os.system("ssh konata xscreensaver-command --lock") def cmd_lock_miya(self): os.system("xscreensaver-command --lock") server = http.server.HTTPServer(('', 7331), Handler) server.serve_forever() port.close()