Explorar el Código

Script for check detected RPI HW issues (frequency, voltage, temperature)

pmacko hace 22 horas
padre
commit
ce2e184960
Se han modificado 1 ficheros con 127 adiciones y 0 borrados
  1. 127 0
      rpi_check.sh

+ 127 - 0
rpi_check.sh

@@ -0,0 +1,127 @@
+#!/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