diff --git a/classCAN.py b/classCAN.py index a4e0a54..29d2b87 100644 --- a/classCAN.py +++ b/classCAN.py @@ -67,11 +67,11 @@ class CANBackend: raise RuntimeError("CAN not connected") state_map = { - "IDLE": 0, - "PRODUCTION": 1, - "MAINTENANCE": 3, - "EMERGENCY_STOP": 4, - "FIRST_START": 5 + "IDLE": 1, + "PRODUCTION": 2, + "MAINTENANCE": 8, + "EMERGENCY_STOP": 9, + "FIRST_START": 10 } if state not in state_map: @@ -79,14 +79,14 @@ class CANBackend: try: print(f"[DEBUG] Writing state {state_map[state]} to index 0x2024, subindex {pu_number}") - self.node.sdo[0x2024][0x01].raw = state_map[state] + self.node.sdo[0x2024][pu_number].raw = state_map[state] # Write the ploop setpoint to its own index/subindex - print(f"[DEBUG] Writing ploop_setpoint {ploop_setpoint} to index 0x2007, subindex {0x00}") - self.node.sdo[2007][0x00].raw = int(ploop_setpoint * 100) + print(f"[DEBUG] Writing ploop_setpoint {ploop_setpoint} to index 0x2007") + self.node.sdo[0x2007].raw = int(ploop_setpoint * 100) except Exception as e: - print(f"[SDO WRITE ERROR] Failed to write to 0x2024:{pu_number} - {e}") + print(f"[SDO WRITE ERROR] Failed to write to 0x2007:{e}") raise diff --git a/main.py b/main.py index 7252e46..99423e6 100644 --- a/main.py +++ b/main.py @@ -6,10 +6,8 @@ import os from fastapi import Request, APIRouter import subprocess import platform -if platform.system() in ['Darwin']: # macOS or Windows - from MockCAN import CANBackend -else : - from classCAN import CANBackend # Your real backend + +from classCAN import CANBackend # Your real backend app = FastAPI() router = APIRouter() @@ -39,7 +37,7 @@ app.mount("/static", StaticFiles(directory="static"), name="static") # print(f"[WEBHOOK] Update failed:\n{e.stderr}") # return {"status": "Update failed", "error": str(e)} - + @app.post("/connect_toggle") def connect_toggle(): """Toggle CAN connection.""" @@ -52,6 +50,7 @@ def connect_toggle(): node_id=0x02, eds_path = os.path.join(os.path.dirname(__file__), "eds_file", "processBoard_0.eds") ) + if not success: raise HTTPException(status_code=500, detail="Connection failed.") return {"connected": True} @@ -59,87 +58,25 @@ def connect_toggle(): @app.post("/command/{state}/pu/{pu_number}") def send_command(state: str, pu_number: int, ploop_setpoint: float = Query(...)): """Send a state command to a specific PU.""" - logging.info(f"Sending state '{state}' to PU {pu_number} with ploop_setpoint {ploop_setpoint}") + logging.info(f"Sending state '{state}' to PU {pu_number}") try: can_backend.send_state_command(state.upper(), pu_number, ploop_setpoint) return {"status": "success", "command": state.upper(), "pu": pu_number, "ploop_setpoint": ploop_setpoint} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) + + @app.get("/monitor") def get_monitor_data(): - # TODO : agree on the structure data = can_backend.get_latest_data() print(f"[MONITOR] Latest SDO: {data}") return { - "PU_1": { - "Qperm": data.get("FM2", 0.0), - "Qdilute": data.get("FM3", 0.0), - "Qdrain": data.get("FM4", 0.0), - "Qrecirc": data.get("FM5", 0.0), - "Pro": data.get("PS1", 0.0), - "Pdilute": data.get("PS2", 0.0), - "Prentate": data.get("PS3", 0.0), - "Conductivity": data.get("Cond", 0.0), - "MV02": data.get("MV02", 0.0), - "MV02_sp": data.get("MV02_sp", 0.0), - "MV03": data.get("MV03", 0.0), - "MV03_sp": data.get("MV03_sp", 0.0), - "MV05": data.get("MV05", 0.0), - "MV05_sp": data.get("MV05_sp", 0.0), - "MV06": data.get("MV06", 0.0), - "MV06_sp": data.get("MV06_sp", 0.0), - "MV07": data.get("MV07", 0.0), - "MV07_sp": data.get("MV07_sp", 0.0), - "MV08": data.get("MV08", 0.0), - "MV08_sp": data.get("MV08_sp", 0.0) - }, - "PU_2": { - "Qperm": data.get("FM2", 0.0), - "Qdilute": data.get("FM3", 0.0), - "Qdrain": data.get("FM4", 0.0), - "Qrecirc": data.get("FM5", 0.0), - "Pro": data.get("PS1", 0.0), - "Pdilute": data.get("PS2", 0.0), - "Prentate": data.get("PS3", 0.0), - "Conductivity": data.get("Cond", 0.0), - "MV02": data.get("MV02", 0.0), - "MV02_sp": data.get("MV02_sp", 0.0), - "MV03": data.get("MV03", 0.0), - "MV03_sp": data.get("MV03_sp", 0.0), - "MV05": data.get("MV05", 0.0), - "MV05_sp": data.get("MV05_sp", 0.0), - "MV06": data.get("MV06", 0.0), - "MV06_sp": data.get("MV06_sp", 0.0), - "MV07": data.get("MV07", 0.0), - "MV07_sp": data.get("MV07_sp", 0.0), - "MV08": data.get("MV08", 0.0), - "MV08_sp": data.get("MV08_sp", 0.0) - }, - "PU_3": { - "Qperm": data.get("FM2", 0.0), - "Qdilute": data.get("FM3", 0.0), - "Qdrain": data.get("FM4", 0.0), - "Qrecirc": data.get("FM5", 0.0), - "Pro": data.get("PS1", 0.0), - "Pdilute": data.get("PS2", 0.0), - "Prentate": data.get("PS3", 0.0), - "Conductivity": data.get("Cond", 0.0), - "MV02": data.get("MV02", 0.0), - "MV02_sp": data.get("MV02_sp", 0.0), - "MV03": data.get("MV03", 0.0), - "MV03_sp": data.get("MV03_sp", 0.0), - "MV05": data.get("MV05", 0.0), - "MV05_sp": data.get("MV05_sp", 0.0), - "MV06": data.get("MV06", 0.0), - "MV06_sp": data.get("MV06_sp", 0.0), - "MV07": data.get("MV07", 0.0), - "MV07_sp": data.get("MV07_sp", 0.0), - "MV08": data.get("MV08", 0.0), - "MV08_sp": data.get("MV08_sp", 0.0) - } + "Qperm": [data.get("FM2", 0.0), data.get("FM2", 0.0), 0.0], + "Pdilute": [data.get("PS1", 0.0), 0.0, 0.0], + "Conductivity": [0.0, 0.0, 0.0], + "Pro": [0.0, 0.0, 0.0], } - @app.get("/can_status") def can_status(): """Return current CAN connection status.""" @@ -151,14 +88,6 @@ async def read_root(): with open("static/index.html", "r") as file: return HTMLResponse(content=file.read(), status_code=200) - -@app.get("/monitor-page", response_class=HTMLResponse) -async def read_monitor_page(): - """Serve monitor HTML page.""" - with open("static/monitor.html", "r") as file: - return HTMLResponse(content=file.read(), status_code=200) - - app.include_router(router) if __name__ == "__main__": @@ -166,7 +95,7 @@ if __name__ == "__main__": uvicorn.run( "main:app", host="127.0.0.1", - port=8000, + port=8080, reload=True, reload_dirs=["."], )