Noteworthy changes
Curve value format
- Curve step values can now be specified as percentages (e.g.
40: 20%) - The previous integer range
[0..255]is still supported; old configs should be migrated to
floats (40: 20.0) or percentages (40: 20%)
Behavior changes
pwmMap expansion now uses step interpolation:
- A key
kwith valuevmeans: use hardware PWMvfor all internal values ≥ k up to the
next key. Previously, fan2go used nearest-neighbor (transitioning at the midpoint between
adjacent keys). - Example —
{0:0, 64:128, 192:255}: previously switched at ~32 and ~128; now switches exactly
at 64 and 192. - If you have a sparse
pwmMap, verify it still behaves as intended after upgrading.
Curve value → fan speed mapping has changed:
0/0%→ stop (PWM 0), unlessneverStop: true, then → MinPwm1/1%→ MinPwm (regardless ofneverStop)255/100%→ MaxPwm- Values in
[1..255]/[1%..100%]are linearly scaled to[MinPwm..MaxPwm] - Verify your setup after upgrading; adjust curve values if behavior has changed
sanityCheck.fanModeChangedByThirdParty is now disabled by default:
- Previously, fan2go re-asserted manual PWM mode on every control cycle (effectively always on)
- It is now opt-in (
enabled: falseby default) and throttled (default: every 10 seconds when enabled) - Enable it if a buggy BIOS or third-party software keeps overwriting fan2go's fan mode setting:
sanityCheck: fanModeChangedByThirdParty: enabled: true throttleDuration: 10s # optional, default
New options
useUnscaledCurveValues (fan config, default: false):
- When
true, disables[MinPwm..MaxPwm]scaling; curve values are passed through almost
unchanged (assuming a standard 1:1pwmMap) neverStop: truestill clamps values below MinPwm up to MinPwm
--assume-pwm-map-identity flag for fan2go fan init:
- Skips automatic detection of
setPwmToGetPwmMapduring fan initialization; assumes a 1:1 mapping - Worth trying if fan init produces wrong or unexpected results — particularly on fans that don't
immediately report back the last-set PWM value during the measurement sequence - If your fan's auto-generated
pwmMapis incorrect after initialization, configure it manually
using thepwmMapfan config option
Changelog
- Bump github.com/oklog/run from 1.1.0 to 1.2.0 (#413) by @dependabot[bot]
- Bump github.com/spf13/cobra from 1.9.1 to 1.10.2 (#438) by @dependabot[bot]
- Bump github.com/stretchr/testify from 1.10.0 to 1.11.1 (#439) by @dependabot[bot]
- Bump github.com/go-viper/mapstructure/v2 from 2.3.0 to 2.4.0 (#422) by @dependabot[bot]
- Bump go.etcd.io/bbolt from 1.4.2 to 1.4.3 (#420) by @dependabot[bot]
- Bump golang.org/x/crypto from 0.38.0 to 0.45.0 (#432) by @dependabot[bot]
- Fixes for fans without getPwm (#437) by @pborzenkov
- Bump golangci/golangci-lint-action from 9.1.0 to 9.2.0 (#436) by @dependabot[bot]
- Bump golangci/golangci-lint-action from 8.0.0 to 9.1.0 (#434) by @dependabot[bot]
- Bump actions/checkout from 5 to 6 (#433) by @dependabot[bot]
- Bump github.com/NVIDIA/go-nvml from 0.12.9-0 to 0.13.0-1 (#423) by @dependabot[bot]
- Bump actions/checkout from 4 to 5 (#419) by @dependabot[bot]
- Bump actions/setup-go from 5 to 6 (#427) by @dependabot[bot]
- Bump github.com/go-viper/mapstructure/v2 from 2.2.1 to 2.3.0 (#412) by @dependabot[bot]
- Bump go.etcd.io/bbolt from 1.4.1 to 1.4.2 (#414) by @dependabot[bot]
🚀 Features and ✨ Enhancements
- Allow percent values for speed in linear curves (#390) by @DanielGibson
🐛 Bugfixes
- avoid writing an empty setPwmToGetPwm map to the database (#442) by @markusressel