Professional fan speed management for HP ProLiant servers
A modern web-based application for managing fan speeds on HP ProLiant Gen8 servers with modified iLO4 firmware. Provides both an intuitive web interface and comprehensive REST API for automation and scripting.
- π Web Interface: Responsive design accessible from any device
- π§ Dynamic Configuration: Auto-detects and supports variable fan counts
- π Secure Authentication: Cookie-based sessions with rate limiting
- π‘ REST API: Complete API for automation and integration
- π³ Container Ready: Docker support with environment configuration
- β‘ Real-time Updates: Live fan status monitoring and control
Supported Hardware:
- HP ProLiant Gen8/Gen9 servers (DL360p, DL380p, etc.)
- Modified iLO4 firmware with SSH access enabled
- Network connectivity to iLO management interface
# Clone repository
git clone https://github.com/IT-Kuny/HPE-G8-G9-Fan-Controller.git
cd ilo4-fan-controller
# Build image
docker build -t ilo4-fan-controller .
# Run container
docker run -d \
--name=HPE-G8-G9-Fan-Controller \
--restart=unless-stopped \
-p 3000:3000 \
-e ILO_HOST='192.168.1.100' \
-e ILO_USERNAME='your_ilo_username' \
-e ILO_PASSWORD='your_ilo_password' \
-e AUTH_USERNAME='admin' \
-e AUTH_PASSWORD='your_secure_password' \
-e SESSION_SECRET='your_32_char_secret_key_here' \
HPE-G8-G9-Fan-Controllerdocker run -d \
--name=HPE-G8-G9-Fan-Controller \
--restart=unless-stopped \
-p 3000:3000 \
-e ILO_HOST='192.168.1.100' \
-e ILO_USERNAME='your_ilo_username' \
-e ILO_PASSWORD='your_ilo_password' \
-e AUTH_USERNAME='admin' \
-e AUTH_PASSWORD='your_secure_password' \
-e SESSION_SECRET='your_32_char_secret_key_here' \
ghcr.io/it-kuny/HPE-G8-G9-Fan-Controller:latest# Clone and setup
git clone https://github.com/IT-Kuny/HPE-G8-G9-Fan-Controller.git
cd ilo4-fan-controller
# Configure environment
cp .env.template .env
# Edit .env with your settings
# Install dependencies and build
yarn install
yarn build
# Start application
yarn startEnvironment Configuration (.env):
ILO_HOST=192.168.1.100
ILO_USERNAME=your_ilo_username
ILO_PASSWORD=your_ilo_password
AUTH_USERNAME=admin
AUTH_PASSWORD=your_strong_password_here
SESSION_SECRET=random_string_at_least_32_characters_longAll API endpoints require authentication via session cookies. Obtain a session by logging in through the web interface or using the login endpoint.
Base URL: http://your-server:3000/api
| Method | Endpoint | Description |
|---|---|---|
POST |
/auth/login |
Authenticate and create session |
POST |
/auth/logout |
Destroy current session |
GET |
/fans |
Retrieve current fan status |
POST |
/fans |
Set fan speeds |
POST |
/fans/unlock |
Enable manual fan control |
BASE_URL="http://your-server:3000"
# Authenticate
curl -X POST "$BASE_URL/api/auth/login" \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"your_password"}' \
-c cookies.txt
# Unlock fan control
curl -X POST "$BASE_URL/api/fans/unlock" \
-b cookies.txt
# Set fan speeds (percentages)
curl -X POST "$BASE_URL/api/fans" \
-H 'Content-Type: application/json' \
-d '{"fans":[35,35,35,35]}' \
-b cookies.txt
# Get current status
curl "$BASE_URL/api/fans" \
-b cookies.txt | jq .
# Logout
curl -X POST "$BASE_URL/api/auth/logout" \
-b cookies.txt
# Cleanup
rm cookies.txt- Session Management: Secure cookie-based authentication
- Rate Limiting: 5 login attempts per IP address per 15 minutes
- Environment Variables: All sensitive data configured via environment
- Use strong, unique passwords for
AUTH_PASSWORD - Generate cryptographically secure
SESSION_SECRET(β₯32 characters) - Consider deploying behind reverse proxy with TLS termination
- For multi-instance deployments, implement shared session storage (Redis)
- Frontend: Next.js application with server-side rendering
- Backend: API routes handling iLO4 SSH communication
- Dynamic Discovery: Auto-detects available fans via iLO4 queries
- Real-time Control: Direct SSH commands for immediate fan response
- State Management: Session-based authentication with secure cookies
- Fan speed changes typically take 10-20 seconds to apply
- Response time scales with number of fans configured
- SSH connection pooling for optimal performance
Connection Refused
- Verify iLO4 network connectivity and SSH service status
- Confirm modified firmware installation and SSH enablement
Authentication Failed
- Check iLO4 username/password in environment configuration
- Verify SSH access works manually:
ssh user@ilo-ip
Fan Control Not Working
- Ensure fan control is unlocked via
/api/fans/unlock - Confirm iLO4 firmware modification supports fan speed control
Contributions are welcome! Please ensure:
- Code follows existing style conventions
- Tests pass:
yarn test - Documentation is updated for new features
- Security considerations are addressed
This project is derived from DavidIlie's ilo4-fan-controller with significant enhancements and modernizations. The fork was detached to incorporate critical improvements and maintain active development.
- β User Login Interface: No more unsecured fan controls without additional effort
- β Enhanced Documentation: Comprehensive setup and API guides
- β Modern CI/CD: Automated testing and container builds
- β Security Hardening: Rate limiting and session management
- β API Expansion: Complete REST API with examples
- β Production Ready: Docker support and deployment guides
- β Active Maintenance: Ongoing security updates and improvements
This project maintains the same license terms as the original work. See individual source files for specific licensing information.
β‘ Built for the HomeLab Community β‘