diff --git a/app/main.py b/app/main.py index 13e8a59..e842e90 100644 --- a/app/main.py +++ b/app/main.py @@ -25,6 +25,14 @@ def hex2b(s: str) -> bytes: parts = [p for p in s.split() if p] return bytes(int(p, 16) for p in parts) +def serial_port_connected(port: str): + try: + from serial.tools import list_ports + ports = {p.device for p in list_ports.comports()} + return port in ports, None + except Exception as e: + return None, str(e) + APP_MODE = env("APP_MODE", "serial").strip().lower() if APP_MODE not in ("serial", "mock"): @@ -50,14 +58,25 @@ class CustomReq(BaseModel): @app.get("/health") def health(): + port_connected = None + port_error = None + port_status = None + if cfg and cfg.port: + port_connected, port_error = serial_port_connected(cfg.port) + if port_connected is False: + port_status = "Port COM pas connecte" + if cfg is None or not cfg.port: + port_status = "Port COM pas configure" return { - "ok": True, + "ok": False if port_connected is False or (cfg is None or not cfg.port) else True, "mode": APP_MODE, "busy": bridge.busy(), "hostname": socket.gethostname(), "timestamp": time.time(), - "port": cfg.port if cfg else None, + "port": port_status if port_status else (cfg.port if cfg else None), "baudrate": cfg.baudrate if cfg else None, + "port_connected": port_connected, + "port_error": port_error, }