So I bought a new Raspberry Pi 4 (4GB) and the official PoE+ HAT. It is running the 64-bit version of Ubuntu 21.04 Server, completely updated.
Controlling the PoE+ HAT-fan should/could be done through /etc/firmware/config.txt
, which I did.
This does turn on the fan, but it looks like somehow only 2 of the 4 settings are respected at the moment.
First, I tried this setup:
# PoE Hat Fan Speeds #
dtoverlay=rpi-poe
dtparam=poe_fan_temp0=60000
dtparam=poe_fan_temp0_hyst=5000
dtparam=poe_fan_temp1=65000
dtparam=poe_fan_temp1_hyst=5000
dtparam=poe_fan_temp2=70000
dtparam=poe_fan_temp2_hyst=5000
dtparam=poe_fan_temp3=75000
dtparam=poe_fan_temp3_hyst=5000
With these settings, the fan turns on semi-fast every 30-ish seconds around 70 degrees and stops again when it's hitting 65. Then it takes the Pi some 30-ish seconds to just heat up back to 70 again and the cycle starts again, with the Pi always within 65 and 70 degrees.
Then I changes the settings to the following:
# PoE Hat Fan Speeds #
dtoverlay=rpi-poe
dtparam=poe_fan_temp0=55000
dtparam=poe_fan_temp0_hyst=5000
dtparam=poe_fan_temp1=60000
dtparam=poe_fan_temp1_hyst=5000
dtparam=poe_fan_temp2=65000
dtparam=poe_fan_temp2_hyst=5000
dtparam=poe_fan_temp3=75000
dtparam=poe_fan_temp3_hyst=5000
Now the same happens, but the Pi is constantly between 60 and 65 degrees. Here's a graphic of the above mentioned situations:
So it seems like the Pi is only respecting the temp1
and temp2
settings and is using only one speed setting to stay within that range. When it 'accidentally' drops below 60 and should be in the range between temp0
and temp1
, the fan does not switch to a lower RPM, but just stops.
Just to check I once set temp3
to 50000
and then the fan does ramp up to it's full speed, so it does know how to use the different speeds.
I also tried changing them to temp1
, temp2
, temp3
and temp4
instead of starting with temp0
, but then temp4
is ignored and temp0
is replaced with the default setting 40 degrees, as expected.
So in short the PoE+ HAT fan is only working in the range between temp1
and temp2
and not below.
Am I missing something here?