10 KiB
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
- Installation
- IPMI Setup
- HTTP Sensors Setup (Optional)
- First Run
- Configuration
- Troubleshooting
- Support
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
- Boot into your Dell server's BIOS/F2 setup
- Navigate to iDRAC Settings → Network
- Configure a static IP address for iDRAC (e.g.,
192.168.5.191) - Save and exit
Alternatively, configure via iDRAC web interface:
- Access iDRAC at its current IP
- Go to iDRAC Settings → Network → IPV4 Settings
- Set static IP, subnet mask, and gateway
- Apply changes
Step 2: Create IPMI User
Method 1: Via iDRAC Web Interface (Recommended)
- Log into iDRAC web interface
- Go to iDRAC Settings → User Authentication → Local Users
- Click Add User or edit an existing user
- Configure:
- User Name:
root(or your preferred username) - Password: Strong password
- IPMI LAN Privilege: Administrator
- Enable IPMI over LAN: ✓ Checked
- User Name:
- 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
- During setup wizard (Step 3), check "Enable HTTP Sensor"
- Enter URL:
http://192.168.5.200:8888/sensors - Click "Test HTTP Sensor" to verify connection
- Complete setup
First Run
Initial Setup Wizard
-
Step 1: Create Admin Account
- Username: Choose your admin username
- Password: Minimum 6 characters
- Confirm password
-
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
- Host/IP: Your iDRAC IP (e.g.,
-
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
-
Enable Auto Fan Control
- Check "Enable Auto Fan Control" to start automatic control immediately
- This activates the default "Balanced" fan curve
-
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:
- Go to Curves tab
- Click + Add Curve
- 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%
- Example:
- Click Save Curve
- Click Activate to apply the curve
Fan Groups
Groups allow unified control of multiple fans:
- Go to Fan Groups tab
- Click + Create First Group
- Enter group name
- Select fans to include
- Click Save Group
- 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
- 🐛 Report Bugs: https://github.com/ImpulsiveFPS/IPMI-Controller/issues
- 📁 GitHub Repo: https://github.com/ImpulsiveFPS/IPMI-Controller
- ☕ Support on Ko-fi: https://ko-fi.com/impulsivefps
Acknowledgments
Built with:
IPMI Controller v1.0.0 - Built by ImpulsiveFPS