iLO 风扇控制器
轻松管理您的惠普服务器风扇转速,随时随地!
🎉 感谢超过 1,000+ 次容器拉取!🎉
ℹ 注意: v1.0.0 是该工具的完全重写版本,欢迎任何反馈!
如果您发现任何漏洞或有建议,请打开一个问题。谢谢!😄
常见问题解答
它是如何工作的?🛠
该工具是一个单一 PHP 脚本,使用 php-curl 扩展从 iLO REST API 获取当前服务器风扇转速,并使用 php-ssh2 扩展通过修补过的 iLO SSH 接口 设置风扇转速。您还可以创建自定义预设,只需一键即可设置特定风扇配置,所有操作都通过使用 Alpine.js 和 TailwindCSS 制作的简洁网页界面完成。
我能用这款工具控制我的惠普服务器吗?🖥️
该工具需要一个修补过的 iLO 固件,该固件在 iLO SSH 接口暴露了一些用于控制风扇转速的命令。您可以在这篇 Reddit 帖子了解更多关于该补丁的信息。
截至目前,该补丁(以及本工具)仅支持配备 iLO 4 的 Gen8 和 Gen9 服务器。
🚫 不支持配备 iLO 5/6/7 的 Gen10/11/12 服务器(且大概率永远不会支持)。
为什么选择 PHP?📄
我认为 PHP 非常适合这类需要做一些简单服务器端操作且易于部署的任务(只需安装了 PHP 的 Web 服务器即可)。
为什么开发这个工具?🤔
请查看我在 r/homelab 的原始评论,了解这个工具背后的故事!
你喜欢这个项目吗?给我点披萨吧!🍕
如果您觉得这个工具有用,欢迎通过 PayPal 或 GitHub Sponsors 赠送我一片(或整块)披萨以支持我的工作!非常感谢!🙏
Getting started with Docker / Docker Compose
If you already have a Docker environment, you can be up and running in minutes using the following command (obviously you need to change the value):
docker run -d --name ilo-fans-controller --restart always \
-p 8000:80 \
-e ILO_HOST='your-ilo-address' \
-e ILO_USERNAME='your-ilo-username' \
-e ILO_PASSWORD='your-ilo-password' \
ghcr.io/alex3025/ilo-fans-controller:latest
或者如果你愿意,也可以使用 docker compose,因为同时提供了 docker-compose.yaml 文件。请查看 config.inc.php 了解所有可用的环境变量!
⚠ 重要! ⚠>
再次提醒,该工具依赖于一个 已修补的 iLO 固件,该固件在 iLO SSH 接口中开放了一些用于控制风扇速度的命令。>
使用此工具必须安装此修补程序!
手动安装
以下指南基于以下环境执行
- 一台 HP ProLiant DL380e Gen8 服务器
- 已修补的 iLO 4 高级版 v2.77(2020年12月07日)
- 运行 Ubuntu 22.04 的 Proxmox 容器(LXC)
- Apache 2 和 PHP 8.1
环境准备
- 更新系统:
sudo apt-get update && sudo apt-get upgrade
``- 安装所需的软件包(
apache2,php,php-curl 和 php-ssh2):
`sh
sudo apt-get install apache2 php php-curl php-ssh2
`下载工具
- 使用
wget 和 tar 下载并解压最新的源代码:
`sh
wget -qL https://github.com/alex3025/ilo-fans-controller/archive/refs/heads/main.tar.gz -O - | tar -xz
`- 进入目录:
`sh
cd ilo-fans-controller-main
`配置和安装工具
- 使用您喜欢的文本编辑器打开
config.inc.php 文件,并根据您的配置更改变量。 > ℹ 注意: 请记住,
$ILO_HOST 是您的 iLO 接口的 IP 地址,而不是服务器本身的地址。 > ℹ 注意: 建议创建一个新的 iLO 用户,赋予访问 SSH 接口和 REST API(远程控制台访问)所需的最低权限。
例如:
`php
/*
ILO ACCESS CREDENTIALS
--------------
These are used to connect to the iLO
interface and manage the fan speeds.
*/ $ILO_HOST = '192.168.1.69';
$ILO_USERNAME = 'Administrator';
$ILO_PASSWORD = 'AdministratorPassword1234';
`- 完成后,在您的网页服务器根目录(通常是
/var/www/html/)中创建一个新的子目录,并将 config.inc.php、ilo-fans-controller.php 和 favicon.ico 复制到该目录中:
`sh
sudo mkdir /var/www/html/ilo-fans-controller
sudo cp config.inc.php ilo-fans-controller.php favicon.ico /var/www/html/ilo-fans-controller/
`
然后将 ilo-fans-controller.php 重命名为 index.php(以便在 URL 中无需指定文件名即可工作):
`sh
sudo mv /var/www/html/ilo-fans-controller/ilo-fans-controller.php /var/www/html/ilo-fans-controller/index.php
`- 就是这样!现在你可以通过
http:///ilo-fans-controller/ (或者用于 API 请求的 http:///ilo-fans-controller/index.php)访问该工具。> ℹ 注意: 如果你安装此工具的 Web 服务器 可以从你的网络外部访问,请记得 设置某种认证机制(如基本认证),以防止 _凌晨2点未授权的风扇管理_。
故障排除
遇到问题时首先要做的是 检查日志。
如果你使用的是 Apache,PHP 错误记录在
/var/log/apache2/error.log 文件中。如果你认为发现了一个漏洞,请提交问题,我会查看。
下面是一些常见问题及其解决方案。
预设未保存
如果在创建新预设时日志中出现以下错误:
log
PHP Warning: file_put_contents(presets.json): Failed to open stream: Permission denied in .../index.php on line X
sh sudo chown www-data:www-data /var/www/html/ilo-fans-controller/presets.json这可能是因为presets.json文件对 Web 服务器用户不可写。www-data
为了解决此问题,请运行以下命令将文件所有者更改为(默认的 Apache 用户):
jsonc { "Fan 1": 85, "Fan 2": 48, "Fan 3": 69, "Fan 4": 18, "Fan 5": 44, "Fan 6": 96 }?api=fansAPI 文档
该工具提供了一个简单的 API,可用于:
> 以下示例使用 cURL 演示如何使用 API,但您可以使用任何其他工具。
- 从 iLO 获取当前风扇转速
- 设置风扇转速
- 获取所有预设
- 创建预设
风扇 API
使用以下 API 时,您需要在 URL 末尾添加
。GET#### 获取风扇转速(
)
JSON 结构(响应)
cURL 示例
sh
curl 'http://jsonc { "action": "fans", // You can use either an object or a single number value (that will be applied to all fans): // Example: fans: { ... }POST#### 设置风扇速度(
)
JSON 结构示例
or fans: 50
"fans": {
"Fan 1": 40,
"Fan 2": 23,
"Fan 5": 70
// ...
}
}
cURL 示例
sh
curl -X POST 'http:///ilo-fans-controller/index.php' \
-H 'Content-Type: application/json' \
-d '{"action": "fans", "fans": 50}'
此命令将所有风扇设置为 50%。
_我个人在服务器启动时使用此命令自动降低风扇速度。_
预设 API
使用以下 API 需要在 URL 末尾添加
?api=preset。#### 获取所有预设(
GET)
JSON 结构(响应)
jsonc
[
{
"name": "Silent Mode",
"speeds": [15] // Like when setting the speeds, this number applies to all fans.
},
{
"name": "Normal Mode",
"speeds": [50]
},
{
"name": "Turbo Mode",
"speeds": [100]
},
{
"name": "My Custom Preset",
"speeds": [10, 10, 25, 30, 10, 15] // Here you can see the different speeds for each fan.
}
]
cURL 示例
sh
curl 'http:///ilo-fans-controller/index.php?api=presets'
#### 创建预设(
POST)
JSON结构示例
jsonc
{
"action": "presets",
// WARNING: The API will replace all the saved presets with the new data!
// To add a preset you should get all the presets first and then add the new one to the existing array.
"presets": [
{
"name": "Silent Mode",
"speeds": [15]
},
{
"name": "Normal Mode",
"speeds": [50]
},
{
"name": "Turbo Mode",
"speeds": [100]
},
{
"name": "My Custom Preset",
"speeds": [10, 10, 25, 30, 10, 15]
}
]
}
cURL 示例
sh
curl -X POST 'http:///ilo-fans-controller/index.php' \
-H 'Content-Type: application/json' \
-d '{"action": "presets", "presets": [{"My Custom Preset 1": [50], "My Custom Preset 2": [10, 20, 30, 30, 20, 10]}]}'
``--- Tranlated By Open Ai Tx | Last indexed: 2026-02-10 ---