diff --git a/server.log b/server.log index 5ce7ca8..96867d4 100644 --- a/server.log +++ b/server.log @@ -1,44 +1,109 @@ -INFO: Started server process [67655] +INFO: Started server process [68185] 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: 127.0.0.1:38442 - "GET / HTTP/1.1" 200 OK -INFO: 127.0.0.1:36660 - "GET / HTTP/1.1" 200 OK -INFO: 192.168.5.30:57225 - "GET /login HTTP/1.1" 200 OK -INFO: 192.168.5.30:57225 - "GET /login HTTP/1.1" 200 OK -INFO: 192.168.5.30:57225 - "GET /login HTTP/1.1" 200 OK -INFO: 192.168.5.30:57225 - "GET /favicon.ico HTTP/1.1" 200 OK +INFO: 192.168.5.30:57869 - "GET /api/status HTTP/1.1" 401 Unauthorized +INFO: 192.168.5.30:57869 - "GET /login HTTP/1.1" 200 OK +INFO: 192.168.5.30:57869 - "GET /icons/fan.svg HTTP/1.1" 304 Not Modified /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:53339 - "POST /api/auth/login HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET / HTTP/1.1" 200 OK +INFO: 192.168.5.30:58782 - "POST /api/auth/login HTTP/1.1" 200 OK +INFO: 192.168.5.30:58782 - "GET / HTTP/1.1" 200 OK +INFO: 192.168.5.30:58782 - "GET /icons/fan-propeller.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:51:41,305 - fan_controller - INFO - Loaded config from /home/devmatrix/projects/fan-controller-v2/data/config.json -INFO: 192.168.5.30:52800 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /icons/fan.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:60479 - "GET /icons/arrow-right-on-rectangle.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:56386 - "GET /icons/server-stack.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:50879 - "GET /icons/lock-closed.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:52800 - "GET /icons/clock.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:50546 - "GET /icons/sun.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:53339 - "GET /icons/fire.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:50879 - "GET /icons/adjustments-horizontal.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:56386 - "GET /icons/fan-propeller.svg HTTP/1.1" 200 OK -INFO: 192.168.5.30:60479 - "GET /icons/list-bullet.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:52800 - "GET /icons/chart-bar.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:53339 - "GET /icons/document-text.svg HTTP/1.1" 304 Not Modified -INFO: 192.168.5.30:53339 - "GET /favicon.ico HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK -INFO: 192.168.5.30:53339 - "GET /api/status HTTP/1.1" 200 OK +2026-02-20 19:52:52,583 - fan_controller - INFO - Loaded config from /home/devmatrix/projects/fan-controller-v2/data/config.json +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /favicon.ico HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:46350 - "GET /login HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +2026-02-20 19:54:08,518 - fan_controller - INFO - Connected to IPMI at 192.168.5.191 +INFO: 192.168.5.30:59190 - "POST /api/test 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:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +2026-02-20 19:54:27,369 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json +2026-02-20 19:54:27,369 - fan_controller - INFO - HTTP sensor client initialized for http://192.168.5.200:8888 +INFO: 192.168.5.30:59190 - "POST /api/config/http HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +2026-02-20 19:54:30,668 - fan_controller - INFO - Saved config to /home/devmatrix/projects/fan-controller-v2/data/config.json +2026-02-20 19:54:30,834 - fan_controller - INFO - Manual fan control enabled +2026-02-20 19:54:30,994 - fan_controller - INFO - Connected to IPMI at 192.168.5.191 +2026-02-20 19:54:30,994 - fan_controller - INFO - HTTP sensor client initialized for http://192.168.5.200:8888 +2026-02-20 19:54:30,995 - fan_controller - INFO - IPMI Controller service started +INFO: 192.168.5.30:59190 - "POST /api/control/auto 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:59190 - "GET /api/status HTTP/1.1" 200 OK +2026-02-20 19:54:31,149 - fan_controller - INFO - Manual fan control enabled +/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:59190 - "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:59190 - "GET /api/status HTTP/1.1" 200 OK +2026-02-20 19:54:37,530 - fan_controller - INFO - Fan 0xff speed set to 27% +2026-02-20 19:54:37,531 - 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:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "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:59190 - "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:59190 - "GET /api/status HTTP/1.1" 200 OK +2026-02-20 19:54:53,287 - fan_controller - INFO - Fan 0xff speed set to 31% +2026-02-20 19:54:53,287 - fan_controller - INFO - All fans set to 31% (Temp 38.0°C) +INFO: 192.168.5.30:59190 - "GET / HTTP/1.1" 200 OK +INFO: 192.168.5.30:59190 - "GET /icons/fan.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: +INFO: 192.168.5.30:59190 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:51993 - "GET /icons/sun.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:64648 - "GET /icons/lock-closed.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:59631 - "GET /icons/arrow-right-on-rectangle.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:51865 - "GET /icons/clock.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:62718 - "GET /icons/server-stack.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:59190 - "GET /icons/fire.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:64648 - "GET /icons/list-bullet.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:51993 - "GET /icons/fan-propeller.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:59631 - "GET /icons/adjustments-horizontal.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:59190 - "GET /icons/document-text.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:62718 - "GET /icons/chart-bar.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.5.30:62718 - "GET /favicon.ico HTTP/1.1" 200 OK +INFO: 192.168.5.30:62718 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:62718 - "GET /api/status HTTP/1.1" 200 OK +INFO: 192.168.5.30:62718 - "GET /login HTTP/1.1" 200 OK diff --git a/static/icons/thermometer.svg b/static/icons/thermometer.svg new file mode 100644 index 0000000..8d48764 --- /dev/null +++ b/static/icons/thermometer.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/web_server.py b/web_server.py index 0760738..ccc2b9f 100644 --- a/web_server.py +++ b/web_server.py @@ -477,7 +477,7 @@ def get_html(theme="dark"):
-

IPMI Controller

+

IPMI Controller

@@ -497,12 +497,12 @@ def get_html(theme="dark"):
-
-
+
Max Temp
-
-
+
Fan Speed
-
@@ -534,7 +534,7 @@ def get_html(theme="dark"):
-

Temperatures

+

Temperatures

Loading...
@@ -542,7 +542,7 @@ def get_html(theme="dark"):
-

Fans

+

Fans

Loading...
@@ -554,7 +554,7 @@ def get_html(theme="dark"): - +
@@ -1103,7 +1103,7 @@ LOGIN_HTML = '''