源脚本
#!/bin/bash
Hikvision R1 small screen: Large character CPU temperature + time display script (updates every minute)
ANSI colors
RED='\033[1;31m'
ORANGE='\033[38;5;214m' # Orange, used for medium temperatures
YELLOW='\033[1;33m'
GREEN='\033[1;32m'
CYAN='\033[1;36m' # Cyan, used for time display
RESET='\033[0m'
BACKGROUND='\033[48;5;235m' # Dark gray background, for contrast
WHITE='\033[1;37m'
Digit and symbol patterns (uniform height: 5 lines)
DIGIT_0=(" ███ " "█ █" "█ █" "█ █" " ███ ")
DIGIT_1=(" █ " " ██ " " █ " " █ " " ███ ")
DIGIT_2=(" ███ " " █" " ███ " "█ " "█████")
DIGIT_3=("████ " " █" " ███ " " █" "████ ")
DIGIT_4=("█ █" "█ █" "█████" " █" " █")
DIGIT_5=("█████" "█ " "████ " " █" "████ ")
DIGIT_6=(" ███ " "█ " "████ " "█ █" " ███ ")
DIGIT_7=("█████" " █" " █ " " █ " " █ ")
DIGIT_8=(" ███ " "█ █" " ███ " "█ █" " ███ ")
DIGIT_9=(" ███ " "█ █" " ████" " █" " ███ ")
DEGREE_SYMBOL=(" " " ███ " "█ █" " ███ " " ")
CHAR_C=(" ███ " "█ " "█ " "█ " " ███ ")
DIGIT_DOT=(" " " " " " " █ " " ")
DIGIT_COLON=(" " " █ " " " " █ " " ")
Get CPU temperature
get_temp() {
TEMP=$(sensors | grep -i 'Core 0' | awk '{print $3}')
if [ -z "$TEMP" ]; then
TEMP="N/A"
fi
echo "$TEMP"
}
Set color based on temperature
get_temp_color() {
local TEMP=$1
if [[ "$TEMP" == "N/A" ]]; then
echo "$RESET"
else
TEMP_VALUE=(echo "TEMP" | sed 's/[^0-9.]//g')
if (( (echo "TEMP_VALUE <= 50" | bc -l) )); then
echo "$GREEN"
elif (( (echo "TEMP_VALUE > 50 && $TEMP_VALUE <= 75" | bc -l) )); then
echo "$ORANGE"
else
echo "$RED"
fi
fi
}
Display temperature with large digit patterns
display_temp() {
local TEMP=$1
local NUM=(echo "TEMP" | sed 's/[^0-9.]//g')
local -a lines=("" "" "" "" "")
for ((i = 0; i < ${#NUM}; i++)); do
digit="${NUM:$i:1}"
if [ "$digit" == "." ]; then
digit_array="DIGIT_DOT[@]"
else
digit_array="DIGIT_$digit[@]"
fi
digit_lines=("${!digit_array}")
for row in {0..4}; do
lines[$row]+="${digit_lines[$row]} "
done
done
for row in {0..4}; do
lines[$row]+="${DEGREE_SYMBOL[$row]} ${CHAR_C[$row]}"
done
for row in {0..4}; do
echo -e "$TEMP_COLOR${lines[$row]}"
done
}
Display time with large digit patterns (HH:MM)
display_time() {
local TIME=$1
local -a lines=("" "" "" "" "")
for ((i = 0; i < ${#TIME}; i++)); do
char="${TIME:$i:1}"
if [ "$char" == ":" ]; then
char_array="DIGIT_COLON[@]"
else
char_array="DIGIT_$char[@]"
fi
char_lines=("${!char_array}")
for row in {0..4}; do
lines[$row]+="${char_lines[$row]} "
done
done
for row in {0..4}; do
echo -e "${CYAN}${lines[$row]}"
done
}
Check time and set screen based on whether it is between midnight and 8 AM
check_time_and_set_screen() {
while true; do
CURRENT_HOUR=$(date +"%H")
# If time is between 00:00 and 08:00, turn off screen
if [ "$CURRENT_HOUR" -ge 0 ] && [ "$CURRENT_HOUR" -lt 8 ]; then
setterm --blank force --term linux </dev/tty1
else
setterm --blank poke --term linux </dev/tty1
fi
sleep 60 # Check every minute
done
}
Main monitoring loop (refreshes every minute)
monitor() {
while true; do
CPU_TEMP=$(get_temp)
TEMP_COLOR=(get_temp_color "CPU_TEMP")
CURRENT_TIME=$(date +"%H:%M")
clear
echo -e "$BACKGROUND$TEMP_COLOR=========================="
echo -e " CPU Temperature Monitor"
echo
display_temp "$CPU_TEMP"
# Add extra space between temperature and time
echo
echo
echo
echo
echo -e " Current Time"
display_time "$CURRENT_TIME"
echo
echo -e "$TEMP_COLOR=========================="
echo -e "⏸ Updated every minute... Press Ctrl+C to exit$RESET"
sleep 60
done
}
Startup message
clear
echo -e "${GREEN}Starting Hikvision R1 Temperature Monitor..."
sleep 1
Start background time check + main monitor
check_time_and_set_screen & # Background process: Set screen based on time
monitor