| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #!/bin/bash
- #########################################################################
- # Script for check RPI hardware issues #
- # Created by Pavol Macko - DoIT #
- # ver 0.2 #
- #########################################################################
- #---------------------------- CHECK-TOOL -------------------------------#
- checktool(){
- if [ ! -f /usr/bin/vcgencmd ];
- then
- echo "------------------------------------"
- echo -e "! \e[1;31mNOT DETECETD\e[0m [\e[1;34mvcgencmd\e[0m] tool or \e[1;31mHW\e[0m"
- echo "------------------------------------"
- rm -rf /home/rpi_check.sh
- exit 1
- fi
- }
- #------------------------------ MAPPING --------------------------------#
- mapping(){
- ISSUES_MAP=( \
- [0]="Under-voltage detected" \
- [1]="Arm frequency capped" \
- [2]="Currently throttled"
- [3]="Soft temperature limit active" \
- [16]="Under-voltage has occurred" \
- [17]="Arm frequency capping has occurred" \
- [18]="Throttling has occurred" \
- [19]="Soft temperature limit has occurred")
- HEX_BIN_MAP=( \
- ["0"]="0000" \
- ["1"]="0001" \
- ["2"]="0010" \
- ["3"]="0011" \
- ["4"]="0100" \
- ["5"]="0101" \
- ["6"]="0110" \
- ["7"]="0111" \
- ["8"]="1000" \
- ["9"]="1001" \
- ["A"]="1010" \
- ["B"]="1011" \
- ["C"]="1100" \
- ["D"]="1101" \
- ["E"]="1110" \
- ["F"]="1111" \
- )
- }
- #----------------------------- HARDWARE --------------------------------#
- hardware(){
- HOSTNAME=$(hostname -s | tr '[:lower:]' '[:upper:]')
- if [ -f /proc/device-tree/model ];
- then
- MOD=$(cat /proc/device-tree/model | awk '{print $1,$2,$3,$4,$5}' | sed 's/ /-/g' | sed 's/--//g' | tr '[:lower:]' '[:upper:]')
- else
- MOD=$(cat /sys/devices/virtual/dmi/id/product_name | sed 's/ /-/g' | sed 's/--//g' | tr '[:lower:]' '[:upper:]')
- fi
- echo "------------------------------------"
- echo -e "\e[1;36mMODEL: $MOD\e[0m"
- echo -e "\e[1;36mHOSTNAME: $HOSTNAME\e[0m"
- }
- #------------------------------ EXTRACT --------------------------------#
- extract(){
- THROTTLED_OUTPUT=$(/usr/bin/vcgencmd get_throttled)
- IFS='x'
- read -a strarr <<< "$THROTTLED_OUTPUT"
- THROTTLED_CODE_HEX=${strarr[1]}
- }
- #--------------------------- CHECK-CURRENT -----------------------------#
- checkcur(){
- echo "------------------------------------"
- echo -e "\e[1;31m[CURRENT] HARDWARE DETECTED ISSUES:\e[0m"
- echo "------------------------------------"
- CURRENT_HEX=${THROTTLED_CODE_HEX:4:1}
- CURRENT_BIN=${HEX_BIN_MAP[$CURRENT_HEX]}
- if [ "$CURRENT_HEX" == "0" ] || [ -z $CURRENT_HEX ];
- then
- echo -e "- \e[1;32mNo issues detected\e[0m"
- else
- bit_n=0
- for (( i=${#CURRENT_BIN}-1; i>=0; i--));
- do
- if [ "${CURRENT_BIN:$i:1}" = "1" ];
- then
- echo -e "- \e[1;31m${ISSUES_MAP[$bit_n]}\e[0m"
- bit_n=$((bit_n+1))
- fi
- done
- fi
- }
- #--------------------------- CHECK-HISTORY -----------------------------#
- checkhis(){
- echo "------------------------------------"
- echo -e "\e[1;33m[HISTORY] HARDWARE DETECTED ISSUES:\e[0m"
- echo "------------------------------------"
- PAST_HEX=${THROTTLED_CODE_HEX:0:1}
- PAST_BIN=${HEX_BIN_MAP[$PAST_HEX]}
- if [ $PAST_HEX = "0" ];
- then
- echo -e "- \e[1;32mNo issues detected\e[0m"
- else
- bit_n=16
- for (( i=${#PAST_BIN}-1; i>=0; i--));
- do
- if [ "${PAST_BIN:$i:1}" = "1" ];
- then
- echo -e "- \e[1;33m${ISSUES_MAP[$bit_n]}\e[0m"
- bit_n=$((bit_n+1))
- fi
- done
- fi
- echo "------------------------------------"
- }
- #------------------------------- CORE ----------------------------------#
- clear
- hardware
- checktool
- mapping
- extract
- checkcur
- checkhis
|