diff --git a/projektor/projektor.py b/projektor/projektor.py new file mode 100755 index 0000000..fc24555 --- /dev/null +++ b/projektor/projektor.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +import serial +from time import sleep + +def on_hdmi(): + p = Projektor("/dev/ttyS0") + print("HDMI ON") + while True: + if p.get_power() != "ON": + print("PROJECTOR ON") + p.on() + + elif p.get_source() != "HDMI": + print("SWITCHING HDMI") + p.hdmi() + break + + else: + break + sleep(1) + print("DONE") + p.close() + +def on_vga(): + p = Projektor("/dev/ttyS0") + print("VGA ON") + while True: + if p.get_power() != "ON": + print("PROJECTOR ON") + p.on() + + elif p.get_source() != "VGA": + print("SWITCHING VGA") + p.vga() + break + + else: + break + sleep(1) + print("DONE") + p.close() + + +def get_status(): + p = Projektor("/dev/ttyS0") + if p.get_power() == "OFF": + status = "off" + + else: + status = p.get_source() + print("DONE") + p.close() + return status + +def off(): + p = Projektor("/dev/ttyS0") + p.off() + +class Projektor: + def __init__(self, device): + self.ser = serial.Serial(device, 115200, timeout=1) + + def close(self): + self.ser.close() + + def ___delete__(self, instance): + self.close() + + def on(self): + self.ser.write(b"\r*pow=on#\r") + + def off(self): + self.ser.write(b"\r*pow=off#\r") + + def hdmi(self): + self.ser.write(b"\r*sour=hdmi#\r") + + def vga(self): + self.ser.write(b"\r*sour=RGB2#\r") + + def get_source(self): + self.ser.read() + self.ser.write(b"\r*sour=?#\r") + + while True: + c = self.ser.read(1) + if c == b">": + self.ser.read(17) + source = self.ser.read(4) + if source == b"HDMI": + return "hdmi" + elif source == b"RGB2": + return "vga" + elif not c: + break + + def get_power(self): + self.ser.read() + self.ser.write(b"\r*pow=?#\r") + + while True: + c = self.ser.read(1) + if c == b">": + self.ser.read(15) + status = self.ser.read(3) + + if status == b"k i": + return None + elif status == b"ON#": + return "ON" + elif status == b"OFF": + return "OFF" + + elif not c: + break + + +if __name__ == "__main__": + + p = Projektor("/dev/ttyS0") + while True: + if p.get_power() != "ON": + print("POWER ON") + p.on() + + elif p.get_source() != "HDMI": + print("switching HDMI") + p.hdmi() + else: + break diff --git a/projektor/server.py b/projektor/server.py new file mode 100755 index 0000000..062ae52 --- /dev/null +++ b/projektor/server.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +from bottle import get, post, request, run +import projektor + +@get("/status") +def status(): + print("asking status") + return projektor.get_status() + +@post("/status") +def set_status(): + mode = request.forms.get("mode") + print("SETTING STATUS TO", mode) + if mode == "off": + projektor.off() + elif mode == "hdmi": + projektor.on_hdmi() + elif mode == "vga": + projektor.on_vga() + + + return "OK" + + + +if __name__ == "__main__": + run(host="127.0.0.1", port=6999, debug=True)