# RCSA Firmware บน Raspberry Pi 5 + Cloudflare (เปิดสาธารณะ)

ชุดนี้ทำให้ RCSA Firmware รันถาวรบน RPi 5 และเข้าได้จาก **ทุกที่บนอินเทอร์เน็ต**
ผ่าน Cloudflare Quick Tunnel (ฟรี ไม่ต้องมีโดเมน/บัญชี) โดยมี token กันคนยิงมั่ว

```
  อินเทอร์เน็ต ──► https://xxxx.trycloudflare.com ──► cloudflared (บน RPi)
                                                          │ localhost:8770
                                                          ▼
                                                   RCSA Firmware (server.py)
                                                          │
                                                   พอร์ต serial /dev/ttyACM0 ...
                                                          ▼
                                                   บอร์ด Pixhawk / ESP32 / SiK
```

- RCSA Firmware bind `127.0.0.1` เท่านั้น → **ไม่ต้องเปิด firewall / เปิดพอร์ต router**
- ทางเข้าจากนอกมีทางเดียวคือผ่าน cloudflared → ปลอดภัยกว่าเปิดพอร์ตตรงๆ

---

## ติดตั้ง (ครั้งเดียว)

1. ก๊อปทั้งโฟลเดอร์ `RCSA_Upload` ไปวางบน RPi เช่น `/home/pi/RCSA_Upload`
   (วิธีไหนก็ได้ — USB, scp, git)

2. เปิด terminal บน RPi เข้าไปในโฟลเดอร์ `RCSA_Firmware` แล้วรัน:

   ```bash
   cd /home/pi/RCSA_Upload/RCSA_Firmware
   bash deploy/setup_rpi.sh
   ```

   อยากเปลี่ยน token / port:
   ```bash
   RCSA_TOKEN=mysecret RCSA_PORT=8770 bash deploy/setup_rpi.sh
   ```

   สคริปต์จะ: ลง python deps (ใน venv), ลง cloudflared, เพิ่ม user เข้ากลุ่ม
   `dialout` (สิทธิ์ใช้ serial), และตั้ง systemd service 2 ตัวให้เปิดเองตอนบูต

3. รอ ~10 วิ แล้วดู URL สาธารณะ:

   ```bash
   bash deploy/tunnel_url.sh
   ```

   จะได้ลิงก์แบบ `https://xxxx.trycloudflare.com/?token=rcsa2026`
   → แชร์ลิงก์นี้ให้ใครก็ได้ เปิดในเบราว์เซอร์แล้วใช้งานได้เลย

> ครั้งแรกหลังเพิ่มกลุ่ม `dialout` แนะนำ `sudo reboot` 1 ครั้ง ไม่งั้น flash อาจไม่ติด

---

## ข้อควรรู้เรื่อง Quick Tunnel

- URL จะ **เปลี่ยนใหม่ทุกครั้งที่ tunnel restart** (รีบูต RPi, service restart)
  → รัน `bash deploy/tunnel_url.sh` ดู URL ล่าสุดทุกครั้ง
- ถ้าอยากได้ URL **ถาวร** (เช่น `rcsa-firmware.yourdomain.com`) ต้องใช้ Named Tunnel
  (มีบัญชี Cloudflare + โดเมน) — บอกได้ ผมตั้งให้

---

## คำสั่งจัดการ

```bash
# สถานะ
sudo systemctl status rcsa-firmware rcsa-firmware-tunnel

# ดู log สด
sudo journalctl -u rcsa-firmware -f            # ตัวเซิร์ฟเวอร์
sudo journalctl -u rcsa-firmware-tunnel -f     # ตัว tunnel (มี URL อยู่ในนี้)

# restart (จะได้ URL ใหม่)
sudo systemctl restart rcsa-firmware-tunnel
bash deploy/tunnel_url.sh

# หยุด / ปิดไม่ให้เปิดตอนบูต
sudo systemctl disable --now rcsa-firmware rcsa-firmware-tunnel
```

อัปเดตโค้ด/เฟิร์มแวร์แล้วให้มีผล: `sudo systemctl restart rcsa-firmware`

---

## ⚠ ความปลอดภัย

URL นี้สั่ง **flash เฟิร์มแวร์จริง** ลงบอร์ดที่เสียบกับ RPi ใครมีลิงก์+token ก็ทำได้
- เก็บ token เป็นความลับ เปลี่ยนเป็นค่ายากๆ:
  `RCSA_TOKEN=... bash deploy/setup_rpi.sh` แล้ว `sudo systemctl restart rcsa-firmware`
- ถ้าไม่ได้ใช้งาน ถอดบอร์ดออก หรือหยุด service ไว้
- อย่าโพสต์ลิงก์พร้อม token ในที่สาธารณะ
