IEI PUZZLE M902 Fan speed is too low

IEI PUZZLE M902 Fan speed is too low
PWM doesn't work
(because the temperature is over 80 degree Celsius)

Should this be fixed

I added it to rc.local for emergency handling
21.02
echo "255" > /sys/class/hwmon/hwmon0/pwm1
echo "255" > /sys/class/hwmon/hwmon0/pwm2

22.03
echo "255" > /sys/class/hwmon/hwmon6/pwm1
echo "255" > /sys/class/hwmon/hwmon6/pwm2

My PUZZLE-M902 fan is running at full speed, what should I do? The firmware is 22.03,thanks.

tried the solution above, with other values ?

I did not try it and the device was returned.

then why are you asking ... ? :thinking:

I like it very much, if I can solve it, I will buy it again.

I see, best of luck then, fingers X:ed.

I just configured mine and noticed my temps were crazy high.. Thanks for this.

before
fan1: 1200 RPM

after
fan1: 5160 RPM

hopefully i can find a happy medium where the fan has some longevity and the temps aren't too high.

I've spent two solid days with it, and plan to write up some takeaways on the device soon.

Cheers,
th0th

OK, I could not find any fan curve settings or software in the repository, so this "solution", and I use the term very loosely, is super kludgy, but it's simple and easy. After several minutes of grepping /sys/class/hwmon, changing the values for /sys/class/hwmon/hwmon6/pwm1 and comparing it with the output from sensors, I made a few observations.

  1. one of the sensors seems to consistently run hotter than the others (in my case it's the reading at /sys/class/hwmon/hwmon3/temp1_input), so I'll use this sensor for my fan setting. It reads around 56C when the fan is at full bore. At this same time, the two ISA sensors are at 39C and 41C.
  2. there is only 1 fan in my puzzle m902; changing /sys/class/hwmon/hwmon6/pwm2 has no effect, only pwm1 matters.
  3. I'm sure this is coincidence, but there seems to be a ~20x multiple between the pwm setting and fan speed. pwm=1 -> fanspeed=0, 50 -> 900, 100 -> 1980, 150 -> 3000, 200 -> 4020, 255 -> 5160.
  4. setting pwm1 to 0 stops the fan, I had thought maybe it would set it to auto. Does anyone know what the original settings were? I'm curious why my fan was originally running at 1200RPM (and ~80C) and what the settings were.

So I wrote a bash script that would look at the temp for hwmon3; if it was higher than 63C it would increase the PWM setting by 20, below 58C it would lower it by 20. I am running it via cron every 10 minutes.

#!/bin/bash
pwmsetting=$(cat /sys/class/hwmon/hwmon6/pwm1)
temp=$(cat /sys/class/hwmon/hwmon3/temp1_input)
tempC=${temp:0:2}.${temp:2:3}
fanspeed=$(cat /sys/class/hwmon/hwmon6/fan1_input)
now=$(date)
if [ $temp -gt 63000 ]
then
        if [ $pwmsetting -eq 255 ]
        then
                echo $now: ALERT temp at $tempC C. and fanspeed at maxmimum.  >> /var/log/fanscript.log
        elif [ $pwmsetting -gt 235 ]
        then
                echo $now: ALERT temp at $tempC C., changing fanspeed to maxmimum -- pwm1=255.  >> /var/log/fanscript.log
                echo 255 > /sys/class/hwmon/hwmon6/pwm1
        else
        newsetting=$((pwmsetting+20))
        echo $newsetting > /sys/class/hwmon/hwmon6/pwm1
        tempC = $(($temp/1000))
        echo $now: temp at $tempC C. and fanspeed at $fanspeed. Raised pwm setting from $pwmsetting to $newsetting >> /var/log/fanscript.log
        fi
elif [ $temp -lt 58000 ]
then
        newsetting=$((pwmsetting-20))
        echo $newsetting > /sys/class/hwmon/hwmon6/pwm1
        tempC = $(($temp/1000))
        echo $now: temp at $tempC C. and fanspeed at $fanspeed. Lowered pwm setting from $pwmsetting to $newsetting >> /var/log/fanscript.log
else
        echo $now: temp at $tempC C. and fanspeed at $fanspeed. Leaving pwm setting unchanged at $pwmsetting >> /var/log/fanscript.log
fi

I understand that this is not very elegant, so hopefully someone will come along with a real solution. In the meantime I guess I'll use this and check the logs to make some fine tuning. maybe I can add email alerts if fan at max and still running too hot etc.

Theoretically, these tasks should be done by the devices tree
but I don't know why it didn't work