parent
66bbdbc41b
commit
7a349505ba
@ -0,0 +1,165 @@
|
||||
#!/bin/bash
|
||||
minFanSpeed=59; #минимальные обороты (от 0 до 255)
|
||||
|
||||
# график изменения оборотов для HDD
|
||||
# температура=>скорость(% от max)
|
||||
hddSet[38]=125;
|
||||
hddSet[44]=169;
|
||||
hddSet[47]=210;
|
||||
hddSet[51]=255;
|
||||
|
||||
# график изменения оборотов для CPU
|
||||
# температура=>скорость(% от max)
|
||||
cpuSet[38]=59;
|
||||
cpuSet[48]=66;
|
||||
cpuSet[55]=100;
|
||||
cpuSet[60]=160;
|
||||
cpuSet[68]=255;
|
||||
|
||||
|
||||
#выставляем скорость
|
||||
function setFanSpeed {
|
||||
echo ${1} > /sys/class/hwmon/hwmon7/pwm3
|
||||
}
|
||||
|
||||
|
||||
function getMaxHddTemp {
|
||||
echo $(($(cat /sys/class/hwmon/hwmon[3,4,5,6]/temp1_input|sort -n|tail -1)/1000));
|
||||
}
|
||||
|
||||
function getCpuTemp {
|
||||
echo $(($(cat /sys/class/hwmon/hwmon2/temp1_input)/1000))
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function calcTempHdd {
|
||||
prev=0;
|
||||
for i in "${!hddSet[@]}"
|
||||
do
|
||||
key=$i;
|
||||
val=${hddSet[$i]};
|
||||
|
||||
#меньше первого значения
|
||||
if [[ $1 -lt $key && $prev -eq 0 ]]
|
||||
then
|
||||
ar=$2
|
||||
echo 0; return;
|
||||
fi;
|
||||
|
||||
dots=${prev}":"${hddSet[$prev]}":"${key}":"${val};
|
||||
|
||||
#меньше не первого значения
|
||||
if [[ $1 -lt $key && $prev -gt 0 ]]
|
||||
then
|
||||
echo $dots; return;
|
||||
fi;
|
||||
|
||||
prev=$key;
|
||||
done
|
||||
echo $dots;
|
||||
}
|
||||
|
||||
function calcTempCpu {
|
||||
prev=0;
|
||||
|
||||
for i in "${!cpuSet[@]}"
|
||||
do
|
||||
key=$i;
|
||||
val=${cpuSet[$i]};
|
||||
|
||||
#меньше первого значения
|
||||
if [[ $1 -lt $key && $prev -eq 0 ]]
|
||||
then
|
||||
ar=$2
|
||||
echo 0; return;
|
||||
fi;
|
||||
|
||||
dots=${prev}":"${cpuSet[$prev]}":"${key}":"${val};
|
||||
|
||||
#меньше не первого значения
|
||||
if [[ $1 -lt $key && $prev -gt 0 ]]
|
||||
then
|
||||
echo $dots; return;
|
||||
fi;
|
||||
|
||||
prev=$key;
|
||||
done
|
||||
echo $dots;
|
||||
}
|
||||
|
||||
|
||||
# аргументы [x1:y1:x2:y2, x], вернет Y=(kx+b)
|
||||
function linear {
|
||||
dots=$1
|
||||
[[ "$dots" == "0" ]] && echo "0" && return;
|
||||
|
||||
x1=$(echo $dots | cut -d ":" -f1);
|
||||
y1=$(echo $dots | cut -d ":" -f2);
|
||||
x2=$(echo $dots | cut -d ":" -f3);
|
||||
y2=$(echo $dots | cut -d ":" -f4);
|
||||
x=$2;
|
||||
|
||||
|
||||
# y=kx+b
|
||||
k=$(awk "BEGIN {printf \"%.2f\",(${y2}-${y1})/(${x2}-${x1})}");
|
||||
b=$(awk "BEGIN {printf \"%.2f\",(${y1}-(${k}*${x1}))}");
|
||||
y=$(awk "BEGIN {printf \"%.0f\",(${k}*${x})+(${b})}");
|
||||
|
||||
#не больше 255
|
||||
[[ $y -ge 255 ]] && y=255;
|
||||
echo $y;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#составим таблицу скоростей для HDD
|
||||
for ((i=0; i<101; i++))
|
||||
do
|
||||
pwmSpeed=$(linear $(calcTempHdd $i) $i);
|
||||
if [[ $pwmSpeed -gt 0 ]]
|
||||
then
|
||||
echo "TempHDD:"$i" = "${pwmSpeed}"/255";
|
||||
fi;
|
||||
hddTable[$i]=$pwmSpeed;
|
||||
done
|
||||
|
||||
|
||||
#составим таблицу скоростей для процессора
|
||||
for ((i=0; i<101; i++))
|
||||
do
|
||||
pwmSpeed=$(linear $(calcTempCpu $i) $i);
|
||||
if [[ $pwmSpeed -gt 0 ]]
|
||||
then
|
||||
echo "TempCPU:"$i" = "${pwmSpeed}"/255";
|
||||
fi;
|
||||
cpuTable[$i]=$pwmSpeed;
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#включаем ручное управление
|
||||
echo 1 > /sys/class/hwmon/hwmon7/pwm3_enable
|
||||
#ставим на максималку
|
||||
echo 255 > /sys/class/hwmon/hwmon7/pwm3
|
||||
|
||||
while true
|
||||
do
|
||||
hddTemp=$(getMaxHddTemp);
|
||||
cpuTemp=$(getCpuTemp);
|
||||
echo "TEMP hdd="${hddTemp}";cpu="${cpuTemp};
|
||||
echo "SPEED for hdd="${hddTable[$hddTemp]}/255";SPEED for cpu="${cpuTable[$cpuTemp]}"/255";
|
||||
|
||||
[[ ${hddTable[$hddTemp]} -gt ${cpuTable[$cpuTemp]} ]] && needPWM=${hddTable[$hddTemp]} || needPWM=${cpuTable[$cpuTemp]};
|
||||
|
||||
echo "set ${needPWM}/255";
|
||||
setFanSpeed $needPWM;
|
||||
|
||||
echo "-------------------------------------------------";
|
||||
|
||||
sleep 35
|
||||
done
|
Loading…
Reference in new issue