#!/usr/bin/env bash set -e DEVICE="$1" # eg: /sys/class/drm/card1/device HWMON=$(echo "$DEVICE"/hwmon/hwmon*) exit() { echo "Setting controll to auto" >&2 echo 2 > "$HWMON/pwm1_enable" } trap exit EXIT INT bail() { echo "Error: $@" >&2 echo "Exiting..." >&2 exit 1 } if ! [ -d "$HWMON" ]; then bail "Invalid HWMON" fi TEMP_INPUT="$HWMON/temp2_input" if ! [ -f $TEMP_INPUT ]; then bail "Invalid TEMP_INPUT" fi TEMP_MIN="$2" TEMP_MAX="$3" if [ -z "$TEMP_MIN" ];then bail "No minimum temperature provided" fi if [ -z "$TEMP_MAX" ];then bail "No maximum temperature provided" fi PWM_MIN=0 PWM_MAX=255 echo "Running..." >&2 while true; do TEMPERATURE_RAW=$(cat "$TEMP_INPUT") TEMPERATURE="$(( $TEMPERATURE_RAW / 1000 ))" # Remap from a number between 60_000..90_000 to 0..255 PWM=$(( ($TEMPERATURE - $TEMP_MIN) * $PWM_MAX / ($TEMP_MAX - $TEMP_MIN) )) if [ "$PWM" -gt $PWM_MAX ]; then PWM=$PWM_MAX elif [ "$PWM" -lt $PWM_MIN ]; then PWM=$PWM_MIN fi echo 1 > "$HWMON/pwm1_enable" echo "$PWM" > "$HWMON/pwm1" sleep .1s done