Does anyone know whether 'temperature g 0' ever reports in Celsius? The wiki's first script seems to think so, but reports so far seem to point to the usage of Fahrenheit as standard. –Yes, it reports in Celsius (in Sweden)

I hope this can be useful to you as it would to me as a newbie who is technically challenged.

The script (contributed by a collaboration of members here) replaces the factory fan control process, checks for case temperature at set regular intervals and modify fan rotational speed in a positive ratio. When drives spin down at idle, the fan will stop as the box temperature lowers to a user defined value. This is a feature that should have been implemented by the D-Link firmware (but isn't), as it makes no sense to have the fan running all the time. It's quite simple to do, and it effectively reduces noise and wear. Please feel free to make corrections.

Open the .rar archive (use WinRAR), drop the four files in the archive into your root folder (e.g. /Volume_1/) via ftp or just by simple drag and drop. Reboot immediately.

After the power light stops blinking, wait one minute. Then telnet into your unit's local IP (default is 192.168.0.32) using a telnet/ssh client (try PuTTY) and type temperature g 0 to check your DNS-323's temperature readings.

If the temperature shows Fahrenheit unit, you are done (you may also type rm /mnt/HD_a2/ctrl_fanspeed.C in telnet to delete the Celsius version script). If it's below 108F, the fan should have stopped. You can type fanspeed g to check the fan RPM.

If the temperature shows in Celsius, in the same telnet screen, type:

mv /mnt/HD_a2/ctrl_fanspeed.C /mnt/HD_a2/ctrl_fanspeed.sh
reboot

The last command of course reboots your unit. After which you can recheck the temperature and fan. If it's below 43C, the fan should have stopped, and you are done.

Warning: it's imperative that you follow through steps 3, 4, and 5 to verify temperature units, as the fan may never run if you have the wrong numbers feeding the script, possibly resulting in heat damage to hardware. If you encountered problems and must abort, just remove ctrl_fanspeed.sh from your root directory to reset factory fan control settings.

The Nitty Gritty Steps

Get a text editor like Notepad++ to save text files in linux format (LF).

Create a new text file called fun_plug (no extensions), with the following line:

/mnt/HD_a2/ctrl_fanspeed.sh

save the text file with linux format (LF) to the root directory of your DNS-323 drive (e.g. /Volume_1/ or just drag and drop into your mapped drive).
Alternatively, you can get fonz's fun_plug pack (which adds telnet feature among other things) and add the above line at the end of the included fun_plug file (don't drop it into /mnt/HD_a2/fun_plug.d/start/ directory as it's a loop that stops any script that follows it from loading), or use the folowing lines at the end of the fun_plug file:

Create another text file, copy and paste the “general use” version of the fan-control script below. Adjust the parameters to your liking (description in comments), though it works fine without any modification (assuming your unit reports temperature in Fahrenheit). Save the file as ctrl_fanspeed.sh at the root directory (e.g. /Volume_1/) of your DNS-323 drive, same location as the fun_plug file.

Reboot the DNS-323 using D-Link's control page and you are done!

You should notice that immediately after booting (when the power light stops flashing) the fan stops. That is if your drive is cooler than the lower limit set in the script (default 108F or 42C), which will eventually be the case after HD spins down at idle, or if you boot the unit cold.

Also make sure your DNS-323 unit reports temperature readings that matches the temperature unit in the script, which is in Fahrenheit (Important! You don't want 108C as lower limit!). You can do this with a simple telnet command temperature g 0. You will need to convert the temperature parameters in the script if your DNS-323 returns temperature readings in Celsius.

Is it safe to assume all US models are reporting in Fahrenheit? Mine does.

This sample script changes the speed of the fan based on the reported temperature. Note that this script is written with temperature reference in Celsius. By running temperature g 0 via telnet you can see what temperature-unit your box uses. The parameter-values are only given as examples.

The script can be run in the background where it will remain active and periodically update the speed of the fan. To avoid clashes with the fancontrol process, it is probably best to kill it before this script is run.

This script automatically kills the factory fancontrol process and loads the script into RAM disk, so to avoid periodic disk spin-ups as the script runs continuously. You can also comment-out (adding # in front of) the 3 lines following # Create a logfile on the RAM-disk as well as every line that starts with echo to turn off logging. This script is written with temperature reported in Fahrenheit. You will have to convert the T1/T2 parameter values if your unit reports in Celsius.

It's a more polished example of a script to control fan speeds. Please read through the thread Fan does run all the time before you install this script.