# fanControlLinux Скрипт, регулирующий скорость вращения вентиляторов на основе температуры процессора и жестких дисков. Оценивает температуру 4х дисков, определяет самый горячий. Работает на основе линейной функции, например при температуре 40 градусов нужны обороты 40%, а при температуре 45 градусов уже 65%, как понять какие обороты поставить в промежуточной точке 43 градуса? Нужно по двум координатам графика просчитать коэффициенты **Y=(kx+b)** (**K** и **B**), Y в данном случае обороты, а X - температура, т.е., зная коэффициенты графика можно подставить любой X и посчитать Y. Но график меняет своё ускорение, на малых температурах можно понизить обороты, но вот если слишком жарко на улице и нагрузка на систему большая, то температура может приближаться к критичной и в этом случае нужно сильнее прибавлять с каждым градусом. ## Terramaster F4-423 - датчики ``` modprobe coretemp modprobe drivetemp modprobe it87 force_id=0x8620 ``` Для вашего конкретного устройства добивайтесь, чтобы команда `sensors` выводила все датчики, пример, когда детектятся все жесткие диски, процессор и обороты вентилятора. ``` drivetemp-scsi-3-0 Adapter: SCSI adapter temp1: +38.0°C (low = +0.0°C, high = +60.0°C) (crit low = -40.0°C, crit = +70.0°C) (lowest = +25.0°C, highest = +41.0°C) drivetemp-scsi-1-0 Adapter: SCSI adapter temp1: +41.0°C (low = +0.0°C, high = +60.0°C) (crit low = -40.0°C, crit = +70.0°C) (lowest = +26.0°C, highest = +43.0°C) coretemp-isa-0000 Adapter: ISA adapter Package id 0: +43.0°C (high = +105.0°C, crit = +105.0°C) Core 0: +38.0°C (high = +105.0°C, crit = +105.0°C) Core 1: +38.0°C (high = +105.0°C, crit = +105.0°C) Core 2: +38.0°C (high = +105.0°C, crit = +105.0°C) Core 3: +38.0°C (high = +105.0°C, crit = +105.0°C) acpitz-acpi-0 Adapter: ACPI interface temp1: +27.7°C it8620-isa-0a30 Adapter: ISA adapter in0: 1.88 V (min = +0.00 V, max = +3.06 V) in1: 1.37 V (min = +0.00 V, max = +3.06 V) in2: 2.23 V (min = +0.00 V, max = +3.06 V) +5V: 5.59 V (min = +0.00 V, max = +6.12 V) in4: 2.27 V (min = +0.00 V, max = +3.06 V) in5: 2.21 V (min = +0.00 V, max = +3.06 V) in6: 1.34 V (min = +0.00 V, max = +3.06 V) 3VSB: 5.06 V (min = +0.00 V, max = +6.12 V) Vbat: 3.36 V fan2: 0 RPM (min = 0 RPM) fan3: 1875 RPM (min = 0 RPM) fan4: 0 RPM (min = 0 RPM) fan5: 0 RPM (min = 0 RPM) temp1: +34.0°C (low = -128.0°C, high = +127.0°C) sensor = thermal diode temp2: +35.0°C (low = -128.0°C, high = +127.0°C) sensor = thermal diode temp3: +40.0°C (low = -128.0°C, high = +127.0°C) temp4: +40.0°C temp5: +40.0°C temp6: +40.0°C intrusion0: ALARM drivetemp-scsi-2-0 Adapter: SCSI adapter temp1: +41.0°C (low = +0.0°C, high = +60.0°C) (crit low = -40.0°C, crit = +70.0°C) (lowest = +26.0°C, highest = +43.0°C) drivetemp-scsi-0-0 Adapter: SCSI adapter temp1: +39.0°C (low = +0.0°C, high = +60.0°C) (crit low = -40.0°C, crit = +70.0°C) (lowest = +26.0°C, highest = +42.0°C) nvme-pci-0300 Adapter: PCI adapter Composite: +37.9°C (low = -273.1°C, high = +81.8°C) (crit = +84.8°C) Sensor 1: +37.9°C (low = -273.1°C, high = +65261.8°C) Sensor 2: +34.9°C (low = -273.1°C, high = +65261.8°C) ``` ## Определение датчиков в sys/class/hwmon ``` for f in $(ls -1 /sys/class/hwmon/); do echo $f" - "$(cat /sys/class/hwmon/${f}/name); done ``` Данная команда выведет следующее ``` hwmon0 - acpitz hwmon1 - nvme hwmon2 - coretemp hwmon3 - drivetemp hwmon4 - drivetemp hwmon5 - drivetemp hwmon6 - drivetemp hwmon7 - it8620 ``` * **hwmon2** - температура процессора * **hwmon7** - датчики чипсета, там и вентиляторы