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 8cf9957518 Add comprehensive documentation, README, sensor server script, and systemd service 2026-02-20 22:33:58 +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
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 production deployment script with systemd auto-start 2026-02-20 17:16: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 Add 3-step onboarding wizard with IPMI/HTTP test buttons + auto-activate fan curve 2026-02-20 17:37:31 +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 comprehensive documentation, README, sensor server script, and systemd service 2026-02-20 22:33:58 +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 comprehensive documentation, README, sensor server script, and systemd service 2026-02-20 22:33:58 +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 Version 1.0.0 - sticky footer with visible links 2026-02-20 22:28:07 +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