跳转到内容

风扇控制

插件可以向 SignalRGB 的冷却系统公开风扇转速控制和温度报告。启用后,用户可以直接在 SignalRGB 中设置风扇曲线、监控 RPM 并查看温度读数。

支持风扇控制的插件的一般模式是:

  1. 导出返回 trueSupportsFanControl() 以告诉 SignalRGB 此设备有可控制的风扇。
  2. 检测连接了哪些风扇(通过设备特定命令或 RPM 轮询)。
  3. Initialize() 中为每个检测到的风扇调用 device.createFanControl()
  4. 每帧在 Render() 中:从设备读取当前 RPM 并使用 device.setRPM() 报告,然后从 device.getFanLevel() 读取所需转速并将其应用到设备。

在调用任何风扇级别函数之前,请始终检查 device.fanControlDisabled()。风扇控制可能不可用,因为用户没有 SignalRGB Pro,或者用户已手动禁用它。


从插件导出以声明此设备支持风扇控制。SignalRGB 在初始化期间调用此函数以决定是否为设备显示冷却 UI。

export function SupportsFanControl() { return true; }

如果此导出缺失或返回 false,风扇控制 API 仍然可以访问,但设备的冷却 UI 不会出现。


如果风扇控制当前不可用,则返回 true——原因是用户没有 SignalRGB Pro,或者用户已手动禁用冷却系统。

在调用 device.getFanLevel()device.getNormalizedFanLevel() 之前始终检查此项。

返回值类型描述
Disabledboolean如果冷却 API 不可用则为 true
if (device.fanControlDisabled()) {
return;
}

创建具有给定 ID 的风扇控制器。在 Initialize() 中为设备公开的每个风扇调用此函数。如果具有给定 ID 的控制器已存在,则调用被忽略。

参数类型描述示例
FanIdstring此风扇控制器的唯一标识符"Fan1"
device.createFanControl("Fan1");
device.createFanControl("Fan2");

删除具有给定 ID 的风扇控制器。如果风扇不再被检测到或设备断开连接,请使用此函数。

参数类型描述示例
FanIdstring要删除的风扇控制器 ID"Fan1"

以百分比(0–100)返回给定风扇控制器的所需风扇转速,该值源自用户当前的风扇曲线设置。

参数类型描述示例
FanIdstring风扇控制器 ID"Fan1"
返回值类型描述示例
FanSpeedint所需转速,0–10042
let speed = device.getFanLevel("Fan1"); // e.g. 42 (meaning 42%)

以标准化浮点数(0.0–1.0)返回所需风扇转速。当设备期望分数占空比而不是百分比时很有用。

参数类型描述示例
FanIdstring风扇控制器 ID"Fan1"
返回值类型描述示例
FanSpeedfloat所需转速,0.0–1.00.42
let speed = device.getNormalizedFanLevel("Fan1"); // e.g. 0.42

报告风扇控制器当前测量的 RPM。此值显示在冷却 UI 和系统监控图表中。

参数类型描述示例
FanIdstring风扇控制器 ID"Fan1"
RPMint当前风扇转速(RPM)1337
let rpm = ReadRPMFromDevice("Fan1");
device.setRPM("Fan1", rpm);

插件还可以向 SignalRGB 的冷却系统公开温度读数。这些值出现在系统监控中,可用作风扇曲线的输入源。

创建具有给定 ID 的温度传感器。在 Initialize() 中为设备公开的每个温度源调用此函数。

参数类型描述示例
SensorIdstring此传感器的唯一标识符"Coolant Temp"
device.createTemperatureSensor("Coolant Temp");

删除具有给定 ID 的温度传感器。

参数类型描述示例
SensorIdstring要删除的传感器 ID"Coolant Temp"

device.SetTemperature(sensorId, temperature)

Section titled “device.SetTemperature(sensorId, temperature)”

报告给定传感器的当前温度。每帧从设备读取值后调用此函数。

参数类型描述示例
SensorIdstring传感器 ID"Coolant Temp"
Temperaturefloat当前温度(摄氏度)34.5
let temp = ReadTemperatureFromDevice();
device.SetTemperature("Coolant Temp", temp);

export function SupportsFanControl() { return true; }
export function Initialize() {
device.createFanControl("Fan1");
device.createFanControl("Fan2");
device.createTemperatureSensor("Coolant Temp");
}
export function Render() {
// Report current RPM — required every frame or speed will hardlock
device.setRPM("Fan1", ReadRPM(1));
device.setRPM("Fan2", ReadRPM(2));
// Report current temperature
device.SetTemperature("Coolant Temp", ReadTemp());
// Apply desired speed to hardware
if (!device.fanControlDisabled()) {
SetDeviceFanSpeed(1, device.getFanLevel("Fan1"));
SetDeviceFanSpeed(2, device.getFanLevel("Fan2"));
}
}
export function Shutdown() {
device.removeFanControl("Fan1");
device.removeFanControl("Fan2");
device.removeTemperatureSensor("Coolant Temp");
}