INFO: Started server process [18785] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) INFO: 192.168.5.30:50547 - "GET /api/status HTTP/1.1" 401 Unauthorized INFO: 192.168.5.30:50547 - "GET /login HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:149: 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:64565 - "POST /api/auth/login HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET / 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). if datetime.utcnow() > expiry: 2026-02-20 16:36:09,107 - fan_controller - INFO - Loaded config from /home/devmatrix/projects/fan-controller-v2/data/config.json INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /favicon.ico HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK 2026-02-20 16:36:15,352 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json 2026-02-20 16:36:15,642 - fan_controller - INFO - Connected to IPMI at 192.168.5.191 INFO: 192.168.5.30:64565 - "POST /api/config/ipmi HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "POST /api/test 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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK 2026-02-20 16:36:59,135 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json 2026-02-20 16:36:59,301 - fan_controller - INFO - Fan 0xff speed set to 100% INFO: 192.168.5.30:64565 - "POST /api/control/manual 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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 127.0.0.1:42260 - "GET /api/public/temperatures HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK 2026-02-20 16:37:10,019 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json 2026-02-20 16:37:10,171 - fan_controller - INFO - Fan 0xff speed set to 0% INFO: 192.168.5.30:64565 - "POST /api/control/manual 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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK 2026-02-20 16:37:16,181 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json 2026-02-20 16:37:16,392 - fan_controller - INFO - Fan 0xff speed set to 13% INFO: 192.168.5.30:64565 - "POST /api/control/manual 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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:149: 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: 127.0.0.1:53160 - "POST /api/auth/login HTTP/1.1" 200 OK 2026-02-20 16:37:20,069 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json 2026-02-20 16:37:20,231 - fan_controller - INFO - Manual fan control enabled 2026-02-20 16:37:20,400 - fan_controller - INFO - Connected to IPMI at 192.168.5.191 2026-02-20 16:37:20,400 - fan_controller - INFO - HTTP sensor client initialized for http://192.168.5.200:8888 2026-02-20 16:37:20,401 - fan_controller - INFO - IPMI Controller service started INFO: 127.0.0.1:53164 - "POST /api/control/auto HTTP/1.1" 200 OK 2026-02-20 16:37:20,568 - fan_controller - INFO - Manual fan control enabled /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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status 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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 127.0.0.1:54102 - "GET /api/public/temperatures HTTP/1.1" 200 OK 2026-02-20 16:37:26,052 - fan_controller - INFO - Fan 0xff speed set to 15% 2026-02-20 16:37:26,052 - fan_controller - INFO - All fans set to 15% (Temp 27.0°C) /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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status 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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status 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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:149: 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: 127.0.0.1:46386 - "POST /api/auth/login HTTP/1.1" 200 OK INFO: 127.0.0.1:46402 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 127.0.0.1:49878 - "POST /api/auth/login 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). if datetime.utcnow() > expiry: 2026-02-20 16:37:51,890 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json INFO: 127.0.0.1:49884 - "POST /api/config/settings HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status 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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 127.0.0.1:51568 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status 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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:149: 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: 127.0.0.1:60806 - "POST /api/auth/login 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). if datetime.utcnow() > expiry: 2026-02-20 16:38:11,328 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json INFO: 127.0.0.1:60810 - "POST /api/config/settings HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK 2026-02-20 16:38:12,401 - fan_controller - INFO - Fan 0xff speed set to 44% 2026-02-20 16:38:12,401 - fan_controller - INFO - All fans set to 44% (Temp 52.0°C) /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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 127.0.0.1:40062 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:64565 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:53448 - "GET /api/status 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). if datetime.utcnow() > expiry: INFO: 192.168.5.30:53448 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:53448 - "GET /api/status HTTP/1.1" 200 OK /home/devmatrix/projects/fan-controller-v2/web_server.py:149: 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: 127.0.0.1:34550 - "POST /api/auth/login HTTP/1.1" 200 OK 2026-02-20 16:38:28,624 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json INFO: 127.0.0.1:34556 - "POST /api/config/settings HTTP/1.1" 200 OK INFO: 192.168.5.30:53448 - "GET /api/status HTTP/1.1" 200 OK INFO: 192.168.5.30:53448 - "GET /api/status HTTP/1.1" 200 OK