hddfancontrol


Namehddfancontrol JSON
Version 1.2.8 PyPI version JSON
download
home_pagehttps://github.com/desbma/hddfancontrol
SummaryControl system fan speed by monitoring hard drive temperature
upload_time2018-02-04 21:53:52
maintainer
docs_urlNone
authordesbma
requires_python
license
keywords hdd drive temperature fan control speed
VCS
bugtrack_url
requirements python-daemon
Travis-CI
coveralls test coverage No coveralls.
            HDD Fan control
===============

|PyPI version| |AUR version| |Tests status| |Coverage| |Lines of code|
|Supported Python versions| |License|

HDD Fan control is a command line tool to dynamically control fan speed
according to hard drive temperature on Linux.

This has 3 benefits:

-  it allows maintaining you hard drives in the ideal temperature range
   to have maximum longevity and avoid overheating

Because fans will slow down or stop when not needed:

-  it minimizes noise generated by the fans
-  it also minimizes power consumption at the same time

When is this useful?
--------------------

HDD Fan control is useful when you have one or several hard drives with
one or several fans close to them, and do not want to let the
motherboard control the fan speed, because it does so either statically,
or using a temperature sensor unrelated to the real drive temperature
(either on the CPU or on some other place on the motherboard).

The ideal use case is for a NAS with several hard drives, a low power
CPU (ie. ARM or Intel Atom) with passive cooling (no fans), and a
chassis with fans close to the hard drive. It that case the CPU will
generate less heat than the hard drives and it makes sense to control
fan speed according to the main heat source.

Features
--------

-  Can be started in daemon mode
-  Can control several fans and/or several drives with a single
   invocation
-  Can automatically spin down drives after a customizable period of
   inactivity
-  Can adapt to different fan characteristics
-  Can be set to stop fans or run them at full speed at customizable
   temperatures
-  Can be configured to never set the fans below a certain speed (useful
   if the fans controlled by HDD Fan control are the only ones available
   in the chassis)

Prerequisites
-------------

-  A Linux distribution
-  A least one SATA hard drive, that supports:

   -  Temperature querying
   -  Power state querying

-  A motherboard which:

   -  exposes to the OS a PWM to control fan speed
   -  exposes to the OS a sensor to query fan speed

Most motherboards and SATA drives fit these requirements.

Installation
------------

HDD Fan control requires `Python <https://www.python.org/downloads/>`__
>= 3.3.

Distribution packages
~~~~~~~~~~~~~~~~~~~~~

Some Linux distributions have a hddfancontrol package available in their
repository:

-  Arch Linux (AUR):
   `hddfancontrol <https://aur.archlinux.org/packages/hddfancontrol/>`__
-  Fedora:
   `hddfancontrol <https://apps.fedoraproject.org/packages/hddfancontrol>`__
   (thanks to `TC01 <https://github.com/TC01>`__)

From PyPI (with PIP)
~~~~~~~~~~~~~~~~~~~~

1. If you don't already have it, `install
   pip <https://pip.pypa.io/en/stable/installing/>`__ for Python 3 (not
   needed if you are using Python >= 3.4)
2. Install HDD Fan control: ``pip3 install hddfancontrol``
3. Install `hdparm <http://sourceforge.net/projects/hdparm/>`__ and
   `hddtemp <http://www.guzu.net/linux/hddtemp.php>`__. On Ubuntu and
   other Debian derivatives: ``sudo apt-get install hdparm hddtemp``.

From source
~~~~~~~~~~~

1. If you don't already have it, `install
   setuptools <https://pypi.python.org/pypi/setuptools#installation-instructions>`__
   for Python 3
2. Clone this repository:
   ``git clone https://github.com/desbma/hddfancontrol``
3. Install HDD Fan control: ``python3 setup.py install``
4. Install `hdparm <http://sourceforge.net/projects/hdparm/>`__ and
   `hddtemp <http://www.guzu.net/linux/hddtemp.php>`__. On Ubuntu and
   other Debian derivatives: ``sudo apt-get install hdparm hddtemp``.

