Klipper A-Z phần 7: Khắc phục sự cố Klipper và bảo trì hệ thống hiệu quả

Phần cuối cùng này sẽ giúp bạn duy trì hệ thống Klipper hoạt động ổn định lâu dài. Chúng ta sẽ học cách đọc log để tìm nguyên nhân lỗi, khắc phục các sự cố thường gặp và thiết lập quy trình bảo trì hiệu quả.

Klipper A-Z phần 7: Khắc phục sự cố Klipper và bảo trì hệ thống hiệu quả
Photo by Snapmaker 3D Printer / Unsplash

Danh sách bài viết:

  1. Giới thiệu Klipper
  2. Chuẩn bị phần cứng và cài đặt Klipper
  3. Flash firmware và tạo file printer.cfg
  4. Hiệu chỉnh cơ bản
  5. Input Shaper và Pressure Advance
  6. Tạo macro Klipper cơ bản
  7. Khắc phục sự cố và bảo trì hệ thống

Các lỗi Klipper thường gặp

Lỗi kết nối MCU: "mcu 'mcu': Unable to connect"

Đây là một trong những lỗi phổ biến nhất khi Klipper không thể kết nối với board mạch chủ.

Nguyên nhân thường gặp:

  • Cáp USB bị lỏng hoặc hỏng
  • Board chưa được flash firmware Klipper
  • Sai serial path trong config
  • Conflict với OctoPrint hoặc phần mềm khác
  • Board không được cấp nguồn đầy đủ

Cách khắc phục:

# Kiểm tra thiết bị USB được nhận diện
lsusb

# Xem các cổng serial có sẵn
ls /dev/serial/by-id/

# Kiểm tra quyền truy cập
sudo usermod -a -G dialout pi

Lỗi ADC (Analog to Digital Converter)

"ADC out of range" hoặc "Sensor not connected"

Klipper báo lỗi này khi không đọc được giá trị từ thermistor.

Nguyên nhân:

  • Thermistor bị đứt dây
  • Thermistor bị chập mạch
  • Kết nối không chắc chắn
  • Sai loại thermistor trong config

Cách khắc phục:

  1. Kiểm tra kết nối dây thermistor
  2. Đo điện trở thermistor bằng đồng hồ vạn năng
  3. Xác nhận đúng loại sensor trong config:
[extruder]
sensor_type: EPCOS 100K B57560G104F  # Kiểm tra đúng loại
sensor_pin: PA0                      # Kiểm tra đúng pin

Lỗi TMC Driver: "Unable to read tmc stepper driver register"

Xảy ra khi giao tiếp với TMC driver không thành công.

Nguyên nhân:

  • Board chưa được cấp nguồn 12-24V
  • TMC driver chưa được cắm đúng vị trí
  • Thiếu hoặc thừa jumper cần thiết
  • Cấu hình UART/SPI không đúng

Cách khắc phục:

  1. Kiểm tra nguồn cấp cho board (12-24V)
  2. Xác nhận TMC driver cắm đúng hướng
  3. Kiểm tra jumper theo hướng dẫn board
  4. Kiểm tra config UART:
[tmc2208 stepper_x]
uart_pin: PC4
run_current: 0.800
stealthchop_threshold: 999999

Lỗi Endstop "Endstop still triggered after retract"

Klipper báo endstop vẫn bị kích hoạt sau khi rút ra.

Nguyên nhân:

  • Endstop bị dính hoặc hỏng
  • Cấu hình endstop sai (normally open/closed)
  • Dây tín hiệu bị nhiễu
  • Cơ khí bị kẹt

Cách khắc phục:

# Kiểm tra trạng thái endstop
QUERY_ENDSTOPS

# Kết quả mong đợi khi không triggered:
# x:open y:open z:open

Nếu hiển thị "TRIGGERED" khi không có vật cản:

[stepper_x]
endstop_pin: ^PA1    # Thêm ^ cho pullup
# hoặc
endstop_pin: !PA1    # Thêm ! để đảo logic

Đọc và phân tích log file

