A modern web-based application for controlling fan speeds on Dell T710 and compatible servers using IPMI. Features a clean web UI, automatic fan curves, panic mode for safety, and support for multiple servers.
Go to file
devmatrix 894e927af4 Fix CSS escaping in footer style 2026-02-20 23:18:39 +00:00
__pycache__ Add 3-step onboarding wizard with IPMI/HTTP test buttons + auto-activate fan curve 2026-02-20 17:37:31 +00:00
data Fix icons to display correctly in light mode 2026-02-20 22:25:35 +00:00
static Replace auto-mode icon with Lucide rotate-cw icon 2026-02-20 20:06:35 +00:00
.gitignore Add .gitignore and production deployment script 2026-02-20 22:50:34 +00:00
PERSISTENCE.md Add persistence: install script, backup/restore, systemd service, docker-compose, docs 2026-02-20 16:45:09 +00:00
README.md Add comprehensive documentation, README, sensor server script, and systemd service 2026-02-20 22:33:58 +00:00
SETUP.md Add slider sync, HTTP sensor docs, setup scripts 2026-02-20 16:38:34 +00:00
backup.sh Add persistence: install script, backup/restore, systemd service, docker-compose, docs 2026-02-20 16:45:09 +00:00
deploy-prod.sh Add ipmitool as explicit dependency in service file and deployment script 2026-02-20 23:17:28 +00:00
docker-compose.yml Add persistence: install script, backup/restore, systemd service, docker-compose, docs 2026-02-20 16:45:09 +00:00
fan_controller.py Improve temperature sensor display with grouped categories 2026-02-20 22:48:01 +00:00
install.sh Add persistence: install script, backup/restore, systemd service, docker-compose, docs 2026-02-20 16:45:09 +00:00
ipmi-controller.service Add ipmitool as explicit dependency in service file and deployment script 2026-02-20 23:17:28 +00:00
requirements.txt Add comprehensive documentation, README, sensor server script, and systemd service 2026-02-20 22:33:58 +00:00
reset_password.py Working auth system 2026-02-20 15:39:18 +00:00
sensor-server.py Add comprehensive documentation, README, sensor server script, and systemd service 2026-02-20 22:33:58 +00:00
server.log Add ipmitool as explicit dependency in service file and deployment script 2026-02-20 23:17:28 +00:00
setup-sensors-server.sh Add persistence: install script, backup/restore, systemd service, docker-compose, docs 2026-02-20 16:45:09 +00:00
web_server.py Fix CSS escaping in footer style 2026-02-20 23:18:39 +00:00

README.md

IPMI Controller

Advanced web-based fan control for Dell servers with IPMI support. Automatically adjust fan speeds based on temperature readings from IPMI sensors and optional HTTP lm-sensors endpoint.

Version: 1.0.0
Author: ImpulsiveFPS
License: MIT


Features

  • 🌡️ Temperature Monitoring - Real-time CPU, inlet, exhaust, and PCIe temperature monitoring
  • 🌀 Automatic Fan Control - Dynamic fan speed adjustment based on customizable temperature curves
  • 📊 Fan Groups - Group fans together for unified control
  • 📈 Custom Curves - Create custom fan curves and assign them to specific fan groups
  • 🖥️ HTTP Sensors - Optional integration with lm-sensors for additional temperature data
  • 🎨 Dark/Light Theme - Choose your preferred visual style
  • 🔒 Secure - Built-in authentication and session management
  • 🚀 Auto-Start - Automatically resumes operation after system restart

Table of Contents


Prerequisites

Hardware Requirements

  • Dell server with IPMI support (iDRAC)
  • Network connectivity to the server's IPMI interface
  • A machine to run the IPMI Controller (can be the same server or a separate management host)

Software Requirements

  • Python 3.8+
  • ipmitool (for IPMI communication)
  • Linux-based system (tested on Ubuntu/Debian)

Installing ipmitool

