1
1
Fork 0
scripts/hc4_fancontrol.sh

69 lines
1.3 KiB
Bash
Executable File

#!/bin/bash
#
# Odroid HC4 fan control script
#
# Information (don't touch unless you're me)
AUTHOR="david@socialnerds.org"
VERSION="0.2.0"
LICENSE="GPLv3"
# Configuration
THRESHOLD=45000
DISTANCE=1000
INTERVAL=10
STEPS=(80 120 160 210 255)
FAN="/sys/class/hwmon/hwmon2/pwm1"
# Get all temperature readings and return the highest value
function get_temp() {
local TEMPS=($(cat /sys/devices/virtual/thermal/thermal_zone*/temp))
local RESULT=${TEMPS[0]};
for TEMP in ${TEMPS[@]}; do
if [ $TEMP -gt $RESULT ]; then
RESULT=$TEMP
fi
done
echo $RESULT
}
# Get current fan speed
function get_speed() {
local SPEED=$(cat $FAN)
echo $SPEED
}
# Set new fan speed
function set_speed() {
local CURRENT_SPEED=$(get_speed)
local NEW_SPEED=$1
if [ $CURRENT_SPEED -ne $NEW_SPEED ]; then
echo $NEW_SPEED > $FAN
sleep 3
fi
}
# Set fan mode to manual
echo "disabled" | tee /sys/class/thermal/thermal_zone{0,1}/mode > /dev/null
# Run loop
while true; do
TEMP=$(get_temp)
SPEED=$(get_speed)
NEW_THRESHOLD=$THRESHOLD
if [ $TEMP -gt $THRESHOLD ]; then
for STEP in ${STEPS[@]}; do
if [ $TEMP -gt $NEW_THRESHOLD ]; then
NEW_THRESHOLD=$((NEW_THRESHOLD + DISTANCE))
if [ $SPEED -lt $STEP ]; then
set_speed $STEP
fi
fi
done
else
set_speed 0
fi
sleep $INTERVAL
done