2 Commits 082e5572a9 ... e457787a89

Author SHA1 Message Date
  Noah Vogt e457787a89 add preview/program mode flag 1 month ago
  Noah Vogt 6704684147 add missing requirement 1 month ago
3 changed files with 19 additions and 1 deletions
  1. 2 0
      README.md
  2. 1 0
      requirements.txt
  3. 16 1
      switch.py

+ 2 - 0
README.md

@@ -37,6 +37,8 @@ See the following ascii diagram for the architecture.
                           |   | GET  /target/get     |   |
                           |   | GET  /target/get     |   |
                           |   | POST /preset/goto    |   |
                           |   | POST /preset/goto    |   |
                           |   | POST /preset/save    |   |
                           |   | POST /preset/save    |   |
+                          |   | GET  /mode/get       |   |
+                          |   | POST /mode/set       |   |
                           |   +----------------------+   |
                           |   +----------------------+   |
                           +------------------------------+
                           +------------------------------+
                                          |
                                          |

+ 1 - 0
requirements.txt

@@ -1,3 +1,4 @@
 pyyaml
 pyyaml
 pyserial
 pyserial
+pyserial_asyncio
 aiohttp
 aiohttp

+ 16 - 1
switch.py

@@ -17,7 +17,7 @@ def load_location_roles():
     config_file = get_config_path()
     config_file = get_config_path()
     if not os.path.exists(config_file):
     if not os.path.exists(config_file):
         raise FileNotFoundError(f"Config file not found at: {config_file}")
         raise FileNotFoundError(f"Config file not found at: {config_file}")
-    with open(config_file, "r") as f:
+    with open(config_file, "r", encoding="utf-8") as f:
         config = yaml.safe_load(f)
         config = yaml.safe_load(f)
     return config.get("location_roles", {})
     return config.get("location_roles", {})
 
 
@@ -47,6 +47,7 @@ BAUDRATE = 2400
 # Globals
 # Globals
 # =========================
 # =========================
 current_target = "cam1"  # Default
 current_target = "cam1"  # Default
+current_mode = "preview"  # Default
 cam_transports = {}
 cam_transports = {}
 
 
 # =========================
 # =========================
@@ -153,12 +154,26 @@ async def handle_save_preset(request):
 
 
     return web.json_response({"status": "ok", "action": "save", "preset": preset_id, "target": target})
     return web.json_response({"status": "ok", "action": "save", "preset": preset_id, "target": target})
 
 
+async def handle_set_mode(request):
+    global current_mode
+    mode = request.query.get("mode")
+    if mode not in ("preview", "program"):
+        return web.json_response({"error": "Invalid mode"}, status=400)
+    current_mode = mode
+    return web.json_response({"status": "ok", "mode": current_mode})
+
+async def handle_get_mode(request):
+    return web.json_response({"mode": current_mode})
+
+
 def start_http_server():
 def start_http_server():
     app = web.Application()
     app = web.Application()
     app.router.add_get("/target/get", handle_status)
     app.router.add_get("/target/get", handle_status)
     app.router.add_post("/target/set", handle_set_target)
     app.router.add_post("/target/set", handle_set_target)
     app.router.add_post("/preset/goto", handle_goto_preset)
     app.router.add_post("/preset/goto", handle_goto_preset)
     app.router.add_post("/preset/save", handle_save_preset)
     app.router.add_post("/preset/save", handle_save_preset)
+    app.router.add_get("/mode/get", handle_get_mode)
+    app.router.add_post("/mode/set", handle_set_mode)
     return web._run_app(app, port=1423)
     return web._run_app(app, port=1423)
 
 
 # =========================
 # =========================