To query fan caracteristic, you may also need pwmconfig. On Ubuntu and
other Debian derivatives, it is part of the fancontrol package, that you
can install with ``sudo apt-get install fancontrol``. HDD fancontrol and
fancontrol are unrelated. The fancontrol daemon is **not** needed for
HDD fan control to operate. If you use both fancontrol and HDD
fancontrol, be careful not to make them control the same fans.

Configuration
-------------

A word of caution
~~~~~~~~~~~~~~~~~

The default parameters will run fans at 100% speed at temperatures >
50°C, and run them a 20% speed if < 30°C, which corresponds to the usual
recommended drive operating temperature. If you are sure that there are
no other components in your system that generate significant heat, if
you have other fans to cool down youy system, or if you have a case
optimized for passive cooling, you can set minimum speed to 0%, which
will stop the fans if temperature is below the minimum threshold.

**Be aware that a misconfiguration of this tool can lead to a failure to
cool down your system properly which can damage components or reduce
their lifetime.**

Before using HDD Fan control unmonitored for long period of time, I
recommend keeping a minimum fan speed for security, and checking that
the temperature of your system stays in reasonable range as expected.

Fan configuration
~~~~~~~~~~~~~~~~~

To get the value for the ``--pwm``, ``--pwm-start-value`` and
``--pwm-stop-value`` parameters, you can either:

-  Use the ``-t`` or ``--test`` parameter, which will run some tests and
   detect the values at which the fans start and stop. However you need
   to have previously identified the PWM file (the ``--pwm`` parameter)
-  use the `pwmconfig
   tool <http://www.lm-sensors.org/wiki/man/pwmconfig>`__.

Drive auto spin down
~~~~~~~~~~~~~~~~~~~~

SATA drives can be configured to automatically spin down after a certain
period of inactivity, which saves power. If your drives are configured
to do so, you may notice that they do not spin down when HDD Fan control
is running. This is due to the fact that HDD Fan control will query
temperature at fixed interval, which the drive will consider an activity
and reset the spin down timeout. To fix that, you can either:

-  Use a value for the ``-i``/``--interval`` parameter higher than your
   SATA spin down time (not recommended unless your spin down time is
   very low, ie < 2 min). In that case you do not need to use
   hddfancontrol's ``--spin-down-time`` switch, because the builtin SATA
   drive timeout (that you can set for example with ```hdparm -S XXX``
   command <https://linux.die.net/man/8/hdparm>`__) should take effect.
-  Use the ``--spin-down-time`` parameter that will monitor drive
   activity and spin it down if inactive, independantly of the SATA
   feature (recommended)

**Keep in mind that spinning down and up a drive repeatedly wears it
prematurly, so unless you are in a power constrained environement (ie.
laptop), do not set the spin down time too low.**

Reading temperature while a drive is in low power state will make it
spin up, so HDD Fan control will stop querying temperature in that case,
and wait for the drive (which will be cooling down in low power state
anyway) to spin up.

Some HGST (previously Hitachi) drives support a special way of querying
temperature that does not spin up drives, which HDD Fan control will
detect and use, however it still prevents them from spinning down, so
the above instructions still apply.

Command line usage
------------------

Run ``hddfancontrol -h`` to get full command line reference.

As an example, the command line below will instruct HDD Fan control to:

-  monitor temperature of drives ``/dev/sda`` and ``/dev/sdb``
-  control fan speed using PWM 2 and 3 in
   ``/sys/class/hwmon/hwmon1/device/``
-  start both fans using PWM value 200
-  consider the fans will stop with PWM value 75
-  never run the fans below 10% of their maximum speed
-  check temperature at least every minute
-  automatically spin down drives if they are inactive for 2 hours (7200
   seconds)
-  run in daemon mode
-  log what is going on to ``/var/log/hddfancontrol.log``

