fix radar web

This commit is contained in:
admin committed 2026-09-11 22:09:39 +07:00
1 parent f5b4ef4e90
commit 8f9a7bae62
3 files changed
+139 -39

No files matched your search

+46 -14
View File
@@ -249,28 +249,60 @@ journalctl -u radar-web -f # Xem log realtime
---
## 7. Troubleshooting
## 7. Troubleshooting — Kiểm tra lỗi nhanh
### Không mở được trang web
### 7.1 Quick check trong 60 giây
Nếu backend log "Đã kết nối WebSocket tới ESP32" nhưng web không thấy dữ liệu, làm theo thứ tự:
1. **Mở DevTools (F12) → tab Console**:
- Gõ: `await fetch('/api/state').then(r=>r.json()).then(d=>console.log(d))`
- Kết quả đúng phải là object có `zones` và `targets` (3 phần tử mỗi mảng)
- Nếu nhận được object: WebSocket frontend đang có vấn đề (hãy xem log có chữ `[Radar] WebSocket closed?`)
- Nếu không nhận được: backend có vấn đề (xem log terminal backend)
2. **Xem 2 chip trạng thái trên header (góc trên phải)**:
- `ESP32: Đã kết nối` (xanh) — backend ↔ ESP32 OK
- `WS: Đã kết nối` (xanh) — trình duyệt ↔ backend OK
- Nếu WS màu đỏ: mở DevTools → Network → WS → chọn `/ws` → xem "Messages" có dòng nào không.
3. **Hiển thị gì phải có ngay cả khi parser ESP32 là stub?**
- Grid, vòng tròn khoảng cách, radar (điểm đỏ dưới cùng), **3 zones theo mặc định phải hiện rõ ràng**
- Chip `ESP32` phải xanh, `Frames` trong Thống kê = 0 là bình thường (parser stub)
- **Target không thấy là Bình thường** nếu parser chưa implement — nhưng zones & grid PHẢI hiện.
---
### 7.2 Không mở được trang web
1. **Ping Orange Pi**: `ping <OrangePi_IP>`
2. **Kiểm tra port đang mở**: `ss -tulpn | grep 8000`
3. **Tường lửa?** `sudo ufw allow 8000/tcp` hoặc tạm thời `sudo ufw disable`
2. **Kiểm tra port đang mở**: `ss -tulpn | grep 9000` (thay `9000` bằng port bạn dùng)
3. **Tường lửa?** `sudo ufw allow 9000/tcp` hoặc tạm thời `sudo ufw disable`
4. **Visualizer đang chạy?** `ps aux | grep visualizer`
### Không thấy dữ liệu radar (không có target)
1. **Kiểm tra trạng thái ESP32** (chip màu đỏ/xanh trên cùng bên phải trang web)
2. **Ping ESP32**: `ping 192.168.1.100`
3. **Test REST ESP32**: `curl http://192.168.1.100/status` → phải có JSON `{"status":"ok",...}`
4. **ESP32 đang DIAGNOSTIC_MODE 1?** → phải là `0` mới có WiFi/WebSocket
5. **Parser ESP32 vẫn là stub?** → Target luôn `INVALID` nếu parser chưa triển khai (thông báo ở README gốc)
---
### Tốc độ cập nhật chậm
### 7.3 Không thấy dữ liệu radar / không có target
1. **Kiểm tra 2 chip trạng thái** (section 7.1)
2. **Ping ESP32**: `ping 192.168.88.32` (thay IP của bạn)
3. **Test REST ESP32**: `curl http://192.168.88.32/status` → phải trả JSON `{"status":"ok",...}`
4. **Test state từ backend (ngoài trình duyệt)**: `curl http://<OrangePi_IP>:9000/api/state` → object JSON 2 mảng zones + targets
5. **ESP32 đang `DIAGNOSTIC_MODE 1`?** → phải là `0` mới có WiFi/WebSocket
6. **Parser ESP32 vẫn là stub?** → **Target luôn = 0 / INVALID là BÌNH THƯỜNG** cho đến khi bạn implement `tryParseFrame()` thật trong `LD2453Parser.cpp`. Grid + zones vẫn phải hiện.
---
### 7.4 Tốc độ cập nhật chậm
- Mặc định radar LD2453 gửi ~2 frame/giây. Đó là giới hạn phần cứng.
- **Bảo đảm Orange Pi gửi state liên tục**: heartbeat 1 giây luôn gửi ngay cả khi ESP32 không gửi frame mới.
- Đảm bảo Orange Pi và ESP32 có tín hiệu WiFi tốt.
### WebSocket không kết nối (trình duyệt báo lỗi)
- Mở DevTools (F12) → Console xem lỗi chi tiết
- Kiểm tra trình duyệt truy cập đúng `http://<IP>:8000` (không phải `https://`)
---
### 7.5 WebSocket không kết nối (trình duyệt báo lỗi)
- Mở DevTools (F12) → **Console** sẽ log rõ ràng: `[Radar] WebSocket closed (code=...)`
- `code=1006`: mạng bị ngắt giữa chừng → tự động reconnect 2s sau
- `code=403/404`: mở sai port hoặc sai path
- Kiểm tra trình duyệt truy cập đúng `http://<IP>:9000` (**KHÔNG** `https://`)
- Nếu mở trên **mobile cùng WiFi** mà không được: tắt "VPN / Private DNS / Use random MAC" trên điện thoại thử lại
- Nếu dùng reverse proxy (Caddy/Nginx): cấu hình WebSocket upgrade (header `Upgrade: websocket`)
---