A tool/pipeline for monitoring temps of the GPU/CPU on my ASUS TUF laptop running Debian 13.
Find a file
2025-11-07 12:10:31 -05:00
.forgejo/workflows Start of dev branch 2025-11-07 12:10:31 -05:00
amd-monitor.sh Initial Commit 2025-11-05 17:45:27 -05:00
plot_power.py Modify plotting code to handle headerless csv 2025-11-05 18:51:10 -05:00
power_log.csv 11/06/2025 miku gaming session 2025-11-06 21:08:23 -05:00
README.md Add README covering usage flow and CI 2025-11-07 12:00:22 -05:00

AMD TUF Power Monitor

Two small utilities live here:

  • amd-monitor.sh a onesecond loop that reads AMD APU/dGPU telemetry from /sys/class/hwmon, prints a live dashboard, and appends the readings to power_log.csv.
  • plot_power.py turns the CSV log into a bar + line chart so you can visualize power draw and temperatures after a capture session.

The scripts were built for an ASUS TUF laptop running Debian 13, but they should work on any recent AMD system that exposes the same hwmon files.

Requirements

  • Bash (already on most Linux installs).
  • Read access to the hwmon entries for your APU and GPU. On some systems you need to run the script with sudo or add yourself to the video group.
  • Python 3.9+ with pandas and matplotlib (pip install pandas matplotlib) for plotting.

Usage Flow

  1. Collect live telemetry

    chmod +x amd-monitor.sh
    ./amd-monitor.sh
    
    • The script clears the terminal and prints APU/GPU wattage, temperatures, and total power every second.
    • Each sample is appended to power_log.csv as timestamp,apu_w,gpu_w,total_w,apu_temp,gpu_temp.
    • The file is capped at the most recent 500 lines; tweak MAX_LINES if you want longer captures.
  2. Adjust sensor paths if needed

    • Edit the APU_HWMON and GPU_HWMON variables near the top of amd-monitor.sh so they point to the correct /sys/class/hwmon/... folders on your machine.
    • You can also change INTERVAL for faster/slower sampling and LOGFILE if you want a different CSV name.
  3. Plot the results

    python3 plot_power.py
    
    • The script reads power_log.csv (assumed to be headerless), down-samples if there are more than ~200 records, and saves power_graph.png.
    • Power traces are displayed as grouped bars (APU, GPU, total) while temperatures are overlaid as dashed lines on a secondary axis.

Tips

  • Keep amd-monitor.sh running while you stress the system (games, benchmarks, etc.), then stop it with Ctrl+C before plotting.
  • If you need to log multiple sessions, rename or move power_log.csv between runs so plots only cover the period you care about.
  • Want live graphing or more metrics? Extend the CSV schema and the plotting script—the code is intentionally short and hackable.

Forgejo workflow

A Forgejo workflow (.forgejo/workflows/power-graph.yml) automates the chart generation whenever power_log.csv changes on the master branch.

What it does:

  1. Runs on a self-hosted runner because it needs local hwmon logs and Python packages.
  2. Manually clones the repo with a read token stored in secrets.PAT_READ_REPO.
  3. Installs Python (via apt), prepares a virtualenv, and pulls pandas + matplotlib.
  4. Executes python plot_power.py, producing power_graph.png.
  5. Uploads the PNG as a Forgejo artifact (power-graph), so you can download the rendered plot from the workflow page.

To use it, push an updated power_log.csv to master, wait for the workflow to finish, then grab the artifact from the run summary. Update the workflow if your runner already has Python or if you want different triggers/retention.