Files
openwrt-armor-g5/target/linux/qualcommax/ipq807x/base-files/sbin/fanctld
domenico 27c9d80f51
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Build Toolchains / Build Toolchains for each target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
Coverity scan build / Coverity x86/64 build (push) Has been cancelled
Initial commit
2025-06-24 12:51:15 +02:00

117 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
. /lib/functions.sh
dlog() {
[ $debug = '1' ] && echo "$@" >> /tmp/fanctld.log
}
load_config() {
local config_section="config"
config_load 'fanctld'
config_get enabled "$config_section" Enabled
config_get fan_gpio "$config_section" Gpio
config_get debug "$config_section" Debug
config_get delay "$config_section" Delay
config_get hit_level "$config_section" Hits
config_get temp_trip "$config_section" Temp
config_get temp_hyst "$config_section" Hyst
}
load_config
temp_clr=$((($temp_trip)-($temp_hyst)))
nss_temp() {
cat /sys/class/thermal/thermal_zone0/temp
}
cpu_temp() {
cat /sys/class/thermal/thermal_zone9/temp
}
wifi0_temp() {
cat /sys/devices/platform/soc@0/c000000.wifi/ieee80211/phy0/hwmon*/temp1_input
}
wifi1_temp() {
cat /sys/devices/platform/soc@0/c000000.wifi/ieee80211/phy1/hwmon*/temp1_input
}
wifi2_temp() {
cat /sys/devices/platform/soc@0/c000000.wifi/ieee80211/phy2/hwmon*/temp1_input
}
aqr_temp() {
cat /sys/devices/platform/soc@0/90000.mdio/mdio_bus/90000.mdio-1/90000.mdio-1:08/hwmon/hwmon*/temp1_input
}
check_temps() {
temp1=$(nss_temp)
temp2=$(cpu_temp)
temp3=$(($(wifi0_temp)-1000))
temp4=$(($(wifi1_temp)))
temp5=$(($(wifi2_temp)-2000))
temp6=$(($(aqr_temp)-2000))
dlog "nss_temp=$temp1 cpu_temp=$temp2 wifi0_temp=$temp3 wifi1_temp=$temp4 wifi2_temp=$temp5 aqr_temp=$temp6"
load_config
if [ $temp1 -ge $temp_trip -o $temp2 -ge $temp_trip -o $temp3 -ge $temp_trip -o $temp4 -ge $temp_trip -o $temp5 -ge $temp_trip -o $temp6 -ge $temp_trip ]; then
echo 2
elif [ $temp1 -le $temp_clr -a $temp2 -le $temp_clr -a $temp3 -le $temp_clr -a $temp4 -le $temp_clr -a $temp5 -le $temp_clr -a $temp6 -le $temp_clr ]; then
echo 1
else
echo 0
fi
}
fan_status() {
fanctl status
}
load_config
dlog "----- fanctld debug log -----"
dlog "enabled=$enabled, delay=$delay, hit_level=$hit_level, temp=$temp_trip, hyst=$temp_hyst, debug=$debug"
>> /tmp/fanctld.log
trip_hits=0
clr_hits=0
while true; do
sleep $delay
result=$(check_temps)
if [ $result = '2' ]; then
trip_hits=$((trip_hits+1))
elif [ $result = '1' ]; then
clr_hits=$((clr_hits+1))
else
trip_hits=0
clr_hits=0
fi
if [ $trip_hits -ge $hit_level ]; then
trip_hits=0
if [ $(fan_status) = 'disable' ]; then
fanctl start
logger -p info -t fanctld "Fan switch on temperature reached ("$temp_trip"), start fan"
fi
elif [ $clr_hits -ge $hit_level ]; then
clr_hits=0
if [ $(fan_status) = 'enable' ]; then
fanctl stop
logger -p info -t fanctld "Fan switch off temperature reached ("$temp_clr"), stop fan"
fi
fi
done