風扇控制
外掛程式可以向 SignalRGB 的冷卻系統開放風扇轉速控制和溫度回報功能。啟用後,使用者可以直接在 SignalRGB 中設定風扇曲線、監控 RPM 並查看溫度讀數。
支援風扇控制的外掛程式一般流程為:
- 匯出
SupportsFanControl()返回true,告知 SignalRGB 此裝置具有可控制的風扇。 - 偵測連接的風扇(通過裝置特定命令或 RPM 輪詢)。
- 在
Initialize()中為每個偵測到的風扇呼叫device.createFanControl()。 - 在
Render()的每一幀中:從裝置讀取當前 RPM 並用device.setRPM()回報,然後從device.getFanLevel()讀取所需轉速並應用到裝置。
在呼叫任何風扇等級函式之前,務必檢查 device.fanControlDisabled()。風扇控制可能不可用,原因可能是使用者沒有 SignalRGB Pro,或者使用者手動停用了冷卻功能。
外掛程式匯出
Section titled “外掛程式匯出”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"); // 例如 42(表示 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"); // 例如 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() { // 回報當前 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");}