风扇控制
插件可以向 SignalRGB 的冷却系统公开风扇转速控制和温度报告。启用后,用户可以直接在 SignalRGB 中设置风扇曲线、监控 RPM 并查看温度读数。
支持风扇控制的插件的一般模式是:
- 导出返回
true的SupportsFanControl()以告诉 SignalRGB 此设备有可控制的风扇。 - 检测连接了哪些风扇(通过设备特定命令或 RPM 轮询)。
- 在
Initialize()中为每个检测到的风扇调用device.createFanControl()。 - 每帧在
Render()中:从设备读取当前 RPM 并使用device.setRPM()报告,然后从device.getFanLevel()读取所需转速并将其应用到设备。
在调用任何风扇级别函数之前,请始终检查 device.fanControlDisabled()。风扇控制可能不可用,因为用户没有 SignalRGB Pro,或者用户已手动禁用它。
SupportsFanControl()
Section titled “SupportsFanControl()”从插件导出以声明此设备支持风扇控制。SignalRGB 在初始化期间调用此函数以决定是否为设备显示冷却 UI。
export function SupportsFanControl() { return true; }如果此导出缺失或返回 false,风扇控制 API 仍然可以访问,但设备的冷却 UI 不会出现。
风扇控制器方法
Section titled “风扇控制器方法”device.fanControlDisabled()
Section titled “device.fanControlDisabled()”如果风扇控制当前不可用,则返回 true——原因是用户没有 SignalRGB Pro,或者用户已手动禁用冷却系统。
在调用 device.getFanLevel() 或 device.getNormalizedFanLevel() 之前始终检查此项。
| 返回值 | 类型 | 描述 |
|---|---|---|
| Disabled | boolean | 如果冷却 API 不可用则为 true |
if (device.fanControlDisabled()) { return;}device.createFanControl(fanId)
Section titled “device.createFanControl(fanId)”创建具有给定 ID 的风扇控制器。在 Initialize() 中为设备公开的每个风扇调用此函数。如果具有给定 ID 的控制器已存在,则调用被忽略。
| 参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| FanId | string | 此风扇控制器的唯一标识符 | "Fan1" |
device.createFanControl("Fan1");device.createFanControl("Fan2");device.removeFanControl(fanId)
Section titled “device.removeFanControl(fanId)”删除具有给定 ID 的风扇控制器。如果风扇不再被检测到或设备断开连接,请使用此函数。
| 参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| FanId | string | 要删除的风扇控制器 ID | "Fan1" |
device.getFanLevel(fanId)
Section titled “device.getFanLevel(fanId)”以百分比(0–100)返回给定风扇控制器的所需风扇转速,该值源自用户当前的风扇曲线设置。
| 参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| FanId | string | 风扇控制器 ID | "Fan1" |
| 返回值 | 类型 | 描述 | 示例 |
|---|---|---|---|
| FanSpeed | int | 所需转速,0–100 | 42 |
let speed = device.getFanLevel("Fan1"); // e.g. 42 (meaning 42%)device.getNormalizedFanLevel(fanId)
Section titled “device.getNormalizedFanLevel(fanId)”以标准化浮点数(0.0–1.0)返回所需风扇转速。当设备期望分数占空比而不是百分比时很有用。
| 参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| FanId | string | 风扇控制器 ID | "Fan1" |
| 返回值 | 类型 | 描述 | 示例 |
|---|---|---|---|
| FanSpeed | float | 所需转速,0.0–1.0 | 0.42 |
let speed = device.getNormalizedFanLevel("Fan1"); // e.g. 0.42device.setRPM(fanId, rpm)
Section titled “device.setRPM(fanId, rpm)”报告风扇控制器当前测量的 RPM。此值显示在冷却 UI 和系统监控图表中。
| 参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| FanId | string | 风扇控制器 ID | "Fan1" |
| RPM | int | 当前风扇转速(RPM) | 1337 |
let rpm = ReadRPMFromDevice("Fan1");device.setRPM("Fan1", rpm);温度传感器方法
Section titled “温度传感器方法”插件还可以向 SignalRGB 的冷却系统公开温度读数。这些值出现在系统监控中,可用作风扇曲线的输入源。
device.createTemperatureSensor(sensorId)
Section titled “device.createTemperatureSensor(sensorId)”创建具有给定 ID 的温度传感器。在 Initialize() 中为设备公开的每个温度源调用此函数。
| 参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| SensorId | string | 此传感器的唯一标识符 | "Coolant Temp" |
device.createTemperatureSensor("Coolant Temp");device.removeTemperatureSensor(sensorId)
Section titled “device.removeTemperatureSensor(sensorId)”删除具有给定 ID 的温度传感器。
| 参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| SensorId | string | 要删除的传感器 ID | "Coolant Temp" |
device.SetTemperature(sensorId, temperature)
Section titled “device.SetTemperature(sensorId, temperature)”报告给定传感器的当前温度。每帧从设备读取值后调用此函数。
| 参数 | 类型 | 描述 | 示例 |
|---|---|---|---|
| SensorId | string | 传感器 ID | "Coolant Temp" |
| Temperature | float | 当前温度(摄氏度) | 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");}