diff --git a/server.log b/server.log
index 271f345..22ca4dc 100644
--- a/server.log
+++ b/server.log
@@ -1,195 +1,98 @@
-INFO: Started server process [69621]
+INFO: Started server process [70935]
INFO: Waiting for application startup.
+2026-02-20 20:04:15,011 - fan_controller - INFO - Loaded config from /home/devmatrix/projects/fan-controller-v2/data/config.json
+2026-02-20 20:04:15,011 - __main__ - INFO - Auto-starting fan control (enabled in config)
+2026-02-20 20:04:15,162 - fan_controller - INFO - Connected to IPMI at 192.168.5.191
+2026-02-20 20:04:15,162 - fan_controller - INFO - HTTP sensor client initialized for http://192.168.5.200:8888
+2026-02-20 20:04:15,163 - 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)
-INFO: 192.168.5.30:63726 - "GET /api/status HTTP/1.1" 401 Unauthorized
-INFO: 192.168.5.30:63726 - "GET /login HTTP/1.1" 200 OK
-INFO: 192.168.5.30:63726 - "GET /icons/favicon.svg HTTP/1.1" 304 Not Modified
+2026-02-20 20:04:15,314 - fan_controller - INFO - Manual fan control enabled
+INFO: 192.168.5.30:62669 - "GET /api/status HTTP/1.1" 401 Unauthorized
+INFO: 192.168.5.30:62669 - "GET /login HTTP/1.1" 200 OK
+INFO: 192.168.5.30:62669 - "GET /icons/favicon.svg HTTP/1.1" 304 Not Modified
+2026-02-20 20:04:20,942 - fan_controller - INFO - Fan 0xff speed set to 27%
+2026-02-20 20:04:20,942 - fan_controller - INFO - All fans set to 27% (Temp 36.0°C)
+2026-02-20 20:04:36,853 - fan_controller - INFO - Fan 0xff speed set to 31%
+2026-02-20 20:04:36,853 - fan_controller - INFO - All fans set to 31% (Temp 38.0°C)
+INFO: 127.0.0.1:34870 - "GET /api/status HTTP/1.1" 401 Unauthorized
+2026-02-20 20:04:51,781 - fan_controller - INFO - Fan 0xff speed set to 27%
+2026-02-20 20:04:51,781 - fan_controller - INFO - All fans set to 27% (Temp 36.0°C)
+2026-02-20 20:05:07,261 - fan_controller - INFO - Fan 0xff speed set to 25%
+2026-02-20 20:05:07,261 - fan_controller - INFO - All fans set to 25% (Temp 35.0°C)
+INFO: 192.168.5.30:65404 - "GET /login HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /favicon.ico HTTP/1.1" 200 OK
/home/devmatrix/projects/fan-controller-v2/web_server.py:153: 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:59632 - "POST /api/auth/login HTTP/1.1" 200 OK
-INFO: 192.168.5.30:59632 - "GET / HTTP/1.1" 200 OK
-INFO: 192.168.5.30:59632 - "GET /icons/sun.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:57438 - "GET /icons/lock-closed.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:49371 - "GET /icons/arrow-right-on-rectangle.svg HTTP/1.1" 304 Not Modified
+INFO: 192.168.5.30:65404 - "POST /api/auth/login HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET / HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /icons/sun.svg HTTP/1.1" 304 Not Modified
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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 19:59:12,404 - fan_controller - INFO - Loaded config from /home/devmatrix/projects/fan-controller-v2/data/config.json
-INFO: 192.168.5.30:57438 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:59632 - "GET /icons/thermometer.svg HTTP/1.1" 200 OK
-INFO: 192.168.5.30:53397 - "GET /icons/list-bullet.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:60055 - "GET /icons/auto-mode.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:61231 - "GET /icons/server-stack.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:57438 - "GET /icons/document-text.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:49371 - "GET /icons/chart-bar.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:49371 - "GET /favicon.ico HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 127.0.0.1:57942 - "GET /icons/thermometer.svg HTTP/1.1" 200 OK
-2026-02-20 19:59:42,166 - fan_controller - INFO - Connected to IPMI at 192.168.5.191
-INFO: 192.168.5.30:49371 - "POST /api/test HTTP/1.1" 200 OK
+INFO: 192.168.5.30:58005 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:64268 - "GET /icons/lock-closed.svg HTTP/1.1" 304 Not Modified
+INFO: 192.168.5.30:63723 - "GET /icons/auto-mode.svg HTTP/1.1" 304 Not Modified
+INFO: 192.168.5.30:65404 - "GET /icons/thermometer.svg HTTP/1.1" 304 Not Modified
+INFO: 192.168.5.30:64382 - "GET /icons/server-stack.svg HTTP/1.1" 304 Not Modified
+INFO: 192.168.5.30:50712 - "GET /icons/arrow-right-on-rectangle.svg HTTP/1.1" 304 Not Modified
+INFO: 192.168.5.30:58005 - "GET /icons/list-bullet.svg HTTP/1.1" 304 Not Modified
+INFO: 192.168.5.30:63723 - "GET /icons/chart-bar.svg HTTP/1.1" 304 Not Modified
+INFO: 192.168.5.30:64268 - "GET /icons/adjustments-horizontal.svg HTTP/1.1" 304 Not Modified
+INFO: 192.168.5.30:65404 - "GET /icons/document-text.svg HTTP/1.1" 304 Not Modified
+INFO: 192.168.5.30:65404 - "GET /favicon.ico HTTP/1.1" 200 OK
+2026-02-20 20:05:22,464 - fan_controller - INFO - Fan 0xff speed set to 27%
+2026-02-20 20:05:22,464 - fan_controller - INFO - All fans set to 27% (Temp 36.0°C)
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET / HTTP/1.1" 200 OK
-INFO: 192.168.5.30:49371 - "GET /icons/auto-mode.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:58740 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:61627 - "GET /icons/adjustments-horizontal.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:62162 - "GET /icons/thermometer.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:62162 - "GET /favicon.ico HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET / HTTP/1.1" 200 OK
-INFO: 192.168.5.30:64252 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /icons/thermometer.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:62162 - "GET /favicon.ico HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET / HTTP/1.1" 200 OK
-INFO: 192.168.5.30:64911 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62162 - "GET /icons/favicon.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:50760 - "GET /icons/auto-mode.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:60142 - "GET /icons/thermometer.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:50760 - "GET /favicon.ico HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET / HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /favicon.ico HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "POST /api/test HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:50760 - "GET /api/status HTTP/1.1" 200 OK
-2026-02-20 20:01:35,820 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json
-2026-02-20 20:01:35,970 - fan_controller - INFO - Manual fan control enabled
-2026-02-20 20:01:36,121 - fan_controller - INFO - Connected to IPMI at 192.168.5.191
-2026-02-20 20:01:36,122 - fan_controller - INFO - HTTP sensor client initialized for http://192.168.5.200:8888
-2026-02-20 20:01:36,122 - fan_controller - INFO - IPMI Controller service started
-INFO: 192.168.5.30:50760 - "POST /api/control/auto HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-2026-02-20 20:01:36,290 - fan_controller - INFO - Manual fan control enabled
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:50760 - "GET /api/status HTTP/1.1" 200 OK
-2026-02-20 20:01:41,821 - fan_controller - INFO - Fan 0xff speed set to 27%
-2026-02-20 20:01:41,822 - fan_controller - INFO - All fans set to 27% (Temp 36.0°C)
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET / HTTP/1.1" 200 OK
-INFO: 192.168.5.30:62312 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:54108 - "GET /icons/thermometer.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:50760 - "GET /icons/auto-mode.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:50760 - "GET /favicon.ico HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET / HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /favicon.ico HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:50760 - "GET /login HTTP/1.1" 200 OK
-/home/devmatrix/projects/fan-controller-v2/web_server.py:153: 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:55526 - "POST /api/auth/login HTTP/1.1" 200 OK
-INFO: 192.168.5.30:55526 - "GET / HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+2026-02-20 20:05:53,251 - fan_controller - INFO - Fan 0xff speed set to 29%
+2026-02-20 20:05:53,251 - fan_controller - INFO - All fans set to 29% (Temp 37.0°C)
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:55526 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:55526 - "GET /favicon.ico HTTP/1.1" 200 OK
-INFO: 192.168.5.30:55526 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:55526 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:55526 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:55526 - "GET /api/status HTTP/1.1" 200 OK
-2026-02-20 20:02:11,960 - fan_controller - INFO - Fan 0xff speed set to 29%
-2026-02-20 20:02:11,961 - fan_controller - INFO - All fans set to 29% (Temp 37.0°C)
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:55526 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:55526 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:55526 - "GET / HTTP/1.1" 200 OK
-INFO: 192.168.5.30:55175 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:55526 - "GET /icons/auto-mode.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:65016 - "GET /icons/thermometer.svg HTTP/1.1" 304 Not Modified
-INFO: 192.168.5.30:65016 - "GET /favicon.ico HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+2026-02-20 20:06:08,235 - fan_controller - INFO - Fan 0xff speed set to 25%
+2026-02-20 20:06:08,235 - fan_controller - INFO - All fans set to 25% (Temp 35.0°C)
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:65016 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:65016 - "GET /api/status HTTP/1.1" 200 OK
-2026-02-20 20:02:28,030 - fan_controller - INFO - Fan 0xff speed set to 27%
-2026-02-20 20:02:28,030 - fan_controller - INFO - All fans set to 27% (Temp 36.0°C)
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+2026-02-20 20:06:23,620 - fan_controller - INFO - Fan 0xff speed set to 29%
+2026-02-20 20:06:23,620 - fan_controller - INFO - All fans set to 29% (Temp 37.0°C)
/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:65016 - "GET /api/status HTTP/1.1" 200 OK
-/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:65016 - "GET /api/status HTTP/1.1" 200 OK
-/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-INFO: 192.168.5.30:65016 - "GET /api/status HTTP/1.1" 200 OK
-/home/devmatrix/projects/fan-controller-v2/web_server.py:160: 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:65016 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
+INFO: 192.168.5.30:65404 - "GET /api/status HTTP/1.1" 200 OK
diff --git a/static/icons/auto-mode.svg b/static/icons/auto-mode.svg
index b0c2716..1fcf428 100644
--- a/static/icons/auto-mode.svg
+++ b/static/icons/auto-mode.svg
@@ -1,13 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file