``hddfancontrol -d /dev/sda /dev/sdb -p /sys/class/hwmon/hwmon1/device/pwm2 /sys/class/hwmon/hwmon1/device/pwm3 --pwm-start-value 200 200 --pwm-stop-value 75 75 --min-fan-speed-prct 10 -i 60 --spin-down-time 7200 -b -l /var/log/hddfancontrol.log``

Systemd service
---------------

A systemd service file is provided to control the daemon easily. If you
installed hddfancontrol from a distribution package, you likely already
have it installed, otherwise you can install it from the sources of this
repository with:

::

    sudo cp ./systemd/hddfancontrol.service /usr/lib/systemd/
    sudo mkdir -p /etc/conf.d
    sudo cp ./systemd/hddfancontrol.conf /etc/conf.d/hddfancontrol

Then you need to edit the ``HDDFANCONTROL_ARGS`` variable in
``/etc/conf.d/hddfancontrol`` to set the parameters (drives, temperature
range...).

You can then start the daemon with
``sudo systemctl start hddfancontrol``, see its status with
``sudo systemctl status hddfancontrol`` and enable automatic startup at
boot time with ``sudo systemctl enable hddfancontrol``.

License
-------

`GPLv3 <https://www.gnu.org/licenses/gpl-3.0-standalone.html>`__

.. |PyPI version| image:: https://img.shields.io/pypi/v/hddfancontrol.svg?style=flat
   :target: https://pypi.python.org/pypi/hddfancontrol/
.. |AUR version| image:: https://img.shields.io/aur/version/hddfancontrol.svg?style=flat
   :target: https://aur.archlinux.org/packages/hddfancontrol/
.. |Tests status| image:: https://img.shields.io/travis/desbma/hddfancontrol/master.svg?label=tests&style=flat
   :target: https://travis-ci.org/desbma/hddfancontrol
.. |Coverage| image:: https://img.shields.io/coveralls/desbma/hddfancontrol/master.svg?style=flat
   :target: https://coveralls.io/github/desbma/hddfancontrol?branch=master
.. |Lines of code| image:: https://tokei.rs/b1/github/desbma/hddfancontrol
   :target: https://github.com/desbma/hddfancontrol
.. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/hddfancontrol.svg?style=flat
   :target: https://pypi.python.org/pypi/hddfancontrol/
.. |License| image:: https://img.shields.io/github/license/desbma/hddfancontrol.svg?style=flat
   :target: https://github.com/desbma/hddfancontrol/blob/master/LICENSE
            

