INFO: Started server process [102941] INFO: Waiting for application startup. 2026-02-20 22:26:01,858 - fan_controller - INFO - Loaded config from /home/devmatrix/projects/fan-controller-v2/data/config.json 2026-02-20 22:26:01,859 - __main__ - INFO - Auto-starting fan control (enabled in config) 2026-02-20 22:26:02,047 - fan_controller - INFO - Connected to IPMI at 192.168.5.191 2026-02-20 22:26:02,048 - fan_controller - INFO - HTTP sensor client initialized for http://192.168.5.200:8888 2026-02-20 22:26:02,049 - fan_controller - INFO - IPMI Controller service started INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) 2026-02-20 22:26:02,254 - fan_controller - INFO - Manual fan control enabled INFO: 192.168.5.30:57456 - "GET /api/status HTTP/1.1" 401 Unauthorized INFO: 192.168.5.30:57456 - "GET /login HTTP/1.1" 200 OK 2026-02-20 22:26:09,026 - fan_controller - INFO - Fan 0xff speed set to 14% 2026-02-20 22:26:09,026 - fan_controller - INFO - All fans set to 14% (Temp 38.0°C) INFO: 192.168.5.30:55757 - "GET /login HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /favicon.ico HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:156: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). self._sessions[token] = (username, datetime.utcnow() + timedelta(days=7)) INFO: 192.168.5.30:55757 - "POST /api/auth/login HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET / HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /favicon.ico HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 127.0.0.1:41586 - "GET /?theme=light HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). if datetime.utcnow() > expiry: INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:55757 - "GET /api/status HTTP/1.1" 200 OK