fixed broken logic introduced in e29a05f

Sorry people, when I rearranged the logic in e29a05f for:

$desired_temp1 < $weighted_temp < $desired_temp2

I ORed instead of ANDed, but didn't test it until I just pushed out my
ansible config to that host right now, several months later!
This commit is contained in:
Tim Connors 2025-01-22 18:03:38 +11:00
parent 2314f44268
commit e6ee99874a
2 changed files with 14 additions and 7 deletions

View file

@ -144,20 +144,24 @@ sub set_fans_servo {
# which we multiply later to be ranged roughly
# between 0-100% of
# ($static_speed_low - $static_speed_high)
if ($weighted_temp > $base_temp and
$weighted_temp < $desired_temp1) {
if (($weighted_temp > $base_temp) and
($weighted_temp < $desired_temp1)) {
# slope m = (y2-y1)/(x2-x1)
# y - y1 = (x-x1)(y2-y1)/(x2-x1)
# y1 = 0 ; x1 = base_temp ; y2 = demand1 ; x2 = desired_temp1
# x = weighted_temp
$demand = 0 + ($weighted_temp - $base_temp ) * ($demand1 - 0 )/($desired_temp1 - $base_temp );
} elsif (($weighted_temp >= $desired_temp1) or ($weighted_temp < $desired_temp2)) {
} elsif (($weighted_temp >= $desired_temp1) and
($weighted_temp < $desired_temp2)) {
# y1 = demand1 ; x1 = desired_temp1 ; y2 = demand2 ; x2 = desired_temp2
$demand = $demand1 + ($weighted_temp - $desired_temp1) * ($demand2 - $demand1)/($desired_temp2 - $desired_temp1);
} elsif ($weighted_temp >= $desired_temp2) {
# y1 = demand2 ; x1 = desired_temp2 ; y2 = demand3 ; x2 = desired_temp3
# demand will increase above $demand3 for temps above $desired_temp3, linearly, until we cap it below
$demand = $demand2 + ($weighted_temp - $desired_temp2) * ($demand3 - $demand2)/($desired_temp3 - $desired_temp2);
} else {
# the only possibility left is $weighted_temp < $base_temp
# which we've already decided is demand=0
}
printf "demand(%0.2f)", $demand if $print_stats;
$demand = int($static_speed_low + $demand/100*($static_speed_high-$static_speed_low));

View file

@ -93,7 +93,10 @@ Jan 03 02:59:23 pve1 fan-speed-control.pl[3648151]: --> disable dynamic fan cont
> sensors
> sudo hddtemp /dev/sd?
```
Whatever. Note that hddtemps and inlet (ambient air *intake*, which measures your room temperature) temperature are polled less frequently than coretemps, given they don't change as rapidly and are more expensive to read.
Whatever. Note that hddtemps and inlet (ambient air *intake*, which
measures your room temperature) temperature are polled less frequently
than coretemps, given they don't change as rapidly and are more expensive
to read.
This script monitors the ambient air temperature (you will likely
need to modify the $ipmi_inlet_sensorname variable to find the correct
@ -108,7 +111,7 @@ quickly towards full speed much beyond that. It also has an ambient
air temperature threshold of 32degrees where it gives up and delegates
control back to the firmware. The ambient temperature reading doesn't
normally affect how hard your fans have to spin, and is only used to
fallback to iDRAC mode so that your machine doesn't explode if eg., you've
fallback to iDRAC mode so that your machine doesn't explode if eg., you've
had an air-conditioning failure. Don't run your bedroom IT closet at 32
degrees yeah?
@ -129,7 +132,7 @@ Historical notes and stuff it's partially relying on behind the scenes, and if y
1. Enable IPMI in iDrac
2. Install ipmitool on linux, win or mac os
3. Run the following command to issue IPMI commands:
3. Run the following command to issue IPMI commands:
`ipmitool -I lanplus -H <iDracip> -U root -P <rootpw> <command>`
(we don't use lanplus though)
@ -175,4 +178,4 @@ TLDR; I take _NO_ responsibility if you mess up anything.
*****
All of this was inspired by [this Reddit post](https://www.reddit.com/r/homelab/comments/72qust/r510_noise/dnkofsv/) by /u/whitekidney
All of this was inspired by [this Reddit post](https://www.reddit.com/r/homelab/comments/72qust/r510_noise/dnkofsv/) by /u/whitekidney