Tài liệu Flash Firmware — IoT Firmware Loader
Tổng quan
Ứng dụng tự động hóa quá trình nạp firmware cho thiết bị OpenWrt Barrier Breaker 14.07 thông qua giao diện web LuCI. Thay vì thao tác thủ công trên trình duyệt, ứng dụng thực hiện 3 bước HTTP tự động cho mỗi thiết bị.
Luồng hoạt động
Chi tiết flash_device() cho mỗi thiết bị
Bảng Status
Status trên cột "Status" trong bảng thiết bị
| Icon |
Status |
Điều kiện hiển thị |
| — |
READY |
Sau khi scan, thiết bị chưa được flash |
| ⏳ |
Logging in... |
Đang POST login vào LuCI |
| ⏳ |
Uploading firmware... |
Đang upload file .bin (~30MB) lên thiết bị |
| ⏳ |
Confirming (Proceed)... |
Đã upload xong, đang gửi lệnh xác nhận flash |
| ⏳ |
Rebooting... |
Thiết bị đang reboot sau khi flash |
| ✅ |
DONE |
Flash thành công, thiết bị đang khởi động lại |
| ✅ |
DONE (rebooting) |
Flash thành công nhưng timeout khi chờ response (bình thường) |
| ❌ |
FAIL: Cannot connect |
Không kết nối được tới thiết bị (sai IP, khác mạng) |
| ❌ |
FAIL: Login denied (403) |
Thiết bị từ chối đăng nhập (sai mật khẩu) |
| ❌ |
FAIL: Login failed — no session |
Login không trả về cookie hoặc token |
| ❌ |
FAIL: Upload HTTP xxx |
Server trả mã lỗi HTTP khi upload |
| ❌ |
FAIL: Invalid firmware image |
File firmware không hợp lệ |
| ❌ |
FAIL: Firmware not compatible |
Firmware không tương thích với thiết bị |
| ❌ |
FAIL: Upload ignored by server |
Server nhận file nhưng không xử lý (sai form field) |
| ❌ |
FAIL: Unexpected response after upload |
Không nhận được trang xác nhận Verify |
Chi tiết kỹ thuật HTTP
Step 1: Login
| Kết quả |
Điều kiện |
| Thành công |
Response chứa sysauth cookie VÀ/HOẶC stok token trong URL/body |
| Thất bại |
HTTP 403, hoặc không có cookie/token |
Field names tự động phát hiện:
- OpenWrt Barrier Breaker 14.07:
username / password
- OpenWrt mới hơn:
luci_username / luci_password
Step 2: Upload Firmware
| Kết quả |
Điều kiện |
| Thành công |
Response chứa "Flash Firmware - Verify" + "Proceed" + checksum |
| Thất bại |
Response chứa "invalid image", "unsupported", hoặc vẫn hiện form upload |
Step 3: Proceed (Xác nhận)
| Kết quả |
Điều kiện |
| Thành công |
Response "The system is flashing now" HOẶC connection bị ngắt (thiết bị reboot) |
| Thất bại |
Hiếm khi xảy ra — nếu đã qua Step 2 thì Step 3 gần như luôn thành công |
Xử lý song song
| Config |
Giá trị |
Ý nghĩa |
Concurrent devices = 10 |
Mặc định |
Flash 10 thiết bị song song |
Concurrent devices = 0 |
Unlimited |
Flash tất cả thiết bị cùng lúc |
Concurrent devices = 1 |
Tuần tự |
Flash từng thiết bị một |
Mỗi thiết bị có session HTTP riêng → không bị lẫn cookie/token giữa các thiết bị.
Files liên quan
| File |
Chức năng |
flasher.py |
Logic flash 3 bước (login → upload → proceed) |
main.py |
UI PyQt6, FlashThread, quản lý song song |
debug_full.py |
Script debug — chạy 3 bước với log chi tiết |
scanner.py |
Scan mạng LAN tìm thiết bị |
""", "Complexity": 3, "Description": "Created flash documentation file with workflow diagrams, status conditions, HTTP details, and parallel processing explanation.", "EmptyFile": false, "IsArtifact": false, "Overwrite": false, "TargetFile": "/Users/nguyennhatminh/Documents/file code/Smatec/iot_fw_loader/FLASH_DOC.md