76 lines
1.8 KiB
Text
76 lines
1.8 KiB
Text
|
#!/bin/bash
|
||
|
# SPDX-License-Identifier: Apache-2.0
|
||
|
# Copyright (C) 2021-present Fewtarius (https://github.com/fewtarius)
|
||
|
|
||
|
. /etc/profile
|
||
|
|
||
|
#DEBUG=false
|
||
|
DEBUG=true
|
||
|
COOLING_PROFILE=$(get_setting "cooling.profile")
|
||
|
|
||
|
log $0 "Setting profile to ${COOLING_PROFILE}"
|
||
|
|
||
|
function set_control() {
|
||
|
log $0 "Set fan control to ${1}"
|
||
|
ectool -w 0x10 -z ${1} >/dev/null 2>&1
|
||
|
}
|
||
|
|
||
|
trap "set_control 0x01 && exit 0" SIGHUP SIGINT SIGQUIT SIGABRT
|
||
|
|
||
|
log $0 "Enabling fan control."
|
||
|
set_control 0x00 >/dev/null 2>&1
|
||
|
|
||
|
if [ -e "/storage/.config/fancontrol.conf" ] && [ "${COOLING_PROFILE}" = "custom" ]
|
||
|
then
|
||
|
log $0 "Loading configuration file" 2>/dev/null
|
||
|
source /storage/.config/fancontrol.conf
|
||
|
if [ ! $? = 0 ]
|
||
|
then
|
||
|
WARN="Custom fan profile could not be loaded, defaulting to quiet."
|
||
|
log $0 "${WARN}"
|
||
|
COOLING_PROFILE="quiet"
|
||
|
set_setting cooling.profile quiet
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
|
||
|
if [ ! "${COOLING_PROFILE}" = "custom" ]
|
||
|
then
|
||
|
if [ "${COOLING_PROFILE}" = "aggressive" ]
|
||
|
then
|
||
|
SPEEDS=(128 96 72)
|
||
|
TEMPS=(70000 65000 0)
|
||
|
elif [ "${COOLING_PROFILE}" = "moderate" ]
|
||
|
then
|
||
|
SPEEDS=(128 96 72 64 48)
|
||
|
TEMPS=(70000 65000 60000 55000 0)
|
||
|
else
|
||
|
# Quiet.
|
||
|
SPEEDS=(128 96 64 48 32)
|
||
|
TEMPS=(70000 65000 60000 55000 0)
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
while true
|
||
|
do
|
||
|
INDEX=0
|
||
|
CPU_TEMP=$(printf "%.0f" $(awk '{ total += $1; count++ } END { print total/count }' ${DEVICE_TEMP_SENSOR}))
|
||
|
$DEBUG && log $0 "CPU TEMP: ${CPU_TEMP}" 2>/dev/null
|
||
|
for TEMP in "${TEMPS[@]}"
|
||
|
do
|
||
|
if (( "${CPU_TEMP}" > "${TEMP}" )) && \
|
||
|
[ ! "${LASTSPEED}" = "${SPEEDS[${INDEX}]}" ]
|
||
|
then
|
||
|
$DEBUG && log $0 "Setting PWM FAN to ${SPEEDS[${INDEX}]} (${TEMP})" 2>/dev/null
|
||
|
ectool -w 0x11 -z $(printf '%x\n' ${SPEEDS[${INDEX}]}) >/dev/null 2>&1
|
||
|
LASTSPEED=${SPEEDS[${INDEX}]}
|
||
|
break
|
||
|
fi
|
||
|
INDEX=$(( $INDEX + 1 ))
|
||
|
done
|
||
|
sleep 2
|
||
|
done
|
||
|
|
||
|
log $0 "Disabling fan control."
|
||
|
set_control 0x01 >/dev/null 2>&1
|