源脚本
#!/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