rpi_check.sh 3.4 KB

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