Vị trí file log

Log chính của Klipper được lưu tại /tmp/klippy.log. File này chứa tất cả thông tin về:

  • Khởi động hệ thống
  • Kết nối MCU
  • Lỗi runtime
  • Thông tin shutdown

Cách tải log từ web interface

Mainsail/Fluidd:

  1. Vào tab Machine > System
  2. Tìm file klippy.log
  3. Click Download để tải về

Thông qua SSH:

# Copy log ra thư mục dễ truy cập
cp /tmp/klippy.log ~/klippy_backup.log

# Hoặc xem trực tiếp
tail -n 100 /tmp/klippy.log

Phân tích nội dung log

Thông tin khởi động:

Starting Klipper...
Args: ['/home/pi/klipper/klippy/klippy.py', '/home/pi/printer_data/config/printer.cfg', '-l', '/tmp/klippy.log']
Git version: 'v0.12.0-100-g123abc45'

Kết nối MCU thành công:

Loaded MCU 'mcu' 105 commands (v0.12.0-100-g123abc45-dirty-20230901_123456-pi / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703)
MCU 'mcu' config: BUS_PINS_spi=PA5,PA6,PA7 BUS_PINS_i2c=PB6,PB7 ADC_MAX=4095 PWM_MAX=255 CLOCK_FREQ=72000000

Lỗi kết nối:

mcu 'mcu': Unable to connect
Traceback (most recent call last):
  File "/home/pi/klipper/klippy/serialhdl.py", line 65, in _get_identify_data
serial.serialutil.SerialException: could not open port /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0: [Errno 2] No such file or directory

Sử dụng logextract.py

Klipper cung cấp script để phân tích log dễ dàng hơn:

# Tạo thư mục làm việc
mkdir ~/log_analysis
cd ~/log_analysis

# Copy log file
cp /tmp/klippy.log .

# Chạy script phân tích
~/klipper/scripts/logextract.py ./klippy.log

Script sẽ tạo ra các file:

  • config.txt - Cấu hình printer tại thời điểm lỗi
  • shutdown.txt - Thông tin chi tiết về lỗi shutdown (nếu có)

Khắc phục lỗi kết nối

Xác định đúng serial path

# Liệt kê tất cả thiết bị USB
lsusb

# Xem serial paths có sẵn
ls -la /dev/serial/by-id/

# Kiểm tra thiết bị nào đang sử dụng cổng
sudo lsof /dev/ttyUSB0

Cập nhật serial path trong printer.cfg:

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
# Thay vì dùng /dev/ttyUSB0 (có thể thay đổi)

Giải quyết conflict với OctoPrint

Nếu chạy cả OctoPrint và Klipper:

# Dừng OctoPrint
sudo systemctl stop octoprint

# Restart Klipper
sudo systemctl restart klipper

# Kiểm tra Klipper hoạt động
sudo systemctl status klipper

Khắc phục lỗi permission

# Thêm user vào group dialout
sudo usermod -a -G dialout $USER

# Khởi động lại để áp dụng
sudo reboot

Flash lại firmware khi cần

# Vào thư mục Klipper
cd ~/klipper

# Cấu hình build cho board
make menuconfig

# Build firmware
make clean
make

# Flash firmware (tùy theo board)
make flash FLASH_DEVICE=/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0

Xử lý lỗi cấu hình

Kiểm tra cú pháp config

Lỗi indentation:

Unable to parse config file '/home/pi/printer_data/config/printer.cfg'

Cách fix:

  • Đảm bảo tất cả dòng trong section được thụt vào đều nhau
  • Không trộn lẫn spaces và tabs
  • Sử dụng text editor hỗ trợ syntax highlighting

Lỗi pin trùng lặp

"Pin PA1 used multiple times"

# Sai - cùng pin được dùng 2 lần
[stepper_x]
endstop_pin: PA1

[stepper_y] 
endstop_pin: PA1  # Lỗi: trùng pin với stepper_x

