Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save doggeddalle/153bb481161d32924a3cfcb5dff62e92 to your computer and use it in GitHub Desktop.

Select an option

Save doggeddalle/153bb481161d32924a3cfcb5dff62e92 to your computer and use it in GitHub Desktop.
Convert NVIDIA GPU Power (W) → Temperature Sensor for Fan Control
This guide shows how to convert NVIDIA GPU power usage (watts) into a temperature-style sensor that can be used inside Fan Control.
The method works by:
Reading GPU power draw using NVIDIA System Management Interface
Converting watts → percentage of GPU TDP
Writing the result to a .sensor file
Importing that file into Fan Control as a File Sensor
Fan Control then treats the number as °C, letting you drive fan curves from GPU power consumption instead of temperature.
Concept
Example with a 350W GPU:
GPU Power Calculation Sensor Output
0W 0 / 350 × 100 0
175W 175 / 350 × 100 50
350W 350 / 350 × 100 100
Fan Control reads:
50
and interprets it as:
50°C
This allows you to design curves like:
30°C = idle GPU power
70°C = gaming load
100°C = full power draw
Architecture
nvidia-smi
│ (read GPU watts)
gpu_power.ps1
│ (scale vs TDP)
gpu_power.sensor
Fan Control File Sensor
Update loop:
gpu_power.bat
└── runs PowerShell script every ~3 seconds
Startup:
hide_gpu_script.vbs
└── launches the loop hidden
Files
Your gist should contain:
gpu-power-to-temp/
├── gpu_power.ps1
├── gpu_power.bat
└── hide_gpu_script.vbs
1. Power Conversion Script
gpu_power.ps1
# GPU TDP in Watts
$TDP = 350
# Query GPU power draw
$power = & nvidia-smi --query-gpu=power.draw --format=csv,noheader,nounits
$power = [float]$power
# Convert to percentage of TDP
$value = ($power / $TDP) * 100
# Round to whole number
$value = [math]::Round($value)
# Write to sensor file
Set-Content -Path ".\gpu_power.sensor" -Value $value
2. Loop Script
gpu_power.bat
Runs the script repeatedly so the sensor stays updated.
@echo off
:loop
powershell -ExecutionPolicy Bypass -File "%~dp0gpu_power.ps1"
timeout /t 3 >nul
goto loop
Update interval:
3 seconds
You can change it if desired.
3. Hidden Launcher
hide_gpu_script.vbs
Runs the loop without opening a console window.
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "gpu_power.bat" & Chr(34), 0
Set WshShell = Nothing
4. Configure GPU TDP
Edit the PowerShell script:
$TDP = 350
Replace with your GPU's stock TDP.
Examples:
GPU TDP
RTX 3060 170
RTX 3070 220
RTX 3080 320
RTX 3090 350
RTX 4090 450
The script assumes you already know your GPU's TDP.
5. Enable Startup
Press:
Win + R
Type:
shell:startup
Place:
hide_gpu_script.vbs
inside this folder.
Now the sensor generator starts automatically when Windows logs in.
6. Configure Fan Control
Open Fan Control.
Add File Sensor
Sensors
→ Add
→ File Sensor
Select:
gpu_power.sensor
Fan Control will now read the value as:
Temperature (°C)
Example Fan Curve
Example GPU case fan curve:
Sensor Value Fan Speed
20 20%
40 35%
60 50%
80 75%
100 100%
Meaning:
80% GPU TDP = ~80°C sensor value
Why This Is Useful
GPU temperature can lag behind power spikes.
Using power draw instead:
fans respond immediately
reflects actual GPU workload
smoother fan ramping
Useful for:
GPU-heavy workloads
ML inference
video encoding
gaming spikes
Troubleshooting
Sensor stuck at 0
Ensure:
nvidia-smi
works in terminal.
Sensor file not updating
Check the script folder contains:
gpu_power.sensor
and verify the loop script is running.
Fan Control can't read file
Confirm the file contains only a number:
57
No text or decimals.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment