# 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](#prerequisites) - [Installation](#installation) - [IPMI Setup](#ipmi-setup) - [HTTP Sensors Setup (Optional)](#http-sensors-setup-optional) - [First Run](#first-run) - [Configuration](#configuration) - [Troubleshooting](#troubleshooting) - [Support](#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 ```bash # Ubuntu/Debian sudo apt update sudo apt install ipmitool # Verify installation ipmitool -V ``` --- ## Installation ### 1. Clone the Repository ```bash git clone https://github.com/ImpulsiveFPS/IPMI-Controller.git cd IPMI-Controller ``` ### 2. Install Python Dependencies ```bash pip install -r requirements.txt ``` Required packages: - fastapi - uvicorn - pydantic - requests ### 3. Start the Application ```bash 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: ```bash 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 Settings** → **Network** 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 Settings** → **Network** → **IPV4 Settings** 3. Set static IP, subnet mask, and gateway 4. Apply changes ### Step 2: Create IPMI User #### Method 1: Via iDRAC Web Interface (Recommended) 1. Log into iDRAC web interface 2. Go to **iDRAC Settings** → **User Authentication** → **Local 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) ```bash # 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 ```bash # 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: ```bash 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 ```bash # 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: ```python #!/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 ```bash python3 sensor-server.py ``` Or create a systemd service: ```ini # /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 ``` ```bash sudo systemctl enable sensor-server sudo systemctl start sensor-server ``` ### Step 4: Test HTTP Endpoint ```bash 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 - 🐛 **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: - [FastAPI](https://fastapi.tiangolo.com/) - Web framework - [Heroicons](https://heroicons.com/) - Icons - [Lucide](https://lucide.dev/) - Additional icons --- **IPMI Controller v1.0.0 - Built by ImpulsiveFPS**