Differences

This shows you the differences between the selected revision and the current version of the page.

hardware:fan 2008/12/06 12:44 hardware:fan 2017/12/04 19:30 current
Line 4: Line 4:
===== Fan Photos - In Context: ===== ===== Fan Photos - In Context: =====
<box 65%|[[http://duplo.org/~conny/dns-323/|Disassembly pictures]]>{{:8.jpg?w=120&h=89|1 - cover off/best/3 wires}} {{:3.jpg?w=120&h=90|2 - exterior}} {{:hardware:7.jpg?w=120&h=90|3 - interior, in case}}{{:hardware:10.jpg?w=120&h=90|4 - interior, out of case}}</box> <box 65%|[[http://duplo.org/~conny/dns-323/|Disassembly pictures]]>{{:8.jpg?w=120&h=89|1 - cover off/best/3 wires}} {{:3.jpg?w=120&h=90|2 - exterior}} {{:hardware:7.jpg?w=120&h=90|3 - interior, in case}}{{:hardware:10.jpg?w=120&h=90|4 - interior, out of case}}</box>
 +
 +
===== Variable-Speed Fan Details: ===== ===== Variable-Speed Fan Details: =====
-<box 45% left| Specification >+<box 45% left| Specifications >
^ Model          ^ [[http://www.addausa.com/fans.htm|ADDA AD0405HB-G73]] ^ ^ Model          ^ [[http://www.addausa.com/fans.htm|ADDA AD0405HB-G73]] ^
^ Dimensions    | 40mm x 40mm x 10mm                    | ^ Dimensions    | 40mm x 40mm x 10mm                    |
Line 18: Line 20:
Source: [[http://www.addausa.com/model_index.pdf|ADDA Model Numbering Scheme]]. Source: [[http://www.addausa.com/model_index.pdf|ADDA Model Numbering Scheme]].
</box> </box>
-<box 45% left | Guessed Specifications >+<box 45% left | Extrapolated Specifications<sup>*</sup> >
^ Speed    | 6000 rpm (revolutions per minute)  | ^ Speed    | 6000 rpm (revolutions per minute)  |
-^ Airflow  | 6.7 or 6.8 cfm                      |+^ Airflow  | 6.7 cfm                      |
^ Pressure  | 0.100 in (inches)                  | ^ Pressure  | 0.100 in (inches)                  |
^ Sound    | 25dB/A                              | ^ Sound    | 25dB/A                              |
^ Weight    | 24 grams                            | ^ Weight    | 24 grams                            |
-^ Power    | ~1.25 Watts (<sup>*</sup> see calculation below) |+^ Power    | 1.25 Watts
 + 
 +Extrapolated from:    \\ 
 +Source: [[http://www.addausa.com/model_index.pdf|ADDA Model Numbering Scheme]]. \\ 
 +Source: [[http://www.addausa.com/specifications/up-40.pdf|ADDA Fan Specification Chart]]. \\
-Source: Guessed values extrapolated from: [[http://www.addausa.com/specifications/up-40.pdf|ADDA Fan Specification Chart]]. Guessed, because the AD0405HB-G73 model is not listed.+* Model Number decoder indicates that the AD0405HB-G72 and AD0405HB-G73 are identical excluding the inclusion of the speed sensor and exclusion of the alarm.
-<sup>*</sup>Power (Watts) = Current(Amperes) x Volts (So, at full-rated standard power) Power = 0.25 Amperes (Current) x 5.0 Volts  ==  1.25 Watts. 
</box> </box>
Line 36: Line 41:
  * Cut out the protective piece of plastic from the back plate, enlarged the opening, added some padding. After that the unit is MUCH quieter \\ [[http://forum.dsmg600.info/p1226-Yesterday-182055.html#p1226|ondro727's Fan Hack]]   * Cut out the protective piece of plastic from the back plate, enlarged the opening, added some padding. After that the unit is MUCH quieter \\ [[http://forum.dsmg600.info/p1226-Yesterday-182055.html#p1226|ondro727's Fan Hack]]
 +
Line 45: Line 51:
  * [[http://forum.dsmg600.info/t163-DNS323-disassembly-pictures.html|DNS-323 Disassembly Pictures]]   * [[http://forum.dsmg600.info/t163-DNS323-disassembly-pictures.html|DNS-323 Disassembly Pictures]]
  * [[http://forum.dsmg600.info/t2567-Temperature-reading-problem!.html|Temperature control problem]]   * [[http://forum.dsmg600.info/t2567-Temperature-reading-problem!.html|Temperature control problem]]
-  * [[http://forum.dsmg600.info/t2800-another-controller.html|Yet another fan controller]]+  * [[http://forum.dsmg600.info/t2800-another-controller.html|Yet another fan controller]] (See also [[http://nas-tweaks.net/CH3SNAS:Tutorials/fancontrol|fan control tutorial at nas-tweaks.net]])
====== Related Software/Commands ====== ====== Related Software/Commands ======
===== fanspeed ===== ===== fanspeed =====
 +Fan speed control for a1 and b1 hardware board:
<code>Query and set the FAN Speed control <code>Query and set the FAN Speed control
Usage: fanspeed [function] Usage: fanspeed [function]
Line 57: Line 64:
w rpm, set fan speed(rpm range:1935~30000) w rpm, set fan speed(rpm range:1935~30000)
g get fan speed</code> g get fan speed</code>
 +Fanspeed control for c1 hardware board (firmware 1.08):
 +<code>fanspeed - query and set the FAN Speed control
 +
 +Usage: fanspeed [function]
 +
 +Functions:
 + h high speed(7000rpm)
 + l low speed(2700rpm)
 + s stop fan
 + g get fan status
 + the below option only support in a1 and b1 hardware board 
 + w rpm, set fan speed(rpm range:0 for stop, 2700~7000)
 +</code>
 +
=== Examples: === === Examples: ===
<code>fanspeed g</code> <code>fanspeed g</code>
Line 66: Line 87:
The fancontrol process appears to restart the fan within a minute if it's running. The fancontrol process appears to restart the fan within a minute if it's running.
<code>fanspeed w 30000</code> <code>fanspeed w 30000</code>
-It has been reported that the fan doesn't spin faster than 6,301 rpm, regardless of the set fan speed.+==== Warnings: ==== 
 +  * It has been reported that the fan doesn't spin faster than 6,301 rpm, regardless of the set fan speed
 +  * **fanspeed w rpm** does not work with C1 hardware board (see label, bottom of hardware). Please test your hardware since the script below will not work. A script that could work is [[http://forum.dsmg600.info/viewtopic.php?id=5643|here]].
=== Questions: === === Questions: ===
  * What are the best ways to detect if the hard drive is in sleep mode (for use in a script)?   * What are the best ways to detect if the hard drive is in sleep mode (for use in a script)?
Line 72: Line 95:
=== File Location: === === File Location: ===
\sys\crfs\sbin\fanspeed \sys\crfs\sbin\fanspeed
 +
Line 93: Line 117:
  * Does anyone have the source? (reverse engineered code: [[http://www.inreto.de/dns323/utils/]])   * Does anyone have the source? (reverse engineered code: [[http://www.inreto.de/dns323/utils/]])
  * Is documentation essentially right?: [[http://www.google.com/url?sa=t&ct=res&cd=3&url=http%3A%2F%2Fdownload.siliconexpert.com%2Fpdfs%2Fquickdata%2Fphi%2Flm75a_1.pdf&ei=-gfKRbT7GIiGQaLxwKgG&usg=__obkkeDE-YlW6G231wOhnCUIoXxA=&sig2=grVCwxRiRLoR8TNrWK0kuw|Thyst & Tos Information - found by @galf]]   * Is documentation essentially right?: [[http://www.google.com/url?sa=t&ct=res&cd=3&url=http%3A%2F%2Fdownload.siliconexpert.com%2Fpdfs%2Fquickdata%2Fphi%2Flm75a_1.pdf&ei=-gfKRbT7GIiGQaLxwKgG&usg=__obkkeDE-YlW6G231wOhnCUIoXxA=&sig2=grVCwxRiRLoR8TNrWK0kuw|Thyst & Tos Information - found by @galf]]
-  * 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)+  * 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) (It seems to follow the C/F setting in the web-config's Email-alerts)
=== File Location: === === File Location: ===
\sys\crfs\sbin\temperature \sys\crfs\sbin\temperature
Line 109: Line 133:
===== Fan Control Scripts: ===== ===== Fan Control Scripts: =====
 +
 +
 +
Line 117: Line 144:
I hope this can be useful to you as it would to me as a newbie who is technically challenged. 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.+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.
**The Quick and Easy** **The Quick and Easy**
-  - Download {{:hardware:fonz_funplug_0.3_w_fan_control.rar}}.  + 
-  - Open the .rar archive (use [[http://www.rarlab.com/download.htm|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. +  * Download {{:hardware:fonz_funplug_0.3_w_fan_control.rar}}.  
-  - 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 [[http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html|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. +(In script fun_plug variable PATH haven't been set correctly. Correct line is: 
-  - If the temperature shows in Celsius, in the same telnet screen, type:<code bash>mv /mnt/HD_a2/ctrl_fanspeed.C /mnt/HD_a2/ctrl_fanspeed.sh +    PATH=${PATH}:${BINDIR}  
-reboot</code>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. +Somehow device store system variables, so incorrectly set it can cause improper functioning even if you reset device to factory default, or even reburn firmware. In script fan_control.sh we have to add another line: 
-__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.+    export PATH 
 +right next after PATH declaration line. After these changes HD usage and heat generation of the device dropped dramatically. Another suggestion set temeratures T1 and T2, 97F and 105F accordingly.) 
 +  * Open the .rar archive (use [[http://www.rarlab.com/download.htm|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 [[http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html|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** **The Nitty Gritty Steps**
  - Get a text editor like [[http://http://sourceforge.net/projects/notepad-plus/|Notepad++]] to save text files in linux format (LF).   - Get a text editor like [[http://http://sourceforge.net/projects/notepad-plus/|Notepad++]] to save text files in linux format (LF).
-  - Create a new text file called [[howto:fun_plug|fun_plug]] (no extensions), with the following line:<code bash>/mnt/HD_a2/ctrl_fanspeed.sh</code>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 [[http://www.inreto.de/dns323/fun-plug/|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:<code bash># run fanspeed controller script+  - Create a new text file called [[howto:fun_plug|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  
 +[[http://www.inreto.de/dns323/fun-plug/|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:<code bash># run fanspeed 
 +controller script 
FAN_SPEED=/mnt/HD_a2/ctrl_fanspeed.sh FAN_SPEED=/mnt/HD_a2/ctrl_fanspeed.sh
if [ -x $FAN_SPEED ]; then if [ -x $FAN_SPEED ]; then
Line 136: Line 201:
$FAN_SPEED & $FAN_SPEED &
echo "* OK" echo "* OK"
-fi</code>  +fi 
-  - 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.+ 
 +  - 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!   - 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.+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 [[howto:telnet|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.+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 [[howto:telnet|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. Is it safe to assume all US models are reporting in Fahrenheit? Mine does.
Line 192: Line 266:
# edit it to work. # edit it to work.
# Additional changes by gartylad. # Additional changes by gartylad.
 +# Uriel : corrected zero fanspeed when T exceeded T2
 +#        minor code updates
# Set the path to use RAM-disk instead of harddrive, to # Set the path to use RAM-disk instead of harddrive, to
Line 203: Line 279:
mkdir -p ${LOGDIR} mkdir -p ${LOGDIR}
-# Kill the old fan controller. +echo "Installing fan_ctrl.sh" >${FANLOGFILE} 
-kill -9 `pidof fancontrol` + 
-echo "Fancontrol killed. Installing fan_ctrl.sh" >${FANLOGFILE}+# Kill the old fancontrol process if required 
 +OLDPID=`pidof fancontrol` 
 +if [ "$OLDPID" != "" ] 
 +then 
 +  kill -9 $OLDPID 
 +  echo "killed old fancontrol process ($OLPID)"; >;>${FANLOGFILE} 
 +fi 
 + 
# With temps between T1 and T2, the script automatically # With temps between T1 and T2, the script automatically
Line 215: Line 299:
RPM1=2300 RPM1=2300
RPM2=4500 RPM2=4500
 +RPM3=15000
 +DRPM_DT=`expr \( $RPM2 - $RPM1 \) / \( $T2 - $T1 \)`
 +
while [ 1 ] while [ 1 ]
Line 220: Line 307:
  T=`temperature g 0`   T=`temperature g 0`
  T=${T##*=}   T=${T##*=}
 +
  # Check if temperature has fallen below T1 value   # Check if temperature has fallen below T1 value
  if [ $T -lt $T1 ]; then   if [ $T -lt $T1 ]; then
- # Temp below T1 fan stops +    # Temp below T1 fan stops 
- CALCTEMP=`expr 0` +   NEWRPM=0 
 +  elif [ $T -gt $T2 ]; then 
 +    # Temp greater than T2 requires emergency action 
 +    NEWRPM=$RPM3
  else   else
- # Temp above T1 fan starts +    # Compute new RPMs if in T1..T2 range 
- CALCTEMP=`expr \( \( $T2 \< $T \) \* $RPM2 \) \| \( \( $RPM1 + \( $RPM2 - $RPM1 \) \* \( $T - $T1 \) \/ \( $T2 - $T1 \) \) \& \( $T \>= $T1 \) \)`+   NEWRPM=`expr $RPM1 + \( \( $T - $T1 \) \* $DRPM_DT \)`
  fi   fi
 +
 +
  CONVFTOC=`expr \( \( $T - 32 \) \* 10 + 9 \) \/ 18`   CONVFTOC=`expr \( \( $T - 32 \) \* 10 + 9 \) \/ 18`
-  newRPM=${CALCTEMP} +  fanspeed w $NEWRPM  
-  fanspeed w $newRPM  +  echo `date`" ::CURRENT::" $T"F" ${CONVFTOC}"C -- fanspeed:" $NEWRPM "(written to "${FANLOGFILE}")." >>${FANLOGFILE}
-  echo `date`" ::CURRENT::" $T"F" ${CONVFTOC}"C -- fanspeed:" $newRPM "(written to "${FANLOGFILE}")." >>${FANLOGFILE}+
  # wait for next cycle   # wait for next cycle
  sleep $update_interval   sleep $update_interval
done done
 +</code>
 +
 +If you are using ffp, you may save the script above as /ffp/bin/fan_ctrl.sh and create an additional script /ffp/start/fan.sh to auto-start your fan control script when the ffp initializes.
 +
 +<code bash>
 +#!/ffp/bin/sh
 +
 +# PROVIDE: fan_ctrl.sh
 +# REQUIRE: LOGIN
 +
 +. /ffp/etc/ffp.subr
 +
 +name="fan_ctrl.sh"
 +command="/ffp/bin/$name"
 +sshd_flags=
 +
 +start_cmd="fan_ctrl_start"
 +
 +fan_ctrl_start()
 +{
 +        proc_start_bg $command
 +}
 +
 +run_rc_command "$1"
</code> </code>

Navigation

Personal Tools