import os import flask import evdev import requests import time import threading app = flask.Flask(import_name=__name__) lock = threading.Lock() def opener(lck): with lck: for _ in range(5): requests.get("http://192.168.0.103/open") def remote_handler(lck): n_attempts = 0 remote = None while remote is None: #---search for remote--- input_devices = os.listdir("/dev/input") for device in input_devices: try: dev = evdev.InputDevice("/dev/input/"+device) if "Wireless Present" in dev.name and "Keyboard" in dev.name and "usb" in dev.phys: remote = dev print("Remote found") break except: pass #---start retrieving events if remote detected--- if remote is not None: try: for event in remote.read_loop(): if event.type==evdev.ecodes.EV_KEY and event.code==evdev.ecodes.KEY_B and event.value==1: print("Command received from remote") opener(lck) except: remote = None n_attempts += 1 print("Attempt "+str(n_attempts)+" fails in finding remote") time.sleep(3) @app.route(rule="/") def index(): return "200 OK (working)\n" @app.route(rule="/receiving", methods=["POST"]) def receiver(): data = flask.request.get_data(as_text=True) parts = data.split("&") data_dict = {} for part in parts: parameter_name, parameter_value = part.split("=") data_dict[parameter_name] = parameter_value print(data_dict) response_events = {"events":[]} #---action=incoming--- if data_dict["action"]=="incoming": if "please" in data_dict["message"].lower(): op = threading.Thread(target=opener, args=(lock,)) op.start() response_events["events"].append({"event":"log","message":"Server received "+data_dict["message_type"]+" from "+data_dict["from"]}) return flask.jsonify(response_events) #---action=outgoing--- if data_dict["action"]=="outgoing": response_events["events"].append({"event":"log","message":"Server received outgoing action"}) return flask.jsonify(response_events) #---action=send_status--- if data_dict["action"]=="send_status": response_events["events"].append({"event":"log","message":"Server received send_status action"}) return flask.jsonify(response_events) #---action=forward_sent--- if data_dict["action"]=="forward_sent": response_events["events"].append({"event":"log","message":"Server received forward_sent action"}) return flask.jsonify(response_events) #---action=amqp_started--- if data_dict["action"]=="amqp_started": response_events["events"].append({"event":"log","message":"Server received amqp_started action"}) return flask.jsonify(response_events) #---action=device_status--- if data_dict["action"]=="device_status": response_events["events"].append({"event":"log","message":"Server received notification of "+data_dict["status"]}) return flask.jsonify(response_events) if __name__=="__main__": remote_handler_thread = threading.Thread(target=remote_handler, args=(lock,)) remote_handler_thread.start() app.run(host="0.0.0.0")