跳到內容

風扇控制

外掛程式可以向 SignalRGB 的冷卻系統開放風扇轉速控制和溫度回報功能。啟用後,使用者可以直接在 SignalRGB 中設定風扇曲線、監控 RPM 並查看溫度讀數。

支援風扇控制的外掛程式一般流程為:

  1. 匯出 SupportsFanControl() 返回 true,告知 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"); // 例如 42(表示 42%)

以標準化浮點數(0.0–1.0)返回所需的風扇轉速。當裝置期望分數佔空比而非百分比時很有用。

參數類型說明範例
FanIdstring風扇控制器 ID"Fan1"
返回值類型說明範例
FanSpeedfloat所需轉速,0.0–1.00.42
let speed = device.getNormalizedFanLevel("Fan1"); // 例如 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() {
// 回報當前 RPM——每幀必須呼叫,否則速度將被鎖定
device.setRPM("Fan1", ReadRPM(1));
device.setRPM("Fan2", ReadRPM(2));
// 回報當前溫度
device.SetTemperature("Coolant Temp", ReadTemp());
// 將所需速度應用到硬體
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");
}