From 84961cb8150503b9a91c6d93e41b242a41254545 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:58:23 +0000 Subject: [PATCH] tweak fan profiles, thanks doc brown --- .../quirks/devices/AYANEO AIR/bin/fancontrol | 58 ++++++++++++++----- .../devices/GameForce ACE/bin/fancontrol | 56 +++++++++++++----- .../devices/ayn Loki Max/bin/fancontrol | 58 ++++++++++++++----- 3 files changed, 128 insertions(+), 44 deletions(-) diff --git a/packages/hardware/quirks/devices/AYANEO AIR/bin/fancontrol b/packages/hardware/quirks/devices/AYANEO AIR/bin/fancontrol index 6faa6e15e..c6e2debe1 100755 --- a/packages/hardware/quirks/devices/AYANEO AIR/bin/fancontrol +++ b/packages/hardware/quirks/devices/AYANEO AIR/bin/fancontrol @@ -4,7 +4,16 @@ . /etc/profile -DEBUG=false +### Enable logging +case $(get_setting system.loglevel) in + verbose) + DEBUG=true + ;; + *) + DEBUG=false + ;; +esac + COOLING_PROFILE=$(get_setting "cooling.profile") FAN_PWM="${DEVICE_PWM_FAN}" @@ -22,7 +31,7 @@ trap "set_control 0 && exit 0" SIGHUP SIGINT SIGQUIT SIGABRT if [ -e "/storage/.config/fancontrol.conf" ] && [ "${COOLING_PROFILE}" = "custom" ] then - log $0 "Loading configuration file" 2>/dev/null + $DEBUG && log $0 "Loading configuration file" 2>/dev/null source /storage/.config/fancontrol.conf if [ ! $? = 0 ] then @@ -37,17 +46,17 @@ if [ ! "${COOLING_PROFILE}" = "custom" ] then if [ "${COOLING_PROFILE}" = "aggressive" ] then - SPEEDS=(255 225 192) - TEMPS=(70000 65000 0) + SPEEDS=(192 225 255) + TEMPS=(45000 75000 85000) elif [ "${COOLING_PROFILE}" = "moderate" ] then - SPEEDS=(255 192 128 96) - TEMPS=(75000 70000 65000 0) + SPEEDS=(48 64 96 128 192 255) + TEMPS=(50000 55000 60000 70000 80000 90000) elif [ "${COOLING_PROFILE}" = "quiet" ] then # Quiet. - SPEEDS=(255 192 128 96 64 48 32) - TEMPS=(75000 70000 65000 60000 55000 50000 0) + SPEEDS=(32 48 64 96 128 192 255) + TEMPS=(50000 55000 60000 65000 70000 80000 90000) else # auto set_control 0 >/dev/null 2>&1 @@ -58,22 +67,41 @@ fi log $0 "Enabling fan control." set_control 1 >/dev/null 2>&1 +CURRENTSPEED=0 +TEMP=${TEMPS[0]} +declare -a HISTORY 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 + + ### Keep a rolling history of CPU temps. + HISTORY+=(${CPU_TEMP}) + while (( ${#HISTORY[@]} > 10 )) + do + unset HISTORY[-0] + PRIOR_HISTORY=( ${HISTORY[*]} ) + HISTORY=( ${PRIOR_HISTORY[*]} ) + unset PRIOR_HISTORY + done + AVERAGE=$(echo $(IFS=+; echo "$((${HISTORY[*]}))") / ${#HISTORY[@]} | bc) + + $DEBUG && log $0 "Current/Average/Ceiling (Speed): ${CPU_TEMP}/${AVERAGE}/${TEMP} (${CURRENTSPEED})." for TEMP in "${TEMPS[@]}" do - if (( "${CPU_TEMP}" > "${TEMP}" )) && \ - [ ! "${LASTSPEED}" = "${SPEEDS[${INDEX}]}" ] + if (( "${CPU_TEMP}" >= "90000" )) || \ + (( "${AVERAGE}" <= "${TEMP}" )) then - $DEBUG && log $0 "Setting PWM FAN to ${SPEEDS[${INDEX}]} (${TEMP})" 2>/dev/null - echo ${SPEEDS[${INDEX}]} >${FAN_PWM} - LASTSPEED=${SPEEDS[${INDEX}]} + if (( ${CURRENTSPEED} != ${SPEEDS[${INDEX}]} )) + then + CURRENTSPEED=${SPEEDS[${INDEX}]} + echo ${SPEEDS[${INDEX}]} >${FAN_PWM} + $DEBUG && log $0 "Set fan to ${CURRENTSPEED}." + fi break + else + INDEX=$(( $INDEX + 1 )) fi - INDEX=$(( $INDEX + 1 )) done sleep 2 done diff --git a/packages/hardware/quirks/devices/GameForce ACE/bin/fancontrol b/packages/hardware/quirks/devices/GameForce ACE/bin/fancontrol index 54316ae22..22f44ea90 100755 --- a/packages/hardware/quirks/devices/GameForce ACE/bin/fancontrol +++ b/packages/hardware/quirks/devices/GameForce ACE/bin/fancontrol @@ -4,7 +4,16 @@ . /etc/profile -DEBUG=false +### Enable logging +case $(get_setting system.loglevel) in + verbose) + DEBUG=true + ;; + *) + DEBUG=false + ;; +esac + COOLING_PROFILE=$(get_setting "cooling.profile") FAN_PWM="${DEVICE_PWM_FAN}" @@ -38,17 +47,17 @@ if [ ! "${COOLING_PROFILE}" = "custom" ] then if [ "${COOLING_PROFILE}" = "aggressive" ] then - SPEEDS=(255 225 195) - TEMPS=(55000 45000 0) + SPEEDS=(195 225 255) + TEMPS=(45000 60000 80000) elif [ "${COOLING_PROFILE}" = "moderate" ] then - SPEEDS=(255 192 128 96) - TEMPS=(65000 55000 45000 0) + SPEEDS=(48 64 96 128 192 255) + TEMPS=(45000 55000 65000 75000 85000 90000) elif [ "${COOLING_PROFILE}" = "quiet" ] then # Quiet. - SPEEDS=(255 192 128 96 64 48 32) - TEMPS=(70000 60000 55000 50000 49000 47000 0) + SPEEDS=(32 48 64 96 128 192 255) + TEMPS=(45000 50000 55000 65000 75000 85000 90000) else # auto set_control 0 >/dev/null 2>&1 @@ -59,22 +68,41 @@ fi log $0 "Enabling fan control." set_control 1 >/dev/null 2>&1 +CURRENTSPEED=0 +TEMP=${TEMPS[0]} +declare -a HISTORY 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 + + ### Keep a rolling history of CPU temps. + HISTORY+=(${CPU_TEMP}) + while (( ${#HISTORY[@]} > 10 )) + do + unset HISTORY[-0] + PRIOR_HISTORY=( ${HISTORY[*]} ) + HISTORY=( ${PRIOR_HISTORY[*]} ) + unset PRIOR_HISTORY + done + AVERAGE=$(echo $(IFS=+; echo "$((${HISTORY[*]}))") / ${#HISTORY[@]} | bc) + + $DEBUG && log $0 "Current/Average/Ceiling (Speed): ${CPU_TEMP}/${AVERAGE}/${TEMP} (${CURRENTSPEED})." for TEMP in "${TEMPS[@]}" do - if (( "${CPU_TEMP}" > "${TEMP}" )) && \ - [ ! "${LASTSPEED}" = "${SPEEDS[${INDEX}]}" ] + if (( "${CPU_TEMP}" >= "90000" )) || \ + (( "${AVERAGE}" <= "${TEMP}" )) then - $DEBUG && log $0 "Setting PWM FAN to ${SPEEDS[${INDEX}]} (${TEMP})" 2>/dev/null - echo ${SPEEDS[${INDEX}]} >${FAN_PWM} - LASTSPEED=${SPEEDS[${INDEX}]} + if (( ${CURRENTSPEED} != ${SPEEDS[${INDEX}]} )) + then + CURRENTSPEED=${SPEEDS[${INDEX}]} + echo ${SPEEDS[${INDEX}]} >${FAN_PWM} + $DEBUG && log $0 "Set fan to ${CURRENTSPEED}." + fi break + else + INDEX=$(( $INDEX + 1 )) fi - INDEX=$(( $INDEX + 1 )) done sleep 2 done diff --git a/packages/hardware/quirks/devices/ayn Loki Max/bin/fancontrol b/packages/hardware/quirks/devices/ayn Loki Max/bin/fancontrol index 50b74e57f..91478d679 100755 --- a/packages/hardware/quirks/devices/ayn Loki Max/bin/fancontrol +++ b/packages/hardware/quirks/devices/ayn Loki Max/bin/fancontrol @@ -4,7 +4,16 @@ . /etc/profile -DEBUG=false +### Enable logging +case $(get_setting system.loglevel) in + verbose) + DEBUG=true + ;; + *) + DEBUG=false + ;; +esac + COOLING_PROFILE=$(get_setting "cooling.profile") log $0 "Setting profile to ${COOLING_PROFILE}" @@ -34,16 +43,16 @@ if [ ! "${COOLING_PROFILE}" = "custom" ] then if [ "${COOLING_PROFILE}" = "aggressive" ] then - SPEEDS=(128 96 72) - TEMPS=(70000 65000 0) + SPEEDS=(72 96 128) + TEMPS=(45000 75000 85000) elif [ "${COOLING_PROFILE}" = "moderate" ] then - SPEEDS=(128 96 72 64 48) - TEMPS=(70000 65000 60000 55000 0) + SPEEDS=(32 48 64 72 96 128) + TEMPS=(50000 55000 60000 70000 80000 90000) elif [ "${COOLING_PROFILE}" = "quiet" ] then - SPEEDS=(128 96 64 48 32) - TEMPS=(70000 65000 60000 55000 0) + SPEEDS=(24 32 48 64 72 96 128) + TEMPS=(50000 55000 60000 65000 70000 80000 90000) else # auto set_control 0x01 >/dev/null 2>&1 @@ -51,25 +60,44 @@ then fi fi -log $0 "Enabling fan control." +$DEBUG && log $0 "Enabling fan control." set_control 0x00 >/dev/null 2>&1 +CURRENTSPEED=0 +TEMP=${TEMPS[0]} +declare -a HISTORY 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 + + ### Keep a rolling history of CPU temps. + HISTORY+=(${CPU_TEMP}) + while (( ${#HISTORY[@]} > 10 )) + do + unset HISTORY[-0] + PRIOR_HISTORY=( ${HISTORY[*]} ) + HISTORY=( ${PRIOR_HISTORY[*]} ) + unset PRIOR_HISTORY + done + AVERAGE=$(echo $(IFS=+; echo "$((${HISTORY[*]}))") / ${#HISTORY[@]} | bc) + + $DEBUG && log $0 "Current/Average/Ceiling (Speed): ${CPU_TEMP}/${AVERAGE}/${TEMP} (${CURRENTSPEED})." for TEMP in "${TEMPS[@]}" do - if (( "${CPU_TEMP}" > "${TEMP}" )) && \ - [ ! "${LASTSPEED}" = "${SPEEDS[${INDEX}]}" ] + if (( "${CPU_TEMP}" >= "90000" )) || \ + (( "${AVERAGE}" <= "${TEMP}" )) 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}]} + if (( ${CURRENTSPEED} != ${SPEEDS[${INDEX}]} )) + then + CURRENTSPEED=${SPEEDS[${INDEX}]} + ectool -w 0x11 -z $(printf '%x\n' ${CURRENTSPEED}) >/dev/null 2>&1 + $DEBUG && log $0 "Set fan to ${CURRENTSPEED}." + fi break + else + INDEX=$(( $INDEX + 1 )) fi - INDEX=$(( $INDEX + 1 )) done sleep 2 done