check_pi_throttling.info
Monitor the throttling status of your Raspberry Pi with this shell script, which checks for undervolting, frequency capping, and temperature limits using the vcgencmd
tool.
ChatGPT has contributed to this document. Therefore, it’s advisable to treat the information here with caution and verify it if necessary.
Let’s break down what this script does in detail. The script is named
check_pi_throttling.sh
, authored by GJS (homelab-alpha), and its purpose is to
check the throttling status of a Raspberry Pi by querying the vcgencmd
tool.
This is useful for monitoring the system’s health and ensuring it is operating
within safe parameters.
Here’s a detailed explanation:
Script Metadata
- Filename:
check_pi_throttling.sh
- Author: GJS (homelab-alpha)
- Date: May 18, 2024
- Version: 1.0
- Description: This script checks the throttling status of a Raspberry Pi by
querying the
vcgencmd
tool. - RAW Script: check_pi_throttling.sh
Flag Bits
These are hexadecimal constants representing different throttling conditions:
UNDERVOLTED=0x1
CAPPED=0x2
THROTTLED=0x4
SOFT_TEMPLIMIT=0x8
HAS_UNDERVOLTED=0x10000
HAS_CAPPED=0x20000
HAS_THROTTLED=0x40000
HAS_SOFT_TEMPLIMIT=0x80000
UNDERVOLTED
: Indicates if the Pi is currently undervolted.CAPPED
: Indicates if the CPU frequency is capped.THROTTLED
: Indicates if the Pi is currently throttled.SOFT_TEMPLIMIT
: Indicates if the Pi has hit a soft temperature limit.HAS_UNDERVOLTED
: Indicates if the Pi has been undervolted at any time since last reboot.HAS_CAPPED
: Indicates if the CPU frequency has been capped at any time since last reboot.HAS_THROTTLED
: Indicates if the Pi has been throttled at any time since last reboot.HAS_SOFT_TEMPLIMIT
: Indicates if the Pi has hit a soft temperature limit at any time since last reboot.
Text Colors
These define color codes for output text using tput
for better readability:
GREEN=$(tput setaf 2)
RED=$(tput setaf 1)
NC=$(tput sgr0)
GREEN
: Sets text color to green.RED
: Sets text color to red.NC
: Resets text color to default.
Output Strings
These are used to standardize “good” and “bad” status messages:
GOOD="${GREEN}NO${NC}"
BAD="${RED}YES${NC}"
GOOD
: Indicates a non-problematic status with green text “NO”.BAD
: Indicates a problematic status with red text “YES”.
Get Status and Extract Hex Value
This part queries the vcgencmd
tool and extracts the status:
STATUS=$(vcgencmd get_throttled)
STATUS=${STATUS#*=}
STATUS=$(vcgencmd get_throttled)
: Runs thevcgencmd get_throttled
command which returns the throttling status.STATUS=${STATUS#*=}
: Strips the “throttled=” prefix, leaving only the hex status value.
Display Status
This part of the script displays the current status in a readable format:
echo -n "Status: "
((STATUS != 0)) && echo "${RED}${STATUS}${NC}" || echo "${GREEN}${STATUS}${NC}"
echo ""
echo -n "Status: "
: Prints “Status: " without a newline.((STATUS != 0)) && echo "${RED}${STATUS}${NC}" || echo "${GREEN}${STATUS}${NC}"
: Checks ifSTATUS
is non-zero. If true, it prints the status in red; otherwise, it prints the status in green.
Detailed Condition Checks
The script then checks and displays whether each specific condition is currently active and if it has ever been active:
echo "Undervolted:"
echo -n "Now: "
((STATUS & UNDERVOLTED != 0)) && echo "${BAD}" || echo "${GOOD}"
echo -n "Run: "
((STATUS & HAS_UNDERVOLTED != 0)) && echo "${BAD}" || echo "${GOOD}"
echo ""
echo "Throttled:"
echo -n "Now: "
((STATUS & THROTTLED != 0)) && echo "${BAD}" || echo "${GOOD}"
echo -n "Run: "
((STATUS & HAS_THROTTLED != 0)) && echo "${BAD}" || echo "${GOOD}"
echo ""
echo "Frequency Capped:"
echo -n "Now: "
((STATUS & CAPPED != 0)) && echo "${BAD}" || echo "${GOOD}"
echo -n "Run: "
((STATUS & HAS_CAPPED != 0)) && echo "${BAD}" || echo "${GOOD}"
echo ""
echo "Softlimit:"
echo -n "Now: "
((STATUS & SOFT_TEMPLIMIT != 0)) && echo "${BAD}" || echo "${GOOD}"
echo -n "Run: "
((STATUS & HAS_SOFT_TEMPLIMIT != 0)) && echo "${BAD}" || echo "${GOOD}"
echo ""
For each condition (Undervolted, Throttled, Frequency Capped, and Softlimit):
Current Status:
echo -n "Now: "
: Prints “Now: " without a newline.((STATUS & CONDITION != 0)) && echo "${BAD}" || echo "${GOOD}"
: Checks if the specific condition is currently active and prints “YES” (in red) if true, or “NO” (in green) if false.
Historical Status:
echo -n "Run: "
: Prints “Run: " without a newline.((STATUS & HAS_CONDITION != 0)) && echo "${BAD}" || echo "${GOOD}"
: Checks if the specific condition has ever been active and prints “YES” (in red) if true, or “NO” (in green) if false.
Conclusion
By running this script, users can quickly see if their Raspberry Pi has encountered any power or thermal issues that could affect performance. The use of color-coded output makes it easy to identify problems at a glance.
Last updated 22 Sep 2024, 12:15 CEST .