Cách fix:

  • Kiểm tra schematic của board
  • Đảm bảo mỗi pin chỉ được định nghĩa một lần
  • Sử dụng các pin khác nhau cho các chức năng khác nhau

Lỗi thiếu section bắt buộc

"Unable to find section 'printer'"

Đảm bảo có đầy đủ các section cơ bản:

[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 3000
max_z_velocity: 5
max_z_accel: 100

[mcu]
serial: /dev/serial/by-id/...

# Ít nhất một stepper
[stepper_x]
# ... cấu hình stepper

Test config trước khi restart

# Kiểm tra config syntax mà không restart
~/klipper/scripts/check_syntax.py ~/printer_data/config/printer.cfg

Backup và restore config

Backup thủ công đơn giản

# Tạo thư mục backup
mkdir -p ~/config_backup/$(date +%Y%m%d_%H%M%S)

# Copy toàn bộ config
cp -r ~/printer_data/config/* ~/config_backup/$(date +%Y%m%d_%H%M%S)/

# Nén backup để tiết kiệm dung lượng
tar -czf ~/config_backup_$(date +%Y%m%d_%H%M%S).tar.gz ~/printer_data/config/

Script backup tự động

Tạo file ~/backup_klipper.sh:

#!/bin/bash

# Đường dẫn backup
BACKUP_DIR="$HOME/klipper_backup"
DATE=$(date +%Y%m%d_%H%M%S)

# Tạo thư mục backup
mkdir -p "$BACKUP_DIR"

# Backup config
tar -czf "$BACKUP_DIR/config_$DATE.tar.gz" -C "$HOME/printer_data" config/

# Giữ lại 10 backup gần nhất
ls -t "$BACKUP_DIR"/config_*.tar.gz | tail -n +11 | xargs -r rm

echo "Backup completed: config_$DATE.tar.gz"

Chạy tự động mỗi ngày:

# Làm cho script có thể thực thi
chmod +x ~/backup_klipper.sh

# Thêm vào crontab
crontab -e

# Thêm dòng này (backup mỗi ngày lúc 2:00 AM)
0 2 * * * /home/pi/backup_klipper.sh

Backup lên GitHub tự động

Sử dụng Klipper-Backup script:

# Cài đặt Klipper-Backup
cd ~
git clone https://github.com/Staubgeborener/klipper-backup.git
cd klipper-backup
cp .env.example .env

# Chỉnh sửa cấu hình
nano .env

Cấu hình .env:

github_token=ghp_xxxxxxxxxxxx  # GitHub Personal Access Token
github_username=your_username
github_repository=klipper-config
backup_folder=/home/pi/printer_data/config

Thiết lập auto-update trong moonraker.conf:

[update_manager klipper-backup]
type: git_repo
path: ~/klipper-backup
origin: https://github.com/Staubgeborener/klipper-backup.git
managed_services: moonraker
primary_branch: main

Restore config

Từ backup local:

# Dừng Klipper
sudo systemctl stop klipper

# Restore từ backup
tar -xzf ~/config_backup_20231215_140000.tar.gz -C ~/

# Restart Klipper
sudo systemctl start klipper

Từ GitHub:

# Clone repository
git clone https://github.com/your_username/klipper-config.git ~/temp_restore

# Copy config
cp -r ~/temp_restore/* ~/printer_data/config/

# Restart
sudo systemctl restart klipper

Cập nhật hệ thống an toàn

Kiểm tra version hiện tại

# Kiểm tra version Klipper
cd ~/klipper && git log --oneline -1

# Kiểm tra các package system
sudo apt list --upgradable

Backup trước khi update

# Luôn backup trước khi update
~/backup_klipper.sh

# Backup klippy.log hiện tại
cp /tmp/klippy.log ~/klippy_before_update.log

Update Klipper

# Kiểm tra thay đổi mới
cd ~/klipper
git fetch origin
git log HEAD..origin/master --oneline

# Update code
git pull

# Recompile nếu cần
make clean
make

# Flash firmware lại
make flash FLASH_DEVICE=/dev/serial/by-id/...

# Restart services
sudo systemctl restart klipper

Update system packages

# Update package list
sudo apt update

# Upgrade packages (cẩn thận với major updates)
sudo apt upgrade

# Chỉ update security patches
sudo apt upgrade -s | grep -i security

Xử lý khi update failed

Klipper không start sau update:

# Xem log lỗi
sudo systemctl status klipper
journalctl -u klipper -f

# Rollback về version cũ
cd ~/klipper
git log --oneline -10  # Xem các commit gần đây
git checkout <commit_hash_cũ>

# Recompile và flash
make clean && make
make flash FLASH_DEVICE=/dev/serial/by-id/...

Config không tương thích:

# Kiểm tra config changes document
# https://www.klipper3d.org/Config_Changes.html

# Restore config backup
cp ~/config_backup/printer.cfg ~/printer_data/config/

Best practices cho updates

  1. Đọc release notes trước khi update
  2. Test update trên printer ít quan trọng trước
  3. Luôn backup đầy đủ
  4. Update từng phần một (Klipper → Moonraker → Frontend)
  5. Không update khi đang có print job quan trọng
  6. Monitor log sau update

Thiết lập monitoring tự động

Tạo script kiểm tra health:

#!/bin/bash
# ~/health_check.sh

LOG_FILE="/tmp/klippy.log"
HEALTH_LOG="$HOME/klipper_health.log"

# Kiểm tra Klipper service
if ! systemctl is-active --quiet klipper; then
    echo "$(date): Klipper service is not running!" >> "$HEALTH_LOG"
fi

# Kiểm tra lỗi trong log gần đây
if tail -n 100 "$LOG_FILE" | grep -q "ERROR\|CRITICAL"; then
    echo "$(date): Errors found in recent logs" >> "$HEALTH_LOG"
fi

# Kiểm tra disk space
DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt 90 ]; then
    echo "$(date): Disk usage high: $DISK_USAGE%" >> "$HEALTH_LOG"
fi

Chạy mỗi giờ:

# Thêm vào crontab
0 * * * * /home/pi/health_check.sh

Kết luận

Việc duy trì hệ thống Klipper ổn định đòi hỏi sự chủ động trong việc monitoring, backup và xử lý sự cố. Với các kỹ năng đã học trong bài này, bạn có thể:

Quan trọng cần nhớ:

  • Luôn đọc và hiểu log để tìm nguyên nhân gốc của vấn đề
  • Backup config thường xuyên trước khi thay đổi quan trọng
  • Update từng bước một và test kỹ lưỡng
  • Thiết lập monitoring để phát hiện sớm vấn đề
  • Có kế hoạch recovery sẵn sàng

Với series hướng dẫn 7 bài này, bạn đã có đầy đủ kiến thức để cài đặt, cấu hình và vận hành Klipper một cách chuyên nghiệp. Chúc bạn có những trải nghiệm in 3D tuyệt vời với Klipper!


Tài liệu tham khảo

  1. Klipper Official Documentation - Debugging
  2. Klipper Official Documentation - FAQ
  3. Klipper Official Documentation - Config Changes
  4. Voron Documentation - Common Klipper Errors
  5. Klipper-Backup Script
  6. Klipper Backup Script Alternative
  7. Klipper Maintenance Reminder
  8. Automated Home Party - Backup Guide

Read more

Mua máy in 3D hãng hay tự lắp ráp (DIY): Lựa chọn nào phù hợp cho người mới bắt đầu?

Mua máy in 3D hãng hay tự lắp ráp (DIY): Lựa chọn nào phù hợp cho người mới bắt đầu?

Máy in 3D đang ngày càng phổ biến tại Việt Nam, từ những người đam mê công nghệ đến học sinh, sinh viên và các doanh nghiệp nhỏ. Tuy nhiên, câu hỏi đặt ra cho người mới bắt đầu là: nên mua máy in 3D có sẵn từ hãng hay tự lắp ráp để tiết kiệm chi phí? Chúng ta cùng phân tích nhé!

By Hải Nguyễn