# Ubuntu/Debian
sudo apt update
sudo apt install ipmitool

# Verify installation
ipmitool -V

Installation

1. Clone the Repository

git clone https://github.com/ImpulsiveFPS/IPMI-Controller.git
cd IPMI-Controller

2. Install Python Dependencies

pip install -r requirements.txt

Required packages:

  • fastapi
  • uvicorn
  • pydantic
  • requests

3. Start the Application

python3 web_server.py

The web interface will be available at http://localhost:8000

4. (Optional) Systemd Service

To run the controller as a system service:

sudo cp ipmi-controller.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable ipmi-controller
sudo systemctl start ipmi-controller

IPMI Setup

Step 1: Configure iDRAC/IPMI Network Settings

  1. Boot into your Dell server's BIOS/F2 setup
  2. Navigate to iDRAC SettingsNetwork
  3. Configure a static IP address for iDRAC (e.g., 192.168.5.191)
  4. Save and exit

Alternatively, configure via iDRAC web interface:

  1. Access iDRAC at its current IP
  2. Go to iDRAC SettingsNetworkIPV4 Settings
  3. Set static IP, subnet mask, and gateway
  4. Apply changes

Step 2: Create IPMI User

  1. Log into iDRAC web interface
  2. Go to iDRAC SettingsUser AuthenticationLocal Users
  3. Click Add User or edit an existing user
  4. Configure:
    • User Name: root (or your preferred username)
    • Password: Strong password
    • IPMI LAN Privilege: Administrator
    • Enable IPMI over LAN: ✓ Checked
  5. Save changes

Method 2: Via ipmitool (Local Access Required)

# List current users
sudo ipmitool user list 1

# Create new user (ID 3)
sudo ipmitool user set name 3 root
sudo ipmitool user set password 3 YOUR_PASSWORD
sudo ipmitool channel setaccess 1 3 callin=on ipmi=on link=on privilege=4
sudo ipmitool user enable 3

# Verify
sudo ipmitool user list 1

Step 3: Enable IPMI over LAN

# Enable IPMI over LAN
sudo ipmitool lan set 1 ipsrc static
sudo ipmitool lan set 1 ipaddr 192.168.5.191
sudo ipmitool lan set 1 netmask 255.255.255.0
sudo ipmitool lan set 1 defgw ipaddr 192.168.5.1
sudo ipmitool lan set 1 access on

# Verify settings
sudo ipmitool lan print 1

Step 4: Test IPMI Connection

From another machine on the network:

ipmitool -I lanplus -H 192.168.5.191 -U root -P YOUR_PASSWORD chassis status

If successful, you'll see server power status and other information.


HTTP Sensors Setup (Optional)

HTTP sensors allow you to integrate additional temperature readings from lm-sensors running on your Proxmox host or other systems. This provides more granular CPU core temperatures.

Step 1: Install lm-sensors on Remote Host

# On Proxmox or target host
sudo apt update
sudo apt install lm-sensors

# Detect sensors
sudo sensors-detect

# Test
sensors

Step 2: Create HTTP Sensor Server Script

Create sensor-server.py on the remote host:

#!/usr/bin/env python3
"""Simple HTTP server for lm-sensors data"""

from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import subprocess

class SensorHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/sensors':
            try:
                result = subprocess.run(['sensors', '-j'], 
                                      capture_output=True, text=True)
                data = json.loads(result.stdout)
                
                self.send_response(200)
                self.send_header('Content-Type', 'application/json')
                self.send_header('Access-Control-Allow-Origin', '*')
                self.end_headers()
                self.wfile.write(json.dumps(data).encode())
            except Exception as e:
                self.send_response(500)
                self.end_headers()
                self.wfile.write(json.dumps({'error': str(e)}).encode())
        else:
            self.send_response(404)
            self.end_headers()
    
    def log_message(self, format, *args):
        pass  # Suppress logs

if __name__ == '__main__':
    server = HTTPServer(('0.0.0.0', 8888), SensorHandler)
    print("Sensor server running on port 8888")
    server.serve_forever()

Step 3: Run Sensor Server

python3 sensor-server.py

Or create a systemd service:

# /etc/systemd/system/sensor-server.service
[Unit]
Description=LM Sensors HTTP Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /path/to/sensor-server.py
Restart=always
User=root

[Install]
WantedBy=multi-user.target
sudo systemctl enable sensor-server
sudo systemctl start sensor-server

Step 4: Test HTTP Endpoint

curl http://192.168.5.200:8888/sensors

You should see JSON output with sensor readings.

Step 5: Configure in IPMI Controller

  1. During setup wizard (Step 3), check "Enable HTTP Sensor"
  2. Enter URL: http://192.168.5.200:8888/sensors
  3. Click "Test HTTP Sensor" to verify connection
  4. Complete setup

First Run

Initial Setup Wizard

  1. Step 1: Create Admin Account

    • Username: Choose your admin username
    • Password: Minimum 6 characters
    • Confirm password
  2. Step 2: IPMI Configuration

    • Host/IP: Your iDRAC IP (e.g., 192.168.5.191)
    • Port: Usually 623
    • Username: IPMI username (e.g., root)
    • Password: IPMI password
    • Click "Test Connection" to verify
  3. Step 3: HTTP Sensor (Optional)

    • Enable HTTP Sensor: Check if using lm-sensors
    • URL: http://your-server:8888/sensors
    • Click "Test HTTP Sensor" to verify
  4. Enable Auto Fan Control

    • Check "Enable Auto Fan Control" to start automatic control immediately
    • This activates the default "Balanced" fan curve
  5. Complete Setup

    • Click "Complete Setup" to finish
    • You'll be logged in automatically

Configuration

Fan Curves

Fan curves define how fan speed responds to temperature:

  1. Go to Curves tab
  2. Click + Add Curve
  3. Configure:
    • Curve Name: e.g., "Silent", "Performance"
    • Group: (Optional) Assign to specific fan group
    • Points: Add temperature → speed mappings
      • Example: 30°C → 20%, 50°C → 50%, 70°C → 100%
  4. Click Save Curve
  5. Click Activate to apply the curve

Fan Groups

Groups allow unified control of multiple fans:

  1. Go to Fan Groups tab
  2. Click + Create First Group
  3. Enter group name
  4. Select fans to include
  5. Click Save Group
  6. Use Set Speed to control all fans in group

Quick Controls

  • Start Auto: Enable automatic fan control
  • Stop Auto: Return to manual/BIOS control
  • Manual Speed Slider: Set all fans to specific speed
  • Identify Fan: Flash individual fan to 100% for identification

Troubleshooting

Connection Issues

"Not connected" status:

  • Verify IPMI IP address is correct
  • Check network connectivity: ping 192.168.5.191
  • Test with ipmitool: ipmitool -I lanplus -H 192.168.5.191 -U root chassis status
  • Ensure IPMI user has Administrator privileges
  • Verify IPMI over LAN is enabled

"Connection timeout":

  • Check firewall rules on IPMI network
  • Verify port 623 is open
  • Try increasing timeout in settings

Fan Control Not Working

Fans not responding to speed changes:

  • Some Dell servers require manual fan control to be enabled first
  • Check IPMI logs for errors
  • Verify fan IDs are correct
  • Try using individual fan controls to test

"Manual fan control not supported":

  • Some server models don't support external fan control
  • Check Dell documentation for your specific model
  • Try updating iDRAC firmware

HTTP Sensor Issues

"HTTP Sensor not working":

  • Verify sensor server is running: curl http://ip:8888/sensors
  • Check firewall on sensor host
  • Ensure lm-sensors is properly configured
  • Verify URL format includes http:// prefix

Support


Acknowledgments

Built with:


IPMI Controller v1.0.0 - Built by ImpulsiveFPS