1
0

rpi_check.sh 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #!/bin/bash
  2. #########################################################################
  3. # Script for check RPI hardware issues #
  4. # Created by Pavol Macko - DoIT #
  5. # ver 0.2 #
  6. #########################################################################
  7. #---------------------------- CHECK-TOOL -------------------------------#
  8. checktool(){
  9. if [ ! -f /usr/bin/vcgencmd ];
  10. then
  11. echo "------------------------------------"
  12. echo -e "! \e[1;31mNOT DETECETD\e[0m [\e[1;34mvcgencmd\e[0m] tool or \e[1;31mHW\e[0m"
  13. echo "------------------------------------"
  14. rm -rf /home/rpi_check.sh
  15. exit 1
  16. fi
  17. }
  18. #------------------------------ MAPPING --------------------------------#
  19. mapping(){
  20. ISSUES_MAP=( \
  21. [0]="Under-voltage detected" \
  22. [1]="Arm frequency capped" \
  23. [2]="Currently throttled"
  24. [3]="Soft temperature limit active" \
  25. [16]="Under-voltage has occurred" \
  26. [17]="Arm frequency capping has occurred" \
  27. [18]="Throttling has occurred" \
  28. [19]="Soft temperature limit has occurred")
  29. HEX_BIN_MAP=( \
  30. ["0"]="0000" \
  31. ["1"]="0001" \
  32. ["2"]="0010" \
  33. ["3"]="0011" \
  34. ["4"]="0100" \
  35. ["5"]="0101" \
  36. ["6"]="0110" \
  37. ["7"]="0111" \
  38. ["8"]="1000" \
  39. ["9"]="1001" \
  40. ["A"]="1010" \
  41. ["B"]="1011" \
  42. ["C"]="1100" \
  43. ["D"]="1101" \
  44. ["E"]="1110" \
  45. ["F"]="1111" \
  46. )
  47. }
  48. #----------------------------- HARDWARE --------------------------------#
  49. hardware(){
  50. HOSTNAME=$(hostname -s | tr '[:lower:]' '[:upper:]')
  51. if [ -f /proc/device-tree/model ];
  52. then
  53. MOD=$(cat /proc/device-tree/model | awk '{print $1,$2,$3,$4,$5}' | sed 's/ /-/g' | sed 's/--//g' | tr '[:lower:]' '[:upper:]')
  54. else
  55. MOD=$(cat /sys/devices/virtual/dmi/id/product_name | sed 's/ /-/g' | sed 's/--//g' | tr '[:lower:]' '[:upper:]')
  56. fi
  57. echo "------------------------------------"
  58. echo -e "\e[1;36mMODEL: $MOD\e[0m"
  59. echo -e "\e[1;36mHOSTNAME: $HOSTNAME\e[0m"
  60. }
  61. #------------------------------ EXTRACT --------------------------------#
  62. extract(){
  63. THROTTLED_OUTPUT=$(/usr/bin/vcgencmd get_throttled)
  64. IFS='x'
  65. read -a strarr <<< "$THROTTLED_OUTPUT"
  66. THROTTLED_CODE_HEX=${strarr[1]}
  67. }
  68. #--------------------------- CHECK-CURRENT -----------------------------#
  69. checkcur(){
  70. echo "------------------------------------"
  71. echo -e "\e[1;31m[CURRENT] HARDWARE DETECTED ISSUES:\e[0m"
  72. echo "------------------------------------"
  73. CURRENT_HEX=${THROTTLED_CODE_HEX:4:1}
  74. CURRENT_BIN=${HEX_BIN_MAP[$CURRENT_HEX]}
  75. if [ "$CURRENT_HEX" == "0" ] || [ -z $CURRENT_HEX ];
  76. then
  77. echo -e "- \e[1;32mNo issues detected\e[0m"
  78. else
  79. bit_n=0
  80. for (( i=${#CURRENT_BIN}-1; i>=0; i--));
  81. do
  82. if [ "${CURRENT_BIN:$i:1}" = "1" ];
  83. then
  84. echo -e "- \e[1;31m${ISSUES_MAP[$bit_n]}\e[0m"
  85. bit_n=$((bit_n+1))
  86. fi
  87. done
  88. fi
  89. }
  90. #--------------------------- CHECK-HISTORY -----------------------------#
  91. checkhis(){
  92. echo "------------------------------------"
  93. echo -e "\e[1;33m[HISTORY] HARDWARE DETECTED ISSUES:\e[0m"
  94. echo "------------------------------------"
  95. PAST_HEX=${THROTTLED_CODE_HEX:0:1}
  96. PAST_BIN=${HEX_BIN_MAP[$PAST_HEX]}
  97. if [ $PAST_HEX = "0" ];
  98. then
  99. echo -e "- \e[1;32mNo issues detected\e[0m"
  100. else
  101. bit_n=16
  102. for (( i=${#PAST_BIN}-1; i>=0; i--));
  103. do
  104. if [ "${PAST_BIN:$i:1}" = "1" ];
  105. then
  106. echo -e "- \e[1;33m${ISSUES_MAP[$bit_n]}\e[0m"
  107. bit_n=$((bit_n+1))
  108. fi
  109. done
  110. fi
  111. echo "------------------------------------"
  112. }
  113. #------------------------------- CORE ----------------------------------#
  114. clear
  115. hardware
  116. checktool
  117. mapping
  118. extract
  119. checkcur
  120. checkhis