Raw data

            {
    "maintainer": "", 
    "docs_url": null, 
    "requires_python": "", 
    "maintainer_email": "", 
    "cheesecake_code_kwalitee_id": null, 
    "keywords": "hdd,drive,temperature,fan,control,speed", 
    "upload_time": "2018-02-04 21:53:52", 
    "requirements": [
        {
            "name": "python-daemon", 
            "specs": [
                [
                    ">=", 
                    "2.1.2"
                ]
            ]
        }
    ], 
    "author": "desbma", 
    "home_page": "https://github.com/desbma/hddfancontrol", 
    "github_user": "desbma", 
    "download_url": "https://pypi.python.org/packages/45/a3/56843ca1b40a5f85d18742408beec91891f685b13010cae1eb3992fcce0e/hddfancontrol-1.2.8.tar.gz", 
    "platform": "", 
    "version": "1.2.8", 
    "cheesecake_documentation_id": null, 
    "description": "HDD Fan control\n===============\n\n|PyPI version| |AUR version| |Tests status| |Coverage| |Lines of code|\n|Supported Python versions| |License|\n\nHDD Fan control is a command line tool to dynamically control fan speed\naccording to hard drive temperature on Linux.\n\nThis has 3 benefits:\n\n-  it allows maintaining you hard drives in the ideal temperature range\n   to have maximum longevity and avoid overheating\n\nBecause fans will slow down or stop when not needed:\n\n-  it minimizes noise generated by the fans\n-  it also minimizes power consumption at the same time\n\nWhen is this useful?\n--------------------\n\nHDD Fan control is useful when you have one or several hard drives with\none or several fans close to them, and do not want to let the\nmotherboard control the fan speed, because it does so either statically,\nor using a temperature sensor unrelated to the real drive temperature\n(either on the CPU or on some other place on the motherboard).\n\nThe ideal use case is for a NAS with several hard drives, a low power\nCPU (ie. ARM or Intel Atom) with passive cooling (no fans), and a\nchassis with fans close to the hard drive. It that case the CPU will\ngenerate less heat than the hard drives and it makes sense to control\nfan speed according to the main heat source.\n\nFeatures\n--------\n\n-  Can be started in daemon mode\n-  Can control several fans and/or several drives with a single\n   invocation\n-  Can automatically spin down drives after a customizable period of\n   inactivity\n-  Can adapt to different fan characteristics\n-  Can be set to stop fans or run them at full speed at customizable\n   temperatures\n-  Can be configured to never set the fans below a certain speed (useful\n   if the fans controlled by HDD Fan control are the only ones available\n   in the chassis)\n\nPrerequisites\n-------------\n\n-  A Linux distribution\n-  A least one SATA hard drive, that supports:\n\n   -  Temperature querying\n   -  Power state querying\n\n-  A motherboard which:\n\n   -  exposes to the OS a PWM to control fan speed\n   -  exposes to the OS a sensor to query fan speed\n\nMost motherboards and SATA drives fit these requirements.\n\nInstallation\n------------\n\nHDD Fan control requires `Python <https://www.python.org/downloads/>`__\n>= 3.3.\n\nDistribution packages\n~~~~~~~~~~~~~~~~~~~~~\n\nSome Linux distributions have a hddfancontrol package available in their\nrepository:\n\n-  Arch Linux (AUR):\n   `hddfancontrol <https://aur.archlinux.org/packages/hddfancontrol/>`__\n-  Fedora:\n   `hddfancontrol <https://apps.fedoraproject.org/packages/hddfancontrol>`__\n   (thanks to `TC01 <https://github.com/TC01>`__)\n\nFrom PyPI (with PIP)\n~~~~~~~~~~~~~~~~~~~~\n\n1. If you don't already have it, `install\n   pip <https://pip.pypa.io/en/stable/installing/>`__ for Python 3 (not\n   needed if you are using Python >= 3.4)\n2. Install HDD Fan control: ``pip3 install hddfancontrol``\n3. Install `hdparm <http://sourceforge.net/projects/hdparm/>`__ and\n   `hddtemp <http://www.guzu.net/linux/hddtemp.php>`__. On Ubuntu and\n   other Debian derivatives: ``sudo apt-get install hdparm hddtemp``.\n\nFrom source\n~~~~~~~~~~~\n\n1. If you don't already have it, `install\n   setuptools <https://pypi.python.org/pypi/setuptools#installation-instructions>`__\n   for Python 3\n2. Clone this repository:\n   ``git clone https://github.com/desbma/hddfancontrol``\n3. Install HDD Fan control: ``python3 setup.py install``\n4. Install `hdparm <http://sourceforge.net/projects/hdparm/>`__ and\n   `hddtemp <http://www.guzu.net/linux/hddtemp.php>`__. On Ubuntu and\n   other Debian derivatives: ``sudo apt-get install hdparm hddtemp``.\n\nTo query fan caracteristic, you may also need pwmconfig. On Ubuntu and\nother Debian derivatives, it is part of the fancontrol package, that you\ncan install with ``sudo apt-get install fancontrol``. HDD fancontrol and\nfancontrol are unrelated. The fancontrol daemon is **not** needed for\nHDD fan control to operate. If you use both fancontrol and HDD\nfancontrol, be careful not to make them control the same fans.\n\nConfiguration\n-------------\n\nA word of caution\n~~~~~~~~~~~~~~~~~\n\nThe default parameters will run fans at 100% speed at temperatures >\n50\u00b0C, and run them a 20% speed if < 30\u00b0C, which corresponds to the usual\nrecommended drive operating temperature. If you are sure that there are\nno other components in your system that generate significant heat, if\nyou have other fans to cool down youy system, or if you have a case\noptimized for passive cooling, you can set minimum speed to 0%, which\nwill stop the fans if temperature is below the minimum threshold.\n\n**Be aware that a misconfiguration of this tool can lead to a failure to\ncool down your system properly which can damage components or reduce\ntheir lifetime.**\n\nBefore using HDD Fan control unmonitored for long period of time, I\nrecommend keeping a minimum fan speed for security, and checking that\nthe temperature of your system stays in reasonable range as expected.\n\nFan configuration\n~~~~~~~~~~~~~~~~~\n\nTo get the value for the ``--pwm``, ``--pwm-start-value`` and\n``--pwm-stop-value`` parameters, you can either:\n\n-  Use the ``-t`` or ``--test`` parameter, which will run some tests and\n   detect the values at which the fans start and stop. However you need\n   to have previously identified the PWM file (the ``--pwm`` parameter)\n-  use the `pwmconfig\n   tool <http://www.lm-sensors.org/wiki/man/pwmconfig>`__.\n\nDrive auto spin down\n~~~~~~~~~~~~~~~~~~~~\n\nSATA drives can be configured to automatically spin down after a certain\nperiod of inactivity, which saves power. If your drives are configured\nto do so, you may notice that they do not spin down when HDD Fan control\nis running. This is due to the fact that HDD Fan control will query\ntemperature at fixed interval, which the drive will consider an activity\nand reset the spin down timeout. To fix that, you can either:\n\n-  Use a value for the ``-i``/``--interval`` parameter higher than your\n   SATA spin down time (not recommended unless your spin down time is\n   very low, ie < 2 min). In that case you do not need to use\n   hddfancontrol's ``--spin-down-time`` switch, because the builtin SATA\n   drive timeout (that you can set for example with ```hdparm -S XXX``\n   command <https://linux.die.net/man/8/hdparm>`__) should take effect.\n-  Use the ``--spin-down-time`` parameter that will monitor drive\n   activity and spin it down if inactive, independantly of the SATA\n   feature (recommended)\n\n**Keep in mind that spinning down and up a drive repeatedly wears it\nprematurly, so unless you are in a power constrained environement (ie.\nlaptop), do not set the spin down time too low.**\n\nReading temperature while a drive is in low power state will make it\nspin up, so HDD Fan control will stop querying temperature in that case,\nand wait for the drive (which will be cooling down in low power state\nanyway) to spin up.\n\nSome HGST (previously Hitachi) drives support a special way of querying\ntemperature that does not spin up drives, which HDD Fan control will\ndetect and use, however it still prevents them from spinning down, so\nthe above instructions still apply.\n\nCommand line usage\n------------------\n\nRun ``hddfancontrol -h`` to get full command line reference.\n\nAs an example, the command line below will instruct HDD Fan control to:\n\n-  monitor temperature of drives ``/dev/sda`` and ``/dev/sdb``\n-  control fan speed using PWM 2 and 3 in\n   ``/sys/class/hwmon/hwmon1/device/``\n-  start both fans using PWM value 200\n-  consider the fans will stop with PWM value 75\n-  never run the fans below 10% of their maximum speed\n-  check temperature at least every minute\n-  automatically spin down drives if they are inactive for 2 hours (7200\n   seconds)\n-  run in daemon mode\n-  log what is going on to ``/var/log/hddfancontrol.log``\n\n``hddfancontrol -d /dev/sda /dev/sdb -p /sys/class/hwmon/hwmon1/device/pwm2 /sys/class/hwmon/hwmon1/device/pwm3 --pwm-start-value 200 200 --pwm-stop-value 75 75 --min-fan-speed-prct 10 -i 60 --spin-down-time 7200 -b -l /var/log/hddfancontrol.log``\n\nSystemd service\n---------------\n\nA systemd service file is provided to control the daemon easily. If you\ninstalled hddfancontrol from a distribution package, you likely already\nhave it installed, otherwise you can install it from the sources of this\nrepository with:\n\n::\n\n    sudo cp ./systemd/hddfancontrol.service /usr/lib/systemd/\n    sudo mkdir -p /etc/conf.d\n    sudo cp ./systemd/hddfancontrol.conf /etc/conf.d/hddfancontrol\n\nThen you need to edit the ``HDDFANCONTROL_ARGS`` variable in\n``/etc/conf.d/hddfancontrol`` to set the parameters (drives, temperature\nrange...).\n\nYou can then start the daemon with\n``sudo systemctl start hddfancontrol``, see its status with\n``sudo systemctl status hddfancontrol`` and enable automatic startup at\nboot time with ``sudo systemctl enable hddfancontrol``.\n\nLicense\n-------\n\n`GPLv3 <https://www.gnu.org/licenses/gpl-3.0-standalone.html>`__\n\n.. |PyPI version| image:: https://img.shields.io/pypi/v/hddfancontrol.svg?style=flat\n   :target: https://pypi.python.org/pypi/hddfancontrol/\n.. |AUR version| image:: https://img.shields.io/aur/version/hddfancontrol.svg?style=flat\n   :target: https://aur.archlinux.org/packages/hddfancontrol/\n.. |Tests status| image:: https://img.shields.io/travis/desbma/hddfancontrol/master.svg?label=tests&style=flat\n   :target: https://travis-ci.org/desbma/hddfancontrol\n.. |Coverage| image:: https://img.shields.io/coveralls/desbma/hddfancontrol/master.svg?style=flat\n   :target: https://coveralls.io/github/desbma/hddfancontrol?branch=master\n.. |Lines of code| image:: https://tokei.rs/b1/github/desbma/hddfancontrol\n   :target: https://github.com/desbma/hddfancontrol\n.. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/hddfancontrol.svg?style=flat\n   :target: https://pypi.python.org/pypi/hddfancontrol/\n.. |License| image:: https://img.shields.io/github/license/desbma/hddfancontrol.svg?style=flat\n   :target: https://github.com/desbma/hddfancontrol/blob/master/LICENSE", 
    "lcname": "hddfancontrol", 
    "bugtrack_url": null, 
    "github": true, 
    "coveralls": false, 
    "name": "hddfancontrol", 
    "license": "", 
    "travis_ci": true, 
    "github_project": "hddfancontrol", 
    "summary": "Control system fan speed by monitoring hard drive temperature", 
    "split_keywords": [
        "hdd", 
        "drive", 
        "temperature", 
        "fan", 
        "control", 
        "speed"
    ], 
    "author_email": "", 
    "urls": [
        {
            "has_sig": false, 
            "upload_time": "2018-02-04T21:53:52", 
            "comment_text": "", 
            "python_version": "source", 
            "url": "https://pypi.python.org/packages/45/a3/56843ca1b40a5f85d18742408beec91891f685b13010cae1eb3992fcce0e/hddfancontrol-1.2.8.tar.gz", 
            "md5_digest": "5b97e6eef890450aca7db7a268dcb0a4", 
            "downloads": 0, 
            "filename": "hddfancontrol-1.2.8.tar.gz", 
            "packagetype": "sdist", 
            "path": "45/a3/56843ca1b40a5f85d18742408beec91891f685b13010cae1eb3992fcce0e/hddfancontrol-1.2.8.tar.gz", 
            "size": 30746
        }
    ], 
    "_id": null, 
    "cheesecake_installability_id": null
}