#!/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