📌 หมวดที่ 1

การเริ่มต้นใช้งานและหน้าจอควบคุมหลัก (Live Dashboard)

คู่มือแนะนำการเข้าสู่ระบบ การตรวจสอบสถานะความปลอดภัย การใช้งานทุกปุ่มบนแถบเครื่องมือหลัก (Top Bar) การสลับและจัดเรียงตารางกล้องสด การควบคุมภาพระดับ 4K/1080p และการอ่านตัวชี้วัดสถานะระบบ

🔐 1.1 การเข้าสู่ระบบและความปลอดภัย (Login & Session)

ระบบ Sloth BPP 215 ใช้มาตรฐานความปลอดภัยระดับสูงสำหรับหน่วยงานความมั่นคง รองรับการเข้ารหัสข้อมูลและการควบคุมการเข้าถึงตามบทบาท (Role-Based Access Control: RBAC)

📥 ข้อมูลนำเข้า (Input)

ชื่อผู้ใช้ (Username) และรหัสผ่าน (Password) ผ่านหน้าเว็บ login.html

➔
⚙️ กลไกประมวลผล (Process)

ตรวจสอบ Hash รหัสผ่านใน SQLite, ออก Session Cookie แบบ HttpOnly/SameSite พร้อมสิทธิ์ RBAC

➔
📤 ผลลัพธ์ที่ได้ (Output)

นำทางเข้าสู่ index.html (Dashboard) พร้อมแสดงเมนูและกล้องตามระดับสิทธิ์ของผู้ใช้งาน

🛠️ ตารางรายละเอียดองค์ประกอบบนหน้า Login:

องค์ประกอบ / ปุ่ม ตำแหน่ง การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
ช่อง "ชื่อผู้ใช้งาน" (Username) กลางหน้าจอ รับชื่อบัญชีผู้ใช้ เช่น admin, officer1, bpp215 ใช้เป็นตัวระบุเพื่อค้นหาเกลือ (Salt) และรหัสผ่านที่ถูกเข้ารหัสในฐานข้อมูล
ช่อง "รหัสผ่าน" (Password) กลางหน้าจอ รับรหัสผ่านของผู้ใช้ (ซ่อนตัวอักษรเป็นจุดกลม) ถูกนำไป Hash ด้วยอัลกอริทึมความปลอดภัยสูงเพื่อเปรียบเทียบกับค่าในระบบ
เข้าสู่ระบบ ใต้ฟอร์มกรอก ส่งคำขอ POST ไปยัง /api/login หากถูกต้อง: เซฟคุกกี้ Session และเปิด Dashboard
หากผิดพลาด: แสดงป้ายเตือนสีแดง "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง"
📖 คู่มือการใช้งาน ด้านล่างกล่องฟอร์ม คลิกลิงก์เพื่อขอความช่วยเหลือ เปิดหน้าต่างคู่มือการใช้งานระบบฉบับสมบูรณ์ (หน้านี้) ทันทีโดยไม่ต้องล็อกอิน
💡
คำแนะนำเบราว์เซอร์และฮาร์ดแวร์: แนะนำให้เปิดใช้งานผ่าน Google Chrome หรือ Microsoft Edge เวอร์ชันล่าสุด และควรเปิดตัวเลือก "Use graphics acceleration when available" ในการตั้งค่าเบราว์เซอร์ เพื่อให้การถอดรหัสวิดีโอ H.264/WebRTC แบบหลายช่องพร้อมกันทำงานบน GPU โดยไม่กิน CPU ของเครื่องคอมพิวเตอร์

🧭 1.2 แถบควบคุมหลักด้านบน (Top Bar Navigation)

แถบควบคุมด้านบนเป็นศูนย์บัญชาการหลักของระบบ รวมปุ่มคำสั่งเข้าสู่ทุกโมดูล การค้นหากล้องสดแบบทันที และการปรับแต่งสัญลักษณ์หน่วยงาน

🛠️ สารบบทุกปุ่มบนแถบ Top Bar:

ปุ่มคำสั่ง / ไอคอน คีย์ลัด / ฟังก์ชัน การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
ตราสัญลักษณ์หน่วยงาน (#mainLogo) คลิกที่รูปตรา เปิด File Picker ให้อัปโหลดภาพตราสัญลักษณ์ประจำกองร้อย (.png / .jpg) เปลี่ยนโลโก้บนระบบและบันทึกลง LocalStorage อัตโนมัติ
ช่องค้นหากล้อง (#searchInput) พิมพ์ข้อความ รับคำค้นหา เช่น "ประตู", "หน้าค่าย", "CH01", "สี่แยก" กรองซ่อนช่องกล้องที่ไม่ตรงกับคำค้นทันทีแบบ Real-time
จัดเรียง (#btnEditLayout) คลิกเปิดโหมด เปิดโหมดสลับตำแหน่งกล้อง (Drag & Drop Mode) ช่องกล้องจะขึ้นกรอบเส้นประสีม่วง สามารถคลิกลากย้ายสลับตำแหน่งช่องได้ตามต้องการ
บันทึก (#btnLayoutSave) คลิกบันทึก ส่งผังลำดับกล้องใหม่ไปยัง Profile API บันทึกผังตำแหน่งกล้องลงฐานข้อมูลของผู้ใช้ เปิดเครื่องใหม่ยังคงตำแหน่งเดิม
ยกเลิก (#btnLayoutCancel) คลิกยกเลิก คืนค่าลำดับกล้องก่อนเริ่มจัดเรียง ปิดโหมดจัดเรียงและสลับตำแหน่งกล้องกลับสู่ค่าเดิมทันที
🔔 เหตุการณ์ (#btnEvents) คลิกเปิด/ปิด สลับสถานะการแสดงผลแถบแจ้งเตือนด้านขวา (Events Rail) เปิด/ซ่อนแถบแจ้งเตือนเหตุการณ์สด พร้อมตัวเลขนับเหตุการณ์ใหม่ (Badge)
🔄 เชื่อมต่อใหม่ (#btnReconnect) คลิกกดซ้ำได้ สั่งรีเซ็ต WebRTC PeerConnection และล้าง Video Buffer ทุกช่อง เชื่อมต่อสตรีมภาพสดใหม่ทันที แก้ปัญหาภาพค้างจากสัญญาณเน็ตกระตุก
🎬 คลังวิดีโอเหตุการณ์ (#btnEventMgr) คลิกเปิดหน้าต่าง ดึงข้อมูลประวัติการตรวจจับจาก Database เปิดหน้าต่างคลังเหตุการณ์ (Event Manager) เพื่อค้นหา ดูภาพนิ่ง และตัดคลิป
⏱️ ดูย้อนหลัง (#btnPlayback) คลิกเปิดหน้าต่าง เชื่อมต่อ Storage บันทึกวิดีโอต่อเนื่อง 24 ชั่วโมง เปิดหน้าต่าง Playback แบบหลายจอ พร้อมแถบไทม์ไลน์สีม่วง
🌐 โครงข่ายหน่วยงาน (#btnNodes) เฉพาะ Admin อ่านค่าคอนฟิก Federation Mesh และ WireGuard เปิดหน้าต่างเชื่อมต่อดึงภาพกล้องข้ามกองร้อย / ข้ามฐานปฏิบัติการ
🎯 ทะเบียนเฝ้าระวัง (#btnWatchlist) คลิกเปิดหน้าต่าง ดึงฐานข้อมูลรถเป้าหมายและบุคคลต้องสงสัย เปิดหน้าต่าง Watchlist เพื่อเพิ่ม/แก้ไขป้ายทะเบียน และวิเคราะห์พฤติกรรม
🤖 Sloth AI Assistant (#btnBotChat) คลิกเปิดหน้าต่าง เปิดช่องทางสนทนาภาษาธรรมชาติกับ AI Assistant เปิดหน้าต่างแชทเพื่อสั่งค้นหาคดี สอบถามทะเบียนรถ หรือสรุปเหตุการณ์
📊 วิเคราะห์สถิติ (#btnAnalytics) คลิกเปิดหน้าต่าง ประมวลผลข้อมูลสถิติ Big Data ของกล้องทั้งหมด เปิด Analytics Dashboard แสดง Heatmap แผนที่ความเสี่ยง และกราฟแนวโน้ม
📂 คลังบันทึกจับกุม (#btnArrestVault) คลิกเปิดหน้าต่าง ดึงแฟ้มข้อมูลผู้ต้องหาและบันทึกการจับกุม เปิดหน้าต่าง Arrest Vault เพื่อเปิดดูเอกสารสำนวนคดีและข้อมูล ทร.14
🕸️ ผังเชื่อมโยง i2 (#btnI2Graph) คลิกเปิดหน้าต่าง โหลดกราฟความสัมพันธ์บุคคล เส้นทางการเงิน และการโทร เปิดหน้าต่าง Visual Link Analysis เทียบเท่าโปรแกรม IBM i2 บนเว็บ
⚙️ ตั้งค่าระบบ (#btnSettings) เฉพาะ Admin ดึงค่าคอนฟิก NVR, กล้อง, AI และการแจ้งเตือน เปิดหน้าต่างการตั้งค่าหลักของระบบ NVR
👤 ข้อมูลบัญชี (#btnUsers) คลิกเปิดหน้าต่าง ตรวจสอบสิทธิ์ผู้ใช้ปัจจุบัน และประวัติ Audit Log เปิดหน้าต่างเปลี่ยนรหัสผ่าน ดูสิทธิ์ และจัดการผู้ใช้ในระบบ
⏻ ออกจากระบบ (#btnLogout) คลิกยืนยัน ส่งคำขอยกเลิก Session Cookie ไปยังเซิร์ฟเวอร์ ลบข้อมูลการเข้าสู่ระบบและกลับสู่หน้า login.html ทันที

📺 1.3 ตารางแสดงภาพสดและการจัดเรียง (Live Camera Grid & Layout)

ระบบรองรับการแสดงภาพสดแบบปรับเปลี่ยนได้ตามขนาดหน้าจอ พร้อมปุ่มสลับตารางกล้องทันทีโดยไม่ต้องรีโหลดหน้าเว็บ

🛠️ ปุ่มเลือกรูปแบบตาราง (Layout Switcher):

ปุ่มตาราง ลักษณะการแสดงผล คำแนะนำการใช้งานตามภารกิจ
1×1 (จอเดี่ยว) แสดงภาพกล้องเดียวขนาดใหญ่เต็มพื้นที่ เหมาะสำหรับการเฝ้าระวังจุดวิกฤต หรือเมื่อเจ้าหน้าที่กำลังติดตามเป้าหมายเฉพาะจุด
2×2 (4 ช่อง) แบ่งตารางออกเป็น 4 ช่องเท่ากัน เหมาะสำหรับหน้าจอมือถือ แท็บเล็ต หรือการเฝ้าระวังพื้นที่รอบอาคารหลัก 4 ทิศ
3×3 (9 ช่อง) แบ่งตารางออกเป็น 9 ช่อง เป็นมุมมองมาตรฐานสำหรับศูนย์ควบคุม (Command Center) ความละเอียดเหมาะสมที่สุด
4×4 (16 ช่อง) แบ่งตารางออกเป็น 16 ช่อง สำหรับหน้าจอขนาดใหญ่ (55"-75" Video Wall) เพื่อดูภาพรวมทุกกล้องในฐานปฏิบัติการ
Auto / Active แสดงเฉพาะกล้องที่มีการเปิดใช้งานอยู่จริง ตัดช่องว่างที่ไม่มีการต่อกล้องออกอัตโนมัติ เพื่อประหยัดพื้นที่และแบนด์วิดท์หน้าจอ
1

ขั้นตอนการสลับตำแหน่งกล้อง (Reorder Workflow):

กดปุ่ม จัดเรียง บนแถบด้านบน ช่องกล้องทั้งหมดจะปรากฏเส้นประสีม่วงและไอคอนรูปมือ

2

คลิกลากช่องกล้อง (Drag & Drop):

คลิกเมาส์ค้างที่ช่องกล้องที่ต้องการย้าย แล้วลากไปวางทับช่องปลายทาง กล้องทั้งสองช่องจะสลับตำแหน่งกันทันที

3

บันทึกลำดับตำแหน่ง:

เมื่อจัดตำแหน่งพอใจแล้ว ให้กดปุ่ม บันทึก เพื่อบันทึกลำดับลงระบบ

🎛️ 1.4 ปุ่มควบคุมบนหน้าต่างกล้องแต่ละช่อง (Camera Tile Controls)

ในแต่ละช่องแสดงภาพกล้อง (Tile) จะมีแถบควบคุมและตัวชี้วัดสถานะการทำงานซ้อนอยู่บนภาพ เพื่อให้ผู้ปฏิบัติงานสามารถควบคุมกล้องเฉพาะจุดได้ทันที

ปุ่ม / ตัวชี้วัด ตำแหน่งบนจอ การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
ชิปชื่อกล้อง (Channel Chip) มุมซ้ายบน แสดงรหัสช่องและชื่อภาษาไทย เช่น CH01 ประตูหน้าค่าย ช่วยให้ผู้ใช้งานระบุตำแหน่งที่ตั้งของกล้องได้อย่างชัดเจนและรวดเร็ว
จุดไฟสถานะการเชื่อมต่อ ข้างชื่อกล้อง ตรวจสอบสถานะ Heartbeat ของ WebRTC สตรีม 🟢 Live สตรีมภาพสดไหลปกติ
🟡 Connecting กำลังเจรจา SDP/ICE สัญญาณ
🔴 Offline กล้องดับ ไฟฟ้าดับ หรือสายสัญญาณขาด
ปุ่มสลับ Main / Sub มุมขวาบน คลิกเพื่อสลับความละเอียดของสตรีมวิดีโอ Sub: 640×360 เพื่อประหยัดเน็ตเมื่อดูหลายจอพร้อมกัน
Main: 1080p / 4K สตรีมความคมชัดสูงเพื่อดูรายละเอียดทะเบียนหรือใบหน้า
ปุ่มเปิด/ปิดเสียง (Audio) แถบลอยมุมขวา คลิกเพื่อเปิดฟังเสียงบรรยากาศจากไมค์ของกล้อง ถอดรหัสสัญญาณเสียง AAC/PCMA มาเล่นผ่านลำโพงของคอมพิวเตอร์
ปุ่มจับภาพนิ่ง (Snapshot) แถบลอยมุมขวา คลิกเพื่อดึงภาพความละเอียดเต็มเฟรมปัจจุบัน ดาวน์โหลดไฟล์ภาพ JPEG คุณภาพสูงลงโฟลเดอร์ Downloads บนเครื่องทันที
ปุ่มขยายเต็มจอ (Expand) แถบลอยมุมขวา คลิกเพื่อเปิดภาพกล้องในโหมดขยายใหญ่ เปิดหน้าต่าง Fullscreen Camera Viewer ขึ้นมาพร้อมฟังก์ชันอัดวิดีโอสด
กรอบ AI & ชิปแจ้งป้ายทะเบียน บนภาพวิดีโอ แสดงเมื่อระบบ AI YOLO11 หรือ LPR ตรวจพบเป้าหมาย วาดกรอบสีตามประเภทวัตถุ (บุคคล=ฟ้า, ยานพาหนะ=เขียว, ทะเบียนเฝ้าระวัง=แดงกะพริบ)

🔍 1.5 หน้าต่างดูภาพกล้องขยายใหญ่ (Fullscreen Camera Viewer)

เมื่อดับเบิ้ลคลิกที่ช่องกล้อง หรือกดปุ่มขยาย ระบบจะเปิดหน้าต่างดูภาพสดขนาดเต็มจอ (Fullscreen Camera Viewer: #camViewer) โดยดึงสัญญาณความละเอียดสูงสุด (Mainstream) โดยอัตโนมัติ

ปุ่มคำสั่ง คีย์ลัด การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
📸 บันทึกภาพนิ่ง (#btnCvSnap) คลิกปุ่ม ดึง Raw Frame ความละเอียด 1080p/4K จากวิดีโอ Canvas สร้างไฟล์รูปภาพ snapshot_CHxx_เวลา.jpg บันทึกลง Downloads
🔴 อัดวิดีโอจอนี้ (#btnCvRec) คลิกปุ่ม ใช้ MediaRecorder API บันทึกสตรีมวิดีโอสดลงหน่วยความจำชั่วคราว ปุ่มจะกะพริบสีแดง เมื่อกดซ้ำเพื่อหยุด จะส่งออกไฟล์ record_CHxx.webm ลงเครื่องทันที
✕ ปิดหน้าต่าง (#btnCloseViewer) Esc หยุดการดึง Mainstream ชั่วคราวและปิด Overlay กลับสู่หน้าตารางรวมกล้องสด (Grid View) ตามเดิม

📊 1.6 แถบสถานะระบบด้านล่าง (Bottom Bar Status)

แถบสถานะด้านล่างสุดของหน้าจอทำหน้าที่รายงานความสมบูรณ์ในการทำงานของระบบ NVR ตลอด 24 ชั่วโมง

🟢 ออนไลน์ (Online)
กล้องทำงานปกติ
สตรีมสัญญาณภาพสดสมบูรณ์
🟡 เชื่อมต่อ (Connecting)
กำลังเจรจาสัญญาณ
ระบบกำลังกู้คืนการเชื่อมต่อ
🔴 ออฟไลน์ (Offline)
กล้องขาดการเชื่อมต่อ
ให้ตรวจสอบระบบสาย LAN/ไฟกล้อง
💾 สถานะบันทึก (REC ALL)
กำลังบันทึกลงฮาร์ดดิสก์
บันทึกแบบหมุนเวียน 24 ชม.
📌 หมวดที่ 2

ระบบตรวจจับเหตุการณ์และดูย้อนหลัง (Events & Playback)

เรียนรู้วิธีการทำงานของแถบเหตุการณ์สด (Events Rail) การค้นหาและกรองเหตุการณ์ในคลังเก็บ (Event Manager) การตรวจสอบรายละเอียด 3 แท็บ การดูเส้นทางเดินของวัตถุ (Tracking Vector) การควบคุมเครื่องเล่นคลิป และการเล่นวิดีโอย้อนหลัง 4 จอพร้อมกันตลอด 24 ชั่วโมง

⚡ 2.1 แถบเหตุการณ์ด้านข้าง (Live Events Rail)

แถบเหตุการณ์ด้านขวาของหน้าจอทำหน้าที่แสดงบัตรเหตุการณ์ (Event Card) แบบสดเรียลไทม์ทันทีที่กล้องตรวจพบบุคคล รถยนต์ หรือป้ายทะเบียน โดยไม่ต้องกดรีเฟรชหน้าเว็บ

📥 ข้อมูลนำเข้า (Input)

สัญญาณตรวจจับจาก YOLO11 และ LPR ส่งผ่าน WebSocket / Server-Sent Events (SSE)

➔
⚙️ กลไกประมวลผล (Process)

ประมวลผลความมั่นใจ (Confidence Score), ตรวจสอบตัวกรอง Class Filter, สร้างภาพ Thumbnail ขนาดเล็ก

➔
📤 ผลลัพธ์ที่ได้ (Output)

แสดงการ์ดเหตุการณ์ใหม่บนแถบด้านขวาทันที พร้อมเล่นเสียงเตือน (ถ้าเปิด) และเพิ่มตัวเลขนับบน Badge

🛠️ ปุ่มและเครื่องมือบนแถบเหตุการณ์:

ปุ่มคำสั่ง / องค์ประกอบ ตำแหน่ง การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
ตัวนับเหตุการณ์ (#evTotal) ส่วนหัวแถบขวา นับจำนวนเหตุการณ์ที่เกิดขึ้นในเซสชันปัจจุบัน เช่น "24 รายการ" บอกปริมาณเหตุการณ์ที่เกิดขึ้นให้ผู้ปฏิบัติงานทราบอย่างรวดเร็ว
เลือก Class (#btnRailClasses) ข้างตัวนับ คลิกเปิดเมนูป๊อปอัปเลือกชนิดวัตถุที่จะให้แสดง เลือกเปิด/ปิดเฉพาะ คน, รถยนต์, ป้ายทะเบียน, หรือรถจักรยานยนต์ เพื่อกรองการแจ้งเตือนไม่ให้รบกวน
ซ่อน (#btnHideEvents) มุมขวาสุดแถบ คลิกเพื่อยุบแถบเหตุการณ์ไปทางขวา ขยายพื้นที่ตารางภาพกล้องสดให้กว้างขึ้นเต็มหน้าจอ และแสดงแท็บลอย #railTab แทน
ชิปกรองประเภทด่วน (#evFilters) ใต้ส่วนหัว คลิกเลือกชิปประเภท เช่น "ทั้งหมด", "บุคคล", "ยานพาหนะ", "ป้ายทะเบียน" กรองรายการการ์ดบนแถบให้แสดงเฉพาะประเภทที่เลือกทันที
การ์ดเหตุการณ์ (Event Card) ในรายการเหตุการณ์ คลิกที่ตัวการ์ด เปิดหน้าต่างเล่นคลิปเหตุการณ์ (Clip Player) หรือหน้าต่างรายละเอียดเหตุการณ์ทันที

🗄️ 2.2 คลังวิดีโอเหตุการณ์ (Event Manager Archive)

เมื่อกดปุ่ม 🎬 คลังวิดีโอเหตุการณ์ บน Top Bar ระบบจะเปิดหน้าต่างค้นหาและเรียกดูประวัติเหตุการณ์ทั้งหมดที่บันทึกไว้ในฐานข้อมูล

🛠️ สารบบปุ่มควบคุมบนหน้าต่าง Event Manager:

ปุ่มคำสั่ง / ฟังก์ชัน ตำแหน่ง การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
ปุ่มขนาดภาพย่อ (sm, md, lg, xl, xxl) แถบเครื่องมือบน คลิกเลือกระดับขนาดของการ์ดพรีวิวภาพ 5 ระดับ ปรับขนาดรูปตัวอย่างให้เหมาะกับความต้องการ ตั้งแต่ดูภาพรวมหนาแน่น จนถึงดูภาพขยายใหญ่สุด
Dropdown เลือกกล้อง (#emgrCameraFilter) แถบเครื่องมือบน เลือกชื่อกล้อง เช่น "CH01 ประตูหน้า", "CH02 อาคาร 1" กรองแสดงเฉพาะเหตุการณ์ที่เกิดขึ้นที่กล้องจุดนั้น
ตัวเลือกวันที่ (#emgrDateFilter) แถบเครื่องมือบน เลือกวันที่ต้องการสืบค้น (Date Picker) ดึงข้อมูลเหตุการณ์เฉพาะของวันที่ระบุ
ทุกวัน (#btnEmgrAllDates) ข้างตัวเลือกวันที่ คลิกเพื่อล้างตัวกรองวันที่ ดึงเหตุการณ์ล่าสุดย้อนหลังทั้งหมดโดยไม่จำกัดวัน
ช่องค้นหาเหตุการณ์ (#emgrSearch) แถบเครื่องมือบน พิมพ์คำค้นหา เช่น "กพ 3771", "โตโยต้า", "กระบะ", "เสื้อแดง" ค้นหาในคำอธิบาย ชนิดวัตถุ และข้อความป้ายทะเบียนแบบ Real-time
🔄 รีเฟรช (#btnEmgrRefresh) มุมขวาบน คลิกส่งคำขอไปดึงข้อมูลล่าสุดจาก API อัปเดตรายการเหตุการณ์ใหม่ล่าสุด
✕ ปิด (#btnCloseEmgr) Esc ปิดหน้าต่าง Event Manager กลับสู่หน้าจอหลัก

🔬 2.3 หน้าต่างแสดงรายละเอียดเหตุการณ์ (Event Detail Modal)

เมื่อคลิกที่เหตุการณ์ใดๆ จะเปิดหน้าต่างรายละเอียดเชิงลึก (Event Detail: #emgrDetailOverlay) ซึ่งแบ่งออกเป็น 3 แท็บปฏิบัติการ:

แท็บ 1: ภาพ Snapshot แท็บ 2: วิดีโอช่วงเหตุการณ์ แท็บ 3: รายละเอียดวัตถุที่ติดตาม

📷 แท็บที่ 1: ภาพ Snapshot และการตรวจสอบป้ายทะเบียน (LPR)

ปุ่ม / ส่วนแสดงผล การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
ภาพครอบป้ายทะเบียน (#edPlateCrop) คลิกที่ภาพ Crop ป้ายทะเบียน เปิดหน้าต่าง Lightbox ขยายภาพแผ่นป้ายขนาดใหญ่พิเศษเพื่อตรวจสอบความคมชัด
✏️ แก้ไข/สอน AI (#btnEdPlateTrain) คลิกเพื่อแก้ไขตัวอักษรป้ายทะเบียน เปิดหน้าต่าง LPR Active Learning เพื่อสอน AI ทันที (บันทึกเข้าระบบฝึกอบรมโมเดล)
🗑️ ไม่ใช่ป้าย/ลบและสอน AI (#btnEdPlateDelete) คลิกเมื่อระบบจับวัตถุอื่นผิดเป็นป้าย (False Positive) เปิดหน้าต่างให้ระบุเหตุผล (เช่น ป้ายร้าน, ลายเสื้อ) และบันทึกเป็นตัวอย่างลบ (Negative Sample)
ช่องคำอธิบาย (#edDesc) + บันทึก (#btnSaveDesc) พิมพ์บันทึกพฤติการณ์ เช่น "รถต้องสงสัยวิ่งวนรอบค่าย 3 รอบ" บันทึกข้อความแนบกับรหัสเหตุการณ์ลงฐานข้อมูล เพื่อใช้สืบค้นในอนาคต

🎥 แท็บที่ 2: วิดีโอช่วงเหตุการณ์ (Video Playback & Export)

ปุ่มคำสั่ง การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
เครื่องมือซูมดิจิทัล (#btnEdZoomIn / #btnEdZoomOut) คลิกเพื่อซูมขยายจุดเฉพาะในวิดีโอ ขยายภาพวิดีโอแบบ Digital Zoom เพื่อมองคนขับหรือสิ่งของในรถ
📸 บันทึกเฟรม (#btnEdVideoSnap) คลิก ณ จังหวะที่ต้องการ ดึงภาพนิ่งจากตำแหน่งเวลาในวิดีโอปัจจุบัน บันทึกลง Downloads
📥 ดาวน์โหลด MP4 (#btnEdDownload) คลิกสั่งดาวน์โหลด ดาวน์โหลดไฟล์วิดีโอเหตุการณ์ความละเอียดสูง (H.264 MP4) สำหรับใช้เป็นพยานหลักฐาน
🔗 แชร์คลิป (#btnEdShare) คลิกเลือก "คัดลอกลิงก์" หรือ "ส่งทางอีเมล" สร้างลิงก์สำหรับส่งต่อให้ผู้บังคับบัญชาหรือชุดปฏิบัติการเปิดดูผ่านมือถือได้ทันที

🧭 แท็บที่ 3: รายละเอียดวัตถุที่ติดตาม (Object Tracking Vector & Lifecycle)

ระบบ AI จะบันทึกเวกเตอร์พิกัดการเคลื่อนที่ของวัตถุตลอดเวลาที่อยู่ในเฟรมกล้อง:

  • เส้นทางเดิน (Vector Path): แสดงเส้นทางเดินของคนหรือทิศทางแล่นของรถเป็นเส้นกราฟิกสีเขียว (จุดเริ่ม) ➔ สีแดง (จุดที่พ้นเฟรม)
  • สถิติการเคลื่อนที่: แสดงระยะเวลาที่ปรากฏในภาพ (Duration), ทิศทางการเคลื่อนที่ (Bearing), และความเร็วเฉลี่ยโดยประมาณ
  • วงจรชีวิต (Object Lifecycle): แจกแจงสถานะของวัตถุตั้งแต่เริ่มตรวจพบ (Enter Area) ➔ ตรวจจับป้ายทะเบียนได้ (LPR Matched) ➔ วัตถุออกจากรัศมีกล้อง (Exit Area)

▶️ 2.4 เครื่องเล่นคลิปเหตุการณ์ (Clip Player Modal & Standalone)

เครื่องเล่นคลิปวิดีโอความเร็วสูง (#playerOverlay) และหน้าเล่นคลิปภายนอก (clip.html) ออกแบบมาให้โหลดวิดีโอได้ทันใจทั้งบนคอมพิวเตอร์และสมาร์ตโฟน

ปุ่มควบคุม คีย์ลัด การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
ปุ่มเล่น / หยุด (#btnCenterPlay / #btnBarPlay) Spacebar คลิกเพื่อสลับสถานะเล่นและหยุดชั่วคราว เล่นหรือหยุดวิดีโอ พร้อมอัปเดตตัวเลขเวลาปัจจุบัน
สไลเดอร์เลื่อนเวลา (Scrubber) ◀ / ▶ คลิกลากแถบเวลา หรือกดปุ่มลูกศรซ้าย-ขวาเพื่อข้าม 5 วินาที กระโดดไปยังช่วงเวลาที่ต้องการดูในคลิปทันที
ปุ่มซูม 2×, 3×, 4×, 5× (#btnPvZoomIn) คลิกเลือกระดับ ขยายความละเอียดเฉพาะจุดของวิดีโอ ขยายภาพเพื่อดูรายละเอียดแผ่นป้ายหรือใบหน้า พร้อมสามารถคลิกลากเพื่อแพนมุมมองได้
ซูมออก (#btnPvZoomOut) คลิกปุ่ม คืนค่าระดับการซูมเป็น 100% มุมมองวิดีโอกลับสู่ขนาดมาตรฐาน
📸 บันทึกภาพนิ่ง (#btnPvSnap) คลิกปุ่ม ดึงภาพเฟรมปัจจุบันจากวิดีโอสเตจ บันทึกไฟล์ภาพนิ่งคุณภาพสูงลงเครื่องทันที
📥 ดาวน์โหลด (#btnDownload) คลิกปุ่ม ดาวน์โหลดไฟล์ MP4 บันทึกไฟล์คลิปลงฮาร์ดดิสก์เครื่องไคลเอนต์

⏱️ 2.5 ระบบดูภาพย้อนหลังหลายกล้อง 24 ชั่วโมง (Multi-cam 24h Playback)

ระบบ Playback ช่วยให้เจ้าหน้าที่สามารถย้อนดูภาพเหตุการณ์ในอดีตได้พร้อมกันสูงสุด 4 กล้อง โดยซิงค์เวลาตรงกันทุกเสี้ยววินาที รองรับการสืบสวนคดีที่ต้องดูหลายมุมมองพร้อมกัน

📥 ข้อมูลนำเข้า (Input)

เลือกกล้อง, เลือกวันที่จากปฏิทิน และคลิกเลือกเวลาบนแถบไทม์ไลน์ 24 ชั่วโมง

➔
⚙️ กลไกประมวลผล (Process)

NVR Engine ค้นหาไฟล์ Segment H.264 จาก Storage Disk ทำการ Synchronize เวลา และส่งสตรีมภาพหลายจอ

➔
📤 ผลลัพธ์ที่ได้ (Output)

เล่นภาพวิดีโอย้อนหลังพร้อมกันบนกริดหน้าจอ พร้อมแถบสีแสดงจุดเกิดเหตุการณ์ AI

🛠️ สารบบปุ่มควบคุมบนหน้าต่าง Playback:

ปุ่มคำสั่ง / ฟังก์ชัน ตำแหน่ง การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
เมนูเลือกกล้องหลัก (#pbCam) ส่วนหัวแถบซ้าย เลือกกล้องตัวหลักที่จะใช้เป็นแม่แบบเวลา (Master Clock) กำหนดเวลาอ้างอิงและอัปเดตไทม์ไลน์ 24 ชม. ของกล้องนั้น
📅 ปฏิทินเลือกวัน (#btnPbCal) ส่วนหัวแถบซ้าย คลิกเปิดปฏิทิน Interactive แสดงจุดสีแดงเฉพาะวันที่มีไฟล์วิดีโอบันทึกจริงในฮาร์ดดิสก์ ช่วยให้รู้ทันทีว่าวันไหนมีข้อมูลบ้าง
ปุ่มเลย์เอาต์ 1 จอ / 2 จอ / 4 จอ ส่วนหัวแถบกลาง คลิกเลือกจำนวนช่องแสดงภาพย้อนหลัง สลับเป็นจอเดี่ยว หรือแบ่ง 2 จอ หรือ 4 จอสำหรับเทียบมุมมองกล้องต่างๆ
⟳ Sync เวลา (#btnPbSync) ส่วนหัวแถบกลาง คลิกเพื่อซิงค์เวลาของทุกจอให้ตรงกันทันที ปรับตำแหน่งวิดีโอของจอเสริมทุกจอให้ตรงกับเวลาของจอหลักเป๊ะทุกวินาที
ปุ่มสปีดความเร็ว (9 ระดับ) แถบควบคุมใต้จอ คลิกเลือก 0.25×, 0.5×, 1×, 2×, 4×, 8×, 10×, 14×, 16× เร่งความเร็วในการตรวจหาเป้าหมาย หรือเล่นสโลว์โมชันเพื่อดูจังหวะกระทำความผิด
แถบไทม์ไลน์ 24 ชม. (#pbTimeline) ล่างสุดของหน้าต่าง คลิกเมาส์ ณ จุดเวลาใดก็ได้บนแถบไทม์ไลน์ แถบสีม่วง: แสดงช่วงเวลาที่มีการบันทึกต่อเนื่อง
แถบสีด้านล่าง: จุดที่ AI ตรวจพบเหตุการณ์ (คลิกเพื่อกระโดดไปดูเหตุการณ์ได้ทันที)
ปุ่มปรับระดับซูมไทม์ไลน์ ข้างไทม์ไลน์ คลิก ซูมเข้า (#pbZoomIn) / ซูมออก (#pbZoomOut) ปรับความละเอียดไทม์ไลน์ได้ 5 ระดับ: "ทั้งวัน (24h)", "6 ชม.", "1 ชม.", "10 นาที", "1 นาที" เพื่อเลือกเวลาได้แม่นยำระดับวินาที
Class ▾ (#btnPbEvClass) ข้างไทม์ไลน์ คลิกเลือกชนิดเหตุการณ์ที่จะแสดงบนไทม์ไลน์ กรองเฉพาะแถบสีของเหตุการณ์บุคคล รถยนต์ หรือป้ายทะเบียน เพื่อไม่ให้แถบสีรกตา
📸 จับภาพนิ่ง (#btnPbSnap) แถบควบคุมใต้จอ คลิกบันทึกเฟรมภาพย้อนหลัง บันทึกภาพนิ่งจากจอหลักลงโฟลเดอร์ Downloads
✂️ บันทึกช่วงนี้ (#btnPbDownload) แถบควบคุมใต้จอ กำหนดเวลาเริ่มต้นและเวลาสิ้นสุด แล้วกดบันทึก ตัดต่อคลิปวิดีโอย้อนหลังช่วงเวลาที่เลือกส่งออกเป็นไฟล์ MP4 ทันทีโดยไม่ต้องเรนเดอร์ใหม่
📌 หมวดที่ 3

ระบบปัญญาประดิษฐ์ AI YOLO11 และตรวจสอบป้ายทะเบียน LPR

คู่มือการตั้งค่าสถาปัตยกรรม Computer Vision การเลือกชนิดวัตถุตรวจจับด้วย YOLO11m การกำหนดพื้นที่ความสนใจ (ROI Zone) เพื่อเร่งความเร็วในการอ่านป้าย การใช้เครื่องมือสครับเฟรมเพื่อสอน AI ป้ายทะเบียนภาษาไทย และระบบตรวจสอบความแม่นยำย้อนหลังของโมเดล

👁️ 3.1 การเลือกประเภทวัตถุตรวจจับ AI (YOLO11 Object Selector)

ระบบ Sloth BPP 215 ขับเคลื่อนด้วยโมเดล YOLO11m ที่ได้รับการปรับแต่งพิเศษ (Fine-tuned) สำหรับภารกิจรักษาความปลอดภัยและการลาดตระเวนชายแดน รองรับการตรวจจับวัตถุหลากหลายคลาสพร้อมกัน

📥 ข้อมูลนำเข้า (Input)

ผู้ใช้เลือกชนิดวัตถุที่ต้องการให้ระบบตรวจจับใน Settings ➔ แท็บ Dashboard

➔
⚙️ กลไกประมวลผล (Process)

ระบบอัปเดตไฟล์คอนฟิก Frigate NVR และส่งสัญญาณ Hot-reload ไปยังโมเดล YOLO11m ภายในคอนเทนเนอร์

➔
📤 ผลลัพธ์ที่ได้ (Output)

กล้องเริ่มตรวจจับเฉพาะวัตถุที่เลือก วาดกรอบสี Bounding Box และบันทึกเหตุการณ์ลงระบบ

🛠️ สารบบปุ่มและตัวเลือกในตารางวัตถุ AI (Object Grid):

ปุ่มคำสั่ง / ตัวเลือก ประเภท / รหัส Class คำอธิบายการนำไปใช้งานและผลลัพธ์
ชุดแนะนำ (Preset) #btnObjSecurity คลิกเดียวเพื่อเลือกกลุ่มคลาสมาตรฐานความปลอดภัย: บุคคล, รถยนต์, รถจักรยานยนต์, รถบรรทุก, ป้ายทะเบียน
ล้างทั้งหมด #btnObjClear ยกเลิกการเลือกคลาสทั้งหมดชั่วคราว เพื่อเริ่มเลือกใหม่ทีละตัว
บุคคล (Person) person ตรวจจับมนุษย์ ทั้งการเดิน ยืน นั่ง วิ่ง หรือการปีนป่ายกำแพง เหมาะสำหรับกล้องแนวรั้วและประตูค่าย
รถยนต์ (Car) car ตรวจจับรถเก๋ง รถยนต์นั่งส่วนบุคคล รถตู้ และรถ SUV ทุกยี่ห้อ
รถจักรยานยนต์ (Motorcycle) motorcycle ตรวจจับรถมอเตอร์ไซค์ รวมถึงผู้ขับขี่และผู้ซ้อนท้าย
รถบรรทุก / รถบัส (Truck / Bus) truck / bus ตรวจจับยานพาหนะขนาดใหญ่ รถบรรทุกส่งของ รถหกล้อ สิบล้อ และรถโดยสาร
ป้ายทะเบียน (License Plate) license_plate ตรวจจับตำแหน่งแผ่นป้ายทะเบียนบนตัวรถ เพื่อส่งต่อให้ระบบ Optical Character Recognition (OCR) อ่านตัวอักษร

📐 3.2 การกำหนดพื้นที่ตรวจจับป้ายทะเบียน (LPR Zone ROI Editor)

การกำหนดพื้นที่ความสนใจ (Region of Interest: ROI Zone) ช่วยลดการใช้พลังงานประมวลผลของชิป AI และตัดสัญญาณรบกวนจากรถที่วิ่งอยู่นอกเขตตรวจค้น โดยระบบจะดึงภาพความละเอียดเต็มเฟรมมาอ่านป้ายเฉพาะเมื่อรถสัมผัสโซนนี้เท่านั้น

1

เปิดหน้าต่าง Zone Editor:

ไปที่ ⚙️ ตั้งค่าระบบ ➔ แท็บ "หน้าจอกล้อง (Dashboard)" ➔ เลือกช่องกล้องที่ต้องการ ➔ กดปุ่ม ⛶ โซนป้าย (#btnChLprZone)

2

ลากเมาส์ตีกรอบพื้นที่ (Drawing ROI):

หน้าจอจะแสดงภาพสดความละเอียดสูงจากกล้อง ให้คลิกเมาส์ซ้ายค้างไว้แล้วลากเป็นกรอบสี่เหลี่ยมสีแดงครอบบริเวณถนนจุดที่รถชะลอความเร็วหรือจุดที่แผ่นป้ายทะเบียนเห็นได้ชัดเจนที่สุด

3

บันทึกโซน:

กดปุ่ม บันทึกโซน (#btnLzSave) ระบบจะแปลงพิกัดกรอบเป็นค่า Normalized Coordinates [ymin, xmin, ymax, xmax] ส่งเข้าสู่ LPR Pipeline มีผลบังคับใช้ในระบบทันทีภายใน ≤60 วินาที

ปุ่มคำสั่ง ตำแหน่ง การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
ลบโซน (#btnLzClear) มุมซ้ายล่าง คลิกเพื่อลบกรอบสีแดงออก ยกเลิกการจำกัดพื้นที่ ทำให้ระบบอ่านป้ายทะเบียนทั่วทั้งภาพกล้องแบบ Full-frame
บันทึกโซน (#btnLzSave) มุมขวาล่าง ส่งพิกัดกรอบไปยัง LPR Service API บันทึกลงคอนฟิกกล้องและแสดงข้อความแจ้งเตือน "บันทึกโซนสำเร็จ"
✕ ปิด (#btnCloseLz) มุมขวาบน ปิดหน้าต่าง Zone Editor ยกเลิกการแก้ไขและกลับสู่หน้า Settings

🧠 3.3 การสอนและตรวจสอบป้ายทะเบียนให้ AI (LPR Active Learning)

ระบบ Active Learning เป็นหัวใจสำคัญในการทำให้ AI ฉลาดขึ้นเรื่อยๆ ตามสภาพแวดล้อมจริง เมื่อระบบอ่านป้ายผิดพลาด เจ้าหน้าที่สามารถเข้าไปแก้ไขข้อมูลที่ถูกต้อง เพื่อนำไปฝึกฝน (Re-train) โมเดล AI ให้แม่นยำยิ่งขึ้น

📥 ข้อมูลนำเข้า (Input)

เจ้าหน้าที่เลือกเฟรมที่ชัด ตีกรอบแผ่นป้าย กรอกเลขทะเบียนจริง และเลือกจังหวัดที่ถูกต้อง

➔
⚙️ กลไกประมวลผล (Process)

จัดเก็บภาพ Crop คุณภาพสูง พร้อมสร้างไฟล์ Annotation ตามมาตรฐาน YOLO/PyTorch ลงโฟลเดอร์ lpr-verified-samples

➔
📤 ผลลัพธ์ที่ได้ (Output)

ชุดข้อมูลตัวอย่างที่ยืนยันแล้วจะถูกนำไป Fine-tune โมเดล OCR ทำให้ AI อ่านป้ายทะเบียนคันต่อไปได้ถูกต้อง 100%

🛠️ รายละเอียดเครื่องมือบนหน้าต่าง Active Learning Modal (#lprTrainOverlay):

เครื่องมือ / ฟิลด์ข้อมูล การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
เครื่องมือเลือกเฟรม (Scrubber)
◀ ถอย 0.1s (#btnLprPrevFrame)
ถัดไป 0.1s ▶ (#btnLprNextFrame)
เลื่อนสไลเดอร์หรือคลิกปุ่มเดินหน้า-ถอยหลังทีละ 0.1 วินาที เลือกหาจังหวะที่รถวิ่งเข้าใกล้กล้องที่สุด และแผ่นป้ายไม่มีแสงสะท้อนหรือความเบลอ
พื้นที่วาดกรอบแผ่นป้าย คลิกลากเมาส์เป็นสี่เหลี่ยมครอบเฉพาะตัวแผ่นป้ายทะเบียน ตัดภาพเฉพาะส่วนป้าย (Crop) ส่งไปแสดงผลในช่องพรีวิว #lprTrainCanvas
ผลการตรวจสอบ (Decision) (#selLprDecision) เลือกจาก 4 ตัวเลือกมาตรฐาน:
1. readable (เป็นป้าย — อ่านได้ครบถ้วน)
2. partial (เป็นป้าย — อ่านได้บางส่วน)
3. unreadable (เป็นป้าย — แต่ภาพมัว/อ่านไม่ได้)
4. non_plate (ไม่ใช่ป้ายทะเบียน — จับผิดวัตถุ)
กำหนดหมวดหมู่ของตัวอย่างในฐานข้อมูลการฝึกสอนโมเดล AI
ช่อง "หมวดอักษรและเลข" (#inpLprPlate) กรอกข้อความที่ถูกต้อง เช่น กพ 3771 หรือ 1กข 8809 ใช้เป็น Ground Truth Label สำหรับสอนโมเดล OCR ตัวอักษรภาษาไทย
ช่องเลือกจังหวัด (#selLprProvince) เลือกชื่อจังหวัดจากตัวเลือกทั้งหมด 77 จังหวัด ช่วยให้ AI เรียนรู้ฟอนต์และชื่อจังหวัดแถวล่างของแผ่นป้ายทะเบียนไทย
ระบุสาเหตุที่ไม่ใช่ป้าย (Non-plate Reasons) เลือกเมื่อตัดสินว่าเป็น non_plate เช่น:
- ป้ายร้าน / ป้ายประชาสัมพันธ์
- โลโก้ / ตราสินค้าบนรถ
- ลายเสื้อผ้า
- เส้นบนพื้นถนน
- แสงสะท้อน / ไฟหน้ารถ
- ครอบผิดตำแหน่ง
บันทึกเป็น Hard Negative Sample ช่วยลดปัญหา False Positive ของตัวตรวจจับป้ายในอนาคต
💾 ยืนยันผลตรวจสอบ (#btnLprTrainSave) คลิกบันทึก เซฟไฟล์ภาพและ Annotation พร้อมอัปเดตสถิติตัวอย่างที่พร้อมเทรนทันที

⚙️ 3.4 การจัดการและฝึกโมเดลป้ายทะเบียน (LPR Model Training & Versioning)

ผู้ดูแลระบบสามารถตรวจสอบสถานะของชุดข้อมูลฝึกสอน สั่งเริ่มการฝึกอบรมโมเดล (Fine-tuning) และเรียกดูประวัติหรือคืนค่าโมเดลรุ่นก่อนหน้าได้ตลอดเวลา

ส่วนควบคุม / ปุ่ม การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
กล่องสรุปสถานะชุดข้อมูล (#lprLearningSummary) แสดงจำนวนตัวอย่างที่ผ่านการยืนยันแล้วแยกตามสถานะ (Readable / Negative) ประเมินความพร้อมว่ามีข้อมูลเพียงพอสำหรับการเริ่มเทรนโมเดลรอบใหม่หรือไม่ (แนะนำ ≥100 ตัวอย่าง)
🚀 สั่งเทรนโมเดลทันที (#btnTriggerLprTrainNow) คลิกเพื่อเริ่มกระบวนการฝึกฝนโมเดลบน GPU Server ส่งคำสั่งไปยัง lpr-service รันสคริปต์ PyTorch Fine-tuning และแสดงหลอดความคืบหน้า Epochs
เกณฑ์ฝึกอัตโนมัติ (#inpLprMinSamples) + บันทึก กรอกจำนวนตัวอย่างขั้นต่ำ เช่น 50 แล้วกดบันทึก เมื่อเจ้าหน้าที่ตรวจสอบป้ายสะสมครบตามจำนวน ระบบจะเริ่มเทรนโมเดลใหม่ในพื้นหลังอัตโนมัติ
ตารางเวอร์ชันโมเดล (#lprModelVersions) แสดงรายการ Model Checkpoint ย้อนหลัง พร้อมค่าความแม่นยำ (mAP / Accuracy) มีปุ่ม Rollback ให้ย้อนกลับไปใช้โมเดลรุ่นก่อนหน้าได้ทันที หากโมเดลใหม่เกิดความผิดพลาด
📌 หมวดที่ 4 (ปรับปรุงล่าสุด v3.1)

ศูนย์สืบสวนคดีพิเศษ ถังข้อมูลบุคคล และผังความสัมพันธ์ (Watchlist / Vault / i2)

คู่มือระบบสืบสวนความมั่นคงขั้นสูง: การจัดการบัญชีทะเบียนรถเฝ้าระวัง (Watchlist) 4 ระดับความเสี่ยงพร้อมกราฟพฤติกรรม 3 มิติ, การบริหารจัดการถังข้อมูล (Arrest Dossier Vault) ครบวงจร ทั้งข้อมูล ทร.14, รายการเบอร์โทรทุกค่าย, ข้อมูลมิเตอร์ไฟฟ้า PEA พร้อมพิกัดดาวเทียม, และการบริหารจัดการผังข้อมูลเครือข่ายความสัมพันธ์ Visual Link Analysis (IBM i2 Analyst's Notebook Web Edition) ด้วยแถบเครื่องมือ 2 ชั้น (2-Tier Modular Toolbar) และระบบแคชความเร็วสูง

🎯 4.1 ระบบจัดการทะเบียนเฝ้าระวัง (Watchlist Management & Analytics)

ระบบ Watchlist ทำหน้าที่ตรวจจับและแจ้งเตือนทันทีที่ยานพาหนะเป้าหมาย บุคคลมีหมายจับ หรือรถเครือข่ายยาเสพติดแล่นผ่านกล้องตัวใดตัวหนึ่งในเครือข่าย

📥 ข้อมูลนำเข้า (Input)

เจ้าหน้าที่ลงทะเบียนป้ายทะเบียน จังหวัด ระดับความเสี่ยง ข้อมูลผู้ครอบครอง และประวัติคดี

➔
⚙️ กลไกประมวลผล (Process)

ระบบสร้าง Key ดักจับในหน่วยความจำ LPR Engine เมื่อตรวจพบแผ่นป้ายที่ตรงกัน จะส่งเสียงเตือนและแจ้งผ่าน Telegram ทันที

➔
📤 ผลลัพธ์ที่ได้ (Output)

บัตรแจ้งเตือนสีแดงกะพริบบนจอหลัก ส่งภาพและพิกัดเข้ากลุ่มปฏิบัติการ พร้อมบันทึกพฤติกรรมลงระบบวิเคราะห์สถิติ

🛠️ สารบบปุ่มและฟังก์ชันในหน้ารายการทะเบียนเฝ้าระวัง:

ปุ่มคำสั่ง / ช่องกรอก ตำแหน่ง การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
+ เพิ่มทะเบียน (#btnWlAdd) มุมขวาบน คลิกเปิดฟอร์มลงทะเบียนเป้าหมายใหม่ เปิดหน้าต่าง #wlFormOverlay สำหรับกรอกข้อมูลทะเบียนและผู้ครอบครอง
ช่องค้นหา (#wlSearch) แถบเครื่องมือบน พิมพ์เลขทะเบียน, ชื่อบุคคล, หรือชื่อเครือข่าย กรองรายการตารางแสดงเฉพาะเป้าหมายที่ตรงกับคำค้นหาแบบทันที
📊 สถิติ ในแต่ละแถวเป้าหมาย คลิกที่ปุ่มสถิติของรถคันที่ต้องการ เปิดหน้าต่างวิเคราะห์พฤติกรรมเชิงลึก (Behavioral Analytics: #wlStatsOverlay)
✏️ แก้ไข ในแต่ละแถวเป้าหมาย คลิกเพื่อแก้ไขข้อมูลเดิม เปิดฟอร์มพร้อมกรอกข้อมูลเดิมให้อัตโนมัติ เพื่อปรับระดับความเสี่ยงหรือแก้ไขข้อมูลผู้ครอบครอง
🗑️ ลบ ในแต่ละแถวเป้าหมาย คลิกเพื่อปลดทะเบียนออกจากระบบเฝ้าระวัง แสดงหน้าต่างยืนยัน และลบรายการออกจากฐานข้อมูล Watchlist ทันที

🚦 ตารางระดับความเสี่ยง 4 ระดับ (Risk Severity Levels):

ระดับความเสี่ยง ป้ายสถานะ พฤติการณ์และการตอบสนองของระบบ
ต่ำ (LOW) 🟢 LOW รถต้องสงสัยทั่วไป หรือรถเป้าหมายในการเก็บข้อมูล ไม่ส่งเสียงเตือน แต่บันทึกสถิติการเคลื่อนไหวลงประวัติ
ปานกลาง (MEDIUM) 🟡 MEDIUM บุคคลเฝ้าระวังพิเศษ รายงานแจ้งเตือนลงช่องทางกลุ่ม Telegram ตามปกติ
สูง (HIGH) 🟠 HIGH บุคคลมีหมายจับ หรือรถที่เคยมีประวัติหลบหนีด่าน ส่งเสียงเตือนบนหน้าจอหลัก และส่งแจ้งเตือน Telegram ทันที
วิกฤต (CRITICAL) 🔴 CRITICAL คดีร้ายแรง อาวุธปืน ยาเสพติดรายใหญ่ หรือความมั่นคงชายแดน ระบบส่งเสียงเตือนไซเรนบน Dashboard กะพริบขอบจอกล้องสีแดง และกระจายแจ้งเตือนด่วน (Broadcast) ไปยังเจ้าหน้าที่ทุกคน

📈 ระบบวิเคราะห์พฤติกรรมรถเป้าหมาย (Watchlist Behavioral Analytics #wlStatsOverlay):

เมื่อกดปุ่ม "📊 สถิติ" ระบบจะประมวลผลข้อมูลการวิ่งผ่านทั้งหมดและแสดงกราฟวิเคราะห์ 3 มิติ:

  • 1. กราฟโดนัทกล้องที่พบบ่อย (Donut Chart #chartCamera): ระบุว่ารถคันนี้วิ่งผ่านจุดตรวจหรือกล้องตัวใดบ่อยที่สุด คิดเป็นสัดส่วนเปอร์เซ็นต์ ทำให้ทราบเส้นทางประจำของเป้าหมาย
  • 2. กราฟแท่งช่วงเวลา 24 ชั่วโมง (Bar Chart #chartHour): แสดงการกระจายตัวของเวลาที่รถแล่นผ่าน (เช่น มักจะวิ่งช่วงเวลา 02:00 - 04:00 น.) ช่วยให้วางแผนดักซุ่มตรวจค้นได้อย่างแม่นยำ
  • 3. กราฟแท่งวันในสัปดาห์ (Bar Chart #chartDay): วิเคราะห์ว่าเป้าหมายมักเคลื่อนไหวในวันใด (จันทร์ - อาทิตย์) เพื่อคาดการณ์รอบการขนส่งหรือการเดินทาง
  • 4. ตารางประวัติการวิ่งผ่าน 500 ครั้งล่าสุด (#wlStatsHistoryBody): แสดงรายการเรียงตามเวลา พร้อมภาพ Snapshot ภาพแผ่นป้าย และกล้องที่บันทึกได้

📊 4.2 ระบบวิเคราะห์สถิติและแผนที่ความเสี่ยง (Analytics Dashboard & Heatmap)

กดปุ่ม 📊 วิเคราะห์สถิติ บน Top Bar เพื่อเปิดศูนย์วิเคราะห์ข้อมูลอัจฉริยะ Big Data แสดงภาพรวมความปลอดภัย แผนที่ความหนาแน่นของเหตุการณ์ และการพยากรณ์ความเสี่ยง

โมดูลในแดชบอร์ด การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
แผนที่ความร้อน (Heatmap Layer) รวบรวมพิกัด GPS และจำนวนการตรวจพบเหตุการณ์ตามจุดติดตั้งกล้อง แสดงชั้นสีความร้อน (แดง = หนาแน่น/เสี่ยงสูง, เหลือง = ปานกลาง, เขียว = ปกติ) ซ้อนทับบนแผนที่ภูมิศาสตร์
กราฟแนวโน้มปริมาณยานพาหนะ ประมวลผลข้อมูลการนับรถแยกตามประเภท (รถเก๋ง, มอเตอร์ไซค์, รถบรรทุก) แสดงกราฟเส้นเปรียบเทียบปริมาณการจราจรเข้า-ออกรายชั่วโมงและรายสัปดาห์
สถิติการแจ้งเตือนตามช่วงเวลา จัดหมวดหมู่เหตุการณ์ความมั่นคงเทียบกับเวลาปฏิบัติงานของเวรยาม ระบุจุดบกพร่องและช่วงเวลาที่มีความเสี่ยงสูง เพื่อเสริมกำลังพลลาดตระเวนได้อย่างมีประสิทธิภาพ

🗂️ 4.3 คลังบันทึกจับกุมและการจัดการถังข้อมูล (Arrest Dossier Vault & Data Bucket Management)

กดปุ่ม 📂 คลังบันทึกจับกุม บน Top Bar เพื่อเข้าสู่ "ถังข้อมูล (Data Bucket)" ซึ่งเป็นศูนย์รวมประวัติบุคคล พยานหลักฐาน พิกัดสถานที่ และเบาะแสการสืบสวนดิจิทัลทั้งหมดของหน่วยงาน

📥 ข้อมูลนำเข้าถัง (Bucket Input)

ภาพ ทร.14, บัตร ปชช., ผลตรวจซิม/ค่ายมือถือ, ข้อมูลมิเตอร์ไฟฟ้า PEA, ยานพาหนะ และบันทึกคดี

➔
⚙️ กลไกจัดระเบียบถัง (Process)

ระบบรวบรวมข้อมูลทั้งหมดเข้า Dossier ID เดียวกัน สกัดพิกัด GPS, จัดหมวดเบอร์โทรทุกค่าย และสร้างดัชนีค้นหา

➔
📤 การแสดงผลในถัง (Bucket Output)

การ์ดโปรไฟล์บุคคลครบวงจร ลิงก์แผนที่ Google Maps เปิดพิกัดได้ทันที และส่งต่อไปเรนเดอร์ในผังข้อมูล i2

🛠️ สารบบข้อมูลในถังข้อมูลบุคคล (Dossier Detail Modal):

หมวดข้อมูลในการ์ด การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมาในถังข้อมูล (Output)
ภาพถ่ายใบหน้า & เอกสาร ทร.14 หลัก ระบบบังคับใช้มาตรการ TR.14 Primary Avatar Priority Guard เลือกภาพ ทร.14 เป็นภาพโปรไฟล์หลักเสมอ แสดงภาพถ่าย ทร.14 คมชัด อัตราส่วนตรงตามจริง ไม่ถูกครอบตัดขอบ และคลิกดูขยายใน Lightbox ได้
รายการเบอร์โทรศัพท์ทุกค่าย (Multi-Carrier Phones) รวบรวมเบอร์โทรทั้งหมดที่ส่งเข้ามา (เช่น 8 เบอร์ทั้ง AIS, TRUE, DTAC) จากผลตรวจค่ายมือถือ แสดงรายการเบอร์โทรทั้งหมดพร้อมป้ายกำกับค่าย (AIS, TRUE), หมายเลข IMSI, และสถานะ Active ไม่ถูกตัดเหลือเบอร์เดียวอีกต่อไป
ข้อมูลการไฟฟ้าส่วนภูมิภาค (PEA) & พิกัดมิเตอร์ สกัดข้อมูลเลขผู้ใช้ไฟฟ้า (CA), หมายเลขมิเตอร์ (PEA NO), ชื่อผู้ขอใช้ไฟ, ที่อยู่ และพิกัดละติจูด/ลองจิจูด แสดงการ์ดสีทอง ⚡ ข้อมูลการไฟฟ้าส่วนภูมิภาค พร้อมปุ่มกด 🗺️ เปิดดูพิกัดบน Google Maps เพื่อนำทางไปยังกระท่อม/ที่ซ่อนเป้าหมายได้ทันที
ยานพาหนะที่ครอบครอง (Associated Vehicles) ระบบ Central Vehicle Manager ผูกข้อมูลรถเก๋ง, กระบะ, มอเตอร์ไซค์ เข้ากับเลขบัตรประชาชนเป้าหมาย แสดงการ์ดรถยนต์ ยี่ห้อ สี หมายเลขทะเบียน พร้อมปุ่มกดสืบค้นประวัติการผ่านกล้อง LPR
ที่มาของแฟ้มข้อมูลและบันทึกคดีฉบับเต็ม (Intel Notes) รวบรวมข้อความดิบ รายละเอียดเบาะแส และบันทึกพฤติการณ์ที่ส่งเข้ามาทั้งหมด แสดงข้อความบันทึกคดีฉบับเต็ม โดยระบบจะแปลงลิงก์ URL พิกัดให้เป็น Hyperlink สีฟ้าที่คลิกเปิดได้ทันที (Clickable URL Auto-linking)
ปุ่ม "เปิดในผัง i2 Graph" คลิกส่ง ID บุคคลไปยังหน้าผัง i2 เปิดผังความเชื่อมโยงและซูมโฟกัสไปที่โหนดของบุคคลนี้พร้อมเครือข่ายบริวารทันที

🕸️ 4.4 การบริหารจัดการผังข้อมูลเครือข่าย (i2 Link Analysis Graph Management)

ระบบจำลองความสามารถของซอฟต์แวร์ IBM i2 Analyst's Notebook ขึ้นมาทำงานบนเว็บเบราว์เซอร์ 100% โดยได้รับการปรับปรุงสถาปัตยกรรมใหม่หมดจด: แถบเครื่องมือ 2 ชั้น (2-Tier Modular Toolbar) ที่เป็นระเบียบ ไม่ตกบรรทัด, ระบบแคชประมวลผลเร็วขึ้น 35 เท่า, การแสดงโหนดมิเตอร์ไฟฟ้า PEA และโหนดเบอร์โทรครบทุกเบอร์

📥 ข้อมูลนำเข้าผัง (Graph Input)

ไฟล์ผัง .anb จาก i2 Analyst's Notebook, ข้อมูลจากถังข้อมูล (Dossier Vault), สเตทเมนต์ธนาคาร, และ CDR

➔
⚙️ กลไกประมวลผลผัง (Process)

In-Memory Caching (TTL 5 นาที), GPU Canvas Viewport Lazy Loading และการคำนวณพิกัด 2 โซนพื้นที่

➔
📤 ผลลัพธ์ผังข้อมูล (Graph Output)

ผังใยแมงมุม 5,000+ โหนด โหลดขึ้นจอในเวลา 0.67 วินาที ไม่กินแรมมือถือ พร้อมโหนดบุคคล ทร.14 คมชัด และโหนดมิเตอร์ PEA ⚡

🛠️ สารบบแถบเครื่องมือผังแบบ 2 ชั้น (2-Tier Modular Toolbar Architecture):

ระบบแยกแถบควบคุมออกเป็น 2 ชั้นอย่างเป็นระเบียบ เพื่อป้องกันการตกบรรทัดและรองรับการแสดงผลทุกขนาดหน้าจอ:

ชั้นที่ 1: แถวบนสุด (Header Top Row — ควบคุมชุดข้อมูลและส่งออก):
ปุ่มคำสั่ง / เมนู ตำแหน่ง การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
Dropdown สลับมุมมองผัง (#i2SourceChartSelect) Header แถวบน คลิกเลือก "🌐 ผังรวมทั้งหมด (All Evidence)" หรือเลือกเฉพาะชื่อไฟล์ เช่น 68 (ล่าสุด).anb, โพยนอก.anb สลับมุมมองระหว่างผังรวมพยานหลักฐานขนาดใหญ่ กับผังคดีย่อยของแฟ้มเฉพาะคดี
📋 ผัง i2 ในระบบ (#btnOpenI2ImportsModal) Header แถวบน เปิดหน้าต่างรายการไฟล์ .anb ทั้งหมดที่เคยอัปโหลดไว้ ดูสถานะการสกัดข้อมูล กดพรีวิว กดนำขึ้นผัง (Apply) หรือกดยกเลิกนำออก (Rollback)
🌐 นำเข้าผัง i2 (.anb) (#btnOpenI2ChartUpload) Header แถวบน เปิดหน้าต่างเลือกไฟล์ผัง IBM i2 Analyst's Notebook (.anb) จากคอมพิวเตอร์ เริ่มกระบวนการสกัดข้อมูลและแปลงขึ้นสู่ระบบ
👑 บันทึกผังตั้งต้นระบบ (#btnSaveMasterLayout) เฉพาะ Superadmin ส่งพิกัดตำแหน่งของทุกโหนดบนผังปัจจุบันไปบันทึกเป็น Master Layout กำหนดให้ผังนี้เป็นมุมมองตั้งต้นสำหรับผู้ใช้งานทุกคนในระบบ
🔄 ผังตั้งต้นระบบ (#btnResetToMasterLayout) Header แถวบน ล้างการจัดตำแหน่งเฉพาะบุคคล แล้วดึงพิกัดจาก Master Layout คืนค่าตำแหน่งโหนดทั้งหมดตามผังแม่แบบที่ผู้ดูแลระบบจัดไว้
↺ กู้คืนโหนด (N) (#btnRestoreExcludedNodes) Header แถวบน แสดงจำนวนโหนดที่ถูกผู้ใช้ซ่อนไว้ชั่วคราว เช่น "(3)" คลิกเพื่อนำโหนดที่เคยซ่อนไว้กลับคืนสู่ผังทั้งหมดทันที
✨ จัดผังใหม่อัตโนมัติ (#btnAutoArrange) Header แถวบน รันอัลกอริทึม Force-Directed Graph Layout กระจายตัวโหนดตามกลุ่มคลัสเตอร์ความสัมพันธ์โดยไม่ให้โหนดทับซ้อนกัน
📷 บันทึกภาพ (PNG) (#btnExportGraphImg) Header แถวบน สั่งเรนเดอร์ Canvas ทั้งหมดแบบ High-resolution ส่งออกไฟล์รูปภาพ PNG คุณภาพสูงสำหรับนำไปพิมพ์รายงานหรือแนบสำนวนการสอบสวน
ชั้นที่ 2: แถวล่าง (Toolbar Bottom Row — ตัวกรองและเครื่องมือจัดผัง):
ปุ่มคำสั่ง / ตัวกรอง ตำแหน่ง / คีย์ลัด การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
กลุ่มชิปตัวกรอง 6 หมวด Toolbar ฝั่งซ้าย คลิกเปิด/ปิดประเภท: 👤 บุคคล, 📞 เบอร์โทร, 🏦 บัญชีธนาคาร, 💳 คู่โอน, 📦 พัสดุ Flash, 🌐 สายส่ง ซ่อนหรือแสดงโหนดประเภทนั้นบนผังทันที เพื่อลดความซับซ้อนของเส้นสาย
🌟 จัดผังดาวกระจาย (#btnStarburstLayoutGlobal) Toolbar ฝั่งขวา จัดเรียงโหนดแบบ Hub-and-Spoke วางโหนดเป้าหมายหลักไว้ตรงกลาง และจัดโหนดบริวาร (เบอร์โทร, บัญชีม้า) ล้อมรอบเป็นรูปดาวกระจาย
🧲 คลายระยะห่าง (#btnAntiCollisionGlobal) Toolbar ฝั่งขวา คำนวณเวกเตอร์ผลักกัน (Repulsion Vector) ระหว่างโหนดที่ใกล้กันเกินไป ดันโหนดที่ทับซ้อนกันให้กระจายออก โดยไม่เปลี่ยนเค้าโครงผังหลัก
↩️ ย้อนกลับ (#btnUndoI2) Ctrl + Z ย้อนกลับการกระทำล่าสุด (Move, Link, Bend, Layout) คืนค่าตำแหน่งโหนดหรือเส้นเชื่อมกลับสู่สถานะก่อนหน้า (รองรับสูงสุด 50 ประวัติ)
↪️ เดินหน้า (#btnRedoI2) Ctrl + Y ทำซ้ำคำสั่งที่เพิ่งย้อนกลับไป นำการแก้ไขกลับมาใช้ใหม่
ช่องค้นหาในผัง (#i2SearchInput) Ctrl + F พิมพ์ชื่อ, เลขบัตรประชาชน 13 หลัก, เบอร์โทรศัพท์, หรือเลขบัญชี ซูมแพนหน้าจอไปยังโหนดที่ตรงกับคำค้นทันที พร้อมแสดง Badge นับจำนวน เช่น 1/8
🔄 รีเฟรช (#btnReloadGraph) Toolbar ฝั่งขวาสุด ล้างแคชในเครื่องและดึงข้อมูลกราฟใหม่จากเซิร์ฟเวอร์ อัปเดตข้อมูลผังล่าสุดทันที
ปุ่มลากคลุม (มือถือ/แท็บเล็ต) เฉพาะจอสัมผัส ปุ่ม ⬚ โหมดลากคลุม ถูกซ่อนอัตโนมัติบนคอมพิวเตอร์ (เพราะใช้ Shift+Drag ได้เลย) จะแสดงผลเฉพาะบนหน้าจอมือถือและแท็บเล็ต เพื่อให้ตีกรอบเลือกหลายโหนดด้วยการลากนิ้วได้

⚡ โหนดรูปแบบใหม่: มิเตอร์ไฟฟ้า PEA และเบอร์โทรศัพท์ทุกค่าย:

⚡ โหนดมิเตอร์ไฟฟ้า (PEA Meter Node)

โหนดสีทอง-ส้ม แสดงหมายเลขมิเตอร์ PEA NO และชื่อผู้ขอใช้ไฟ พร้อมวาดเส้นเชื่อมโยงจากบุคคลไปยังมิเตอร์ เมื่อคลิกที่โหนดจะมีปุ่มเปิด Google Maps นำทางสู่พิกัดเสาไฟหรือกระท่อมเป้าหมายได้ทันที

📞 โหนดเบอร์โทรศัพท์ทุกค่าย (Active Phones)

หากบุคคลมีเบอร์โทรศัพท์หลายเบอร์ (เช่น 8 เบอร์ทั้ง AIS และ TRUE) ผัง i2 จะสร้างโหนดเบอร์โทรศัพท์ครบทั้ง 8 โหนดล้อมรอบตัวบุคคล ไม่ตัดทอน เพื่อให้เห็นความเชื่อมโยงของซิมม้าทั้งหมดอย่างชัดเจน

🔗 4.5 การสร้างเส้นเชื่อมโยงและจุดหมุนในผัง i2 (Node Linking & Bend Points)

เจ้าหน้าที่สามารถลากเส้นโยงความสัมพันธ์ใหม่ด้วยตนเอง และสร้างจุดหมุนหักมุม 90 องศา (Bend Point) เพื่อจัดระเบียบเส้นทางในผังไม่ให้ทับซ้อนกัน

⚡ วิธีการลากเส้นเชื่อมโยงโหนด (Node Linking Workflow):

1

วิธีที่ 1: ด้ามจับสีม่วง (Purple Handle Drag):

นำเมาส์ไปชี้เหนือโหนดต้นทาง จะปรากฏจุดกลมสีม่วงขนาดเล็กอยู่ขอบบนของโหนด ให้คลิกเมาส์ค้างที่จุดสีม่วงแล้วลากสายสัมพันธ์ไปยังโหนดปลายทาง

2

วิธีที่ 2: คีย์ลัด Alt + ลากเมาส์ (Alt+Drag):

กดปุ่ม Alt บนคีย์บอร์ดค้างไว้ แล้วคลิกเมาส์ซ้ายค้างที่โหนดต้นทาง ลากเส้นสายสัมพันธ์ไปปล่อยใส่โหนดปลายทางได้ทันที

3

วิธีที่ 3: ปุ่มคำสั่งในแผงข้าง (Sidebar Button):

คลิกเลือกโหนดต้นทาง ในแผงด้านข้างให้กดปุ่ม 🔗 เชื่อมโยงไปยังโหนดอื่น (#btnStartConnectNode) แล้วคลิกที่โหนดเป้าหมายบนผัง

📐 จุดหมุนและเส้นหักมุม (Interactive Bend Points / 90° Manhattan Routing):

✦

การสร้างจุดหมุน (Create Bend Point):

ดับเบิ้ลคลิก (Double-click) บนเส้นเชื่อมโยง ณ จุดใดก็ได้ จะปรากฏจุดกลมสีฟ้า (Waypoint Handle) ขึ้นมาบนเส้นทันที

✦

การดัดเส้นและปรับมุม (Drag to Position):

คลิกเมาส์ซ้ายค้างที่จุดหมุนสีฟ้า แล้วลากไปวางในตำแหน่งที่ต้องการ เส้นจะหักมุมเลี้ยวตามจุดหมุน สามารถสร้างจุดหมุนได้หลายจุดบนเส้นเดียวกันเพื่อเดินเส้นหลบกลุ่มโหนด

✦

การลบจุดหมุน (Delete Bend Point):

คลิกขวา (Right-click) ที่จุดหมุนสีฟ้า จุดหมุนจะหายไปและเส้นจะกลับมาดึงตรงตามเดิม หรือคลิกเลือกเส้นแล้วกดปุ่ม Delete

🗃️ 4.6 เครื่องมือกลุ่มและการนำทางพื้นที่ในผัง i2 (Multi-Selection & Spatial Zones)

เมื่อต้องจัดการกลุ่มโหนดขนาดใหญ่พร้อมกัน เช่น จัดระเบียบเบอร์โทรศัพท์ 20 เบอร์ให้อยู่เป็นแนวระนาบ หรือจัดกลุ่มบุคคลให้เป็นวงกลม ระบบมีแถบเครื่องมือลอย (Floating Action Bar) และระบบนำทางแบ่ง 2 โซนพื้นที่

🛠️ แถบเครื่องมือลอยเมื่อเลือกหลายโหนด (Multi-Selection Floating Action Bar #i2FloatingActionBar):

ปรากฏอัตโนมัติเมื่อกดเลือกโหนดตั้งแต่ 2 โหนดขึ้นไป (โดยการกด Shift ค้างไว้แล้วคลิกเลือก หรือเปิดโหมดลากคลุม Box Select บนจอสัมผัส):

ปุ่มคำสั่ง การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
⭕ วงกลม (#btnGroupCircle) คำนวณจุดศูนย์กลางมวล และจัดวางโหนดตามรัศมีวงกลม จัดเรียงโหนดที่เลือกทั้งหมดกระจายตัวรอบวงกลมสวยงาม
↔️ แนวนอน (#btnGroupHoriz) จัดระเบียบแกน Y ให้เท่ากัน และเว้นระยะแกน X สม่ำเสมอ เรียงแถวหน้ากระดานแนวนอน เหมาะสำหรับการจัดรายการบัญชีม้าหรือเบอร์โทร
↕️ แนวตั้ง (#btnGroupVert) จัดระเบียบแกน X ให้เท่ากัน และเว้นระยะแกน Y สม่ำเสมอ เรียงแถวตอนแนวตั้ง เหมาะสำหรับจัดแสดงลำดับสายบังคับบัญชา
📦 กริด (#btnGroupGrid) คำนวณสัดส่วนตาราง Matrix เช่น 3×3 หรือ 4×4 จัดเรียงโหนดเป็นบล็อกสี่เหลี่ยมกริดประหยัดพื้นที่บนผัง
🧲 คลายระยะห่าง (#btnGroupAntiCollision) คำนวณระยะห่างเฉพาะโหนดที่เลือก คลายระยะระหว่างโหนดในกลุ่มไม่ให้ตัวหนังสือและไอคอนทับกัน
👁️ โฟกัสกลุ่มนี้ (#btnGroupIsolate) ซ่อนโหนดอื่นๆ ทั้งหมดบนผังชั่วคราว เน้นเฉพาะเครือข่ายของกลุ่มที่เลือก ตัดสิ่งรบกวนตาออกทั้งหมด
🗑️ ซ่อนที่เลือก (#btnGroupDelete) นำโหนดที่เลือกทั้งหมดเข้าสู่รายการซ่อน (Excluded List) ซ่อนกลุ่มนี้ออกจากผัง สามารถกดปุ่ม ↺ กู้คืนโหนด บนแถบด้านบนเพื่อเรียกคืนได้
✕ ยกเลิก (#btnGroupClear) คลิกยกเลิกการเลือก ปลดการเลือกโหนดทั้งหมด และซ่อนแถบเครื่องมือลอย

🧭 แถบนำทาง 2 โซนพื้นที่ (Spatial 2-Zone Pills):

ผัง i2 ของระบบ Sloth BPP 215 ถูกจัดแบ่งพื้นที่ในแนวแกน Y เป็น 2 โซนขนาดใหญ่ เพื่อไม่ให้ข้อมูลปะปนกัน:

⬆️ ผังระบบเดิม (โซนบน) ⬇️ ผัง i2 นำเข้า (โซนล่าง) 🌐 ผังรวมทั้งหมด
  • ⬆️ ผังระบบเดิม (North Zone - #btnNavNorthZone): โฟกัสไปที่กลุ่มโหนดข้อมูลคดีและทะเบียนรถเดิมที่สร้างขึ้นจากระบบ BPP-VMS (พิกัด Y ด้านบน)
  • ⬇️ ผัง i2 นำเข้า (South Zone - #btnNavSouthZone): เลื่อนกล้องลงไปยังพื้นที่ของผังขนาดใหญ่ที่สกัดมาจากโปรแกรม IBM i2 เช่น Master Chart 68 และโพยนอก (พิกัด Y ด้านล่าง ซึ่งเว้นระยะห่างไว้ 20,000 พิกเซลเพื่อความเป็นระเบียบ)
  • 🌐 ผังรวมทั้งหมด (All Zones - #btnNavAllZones): ปรับระดับการซูมและตำแหน่งให้อยู่กึ่งกลาง เพื่อมองเห็นภาพรวมความเชื่อมโยงของทั้ง 2 โซนพร้อมกัน
📌 หมวดที่ 5 (ปรับปรุงล่าสุด v3.2)

ระบบแจ้งเตือนอัจฉริยะและการสั่งการผ่านบอท AI (Alerts & AI Bot)

คู่มือการผูกบัญชี Telegram ประจำตัวเจ้าหน้าที่ (@Sloth_bpp215bot) การตั้งค่าเมทริกซ์แจ้งเตือนเฉพาะกล้องและชนิดวัตถุ การกระจายข่าวสารด่วน (Broadcast) การสนทนาสั่งการด้วยภาษาไทยกับ Sloth AI Assistant ระบบอัจฉริยะรับข้อมูลการสืบสวนผ่าน Telegram (Smart Session Intelligence Ingestion) และระบบประมวลผลชุดข้อมูลคดี (Batch Processing & 4-Category Destination Report) พร้อมปุ่มทางลัดเปิดดูถังข้อมูลและยานพาหนะผ่าน Telegram ทันที

📱 5.1 การผูกบัญชี Telegram ส่วนบุคคล (@Sloth_bpp215bot)

เจ้าหน้าที่ผู้ปฏิบัติงานทุกคนสามารถผูกบัญชีแอปพลิเคชัน Telegram ของตนเองเข้ากับระบบ Sloth BPP 215 เพื่อรับการแจ้งเตือนเหตุการณ์สำคัญ ภาพถ่ายรถต้องสงสัย และคลิปวิดีโอสั้นเข้ามือถือได้ตลอดเวลา

📥 ข้อมูลนำเข้า (Input)

กดขอรหัส OTP 6 หลักบนหน้าเว็บ BPP-VMS แล้วนำรหัสไปส่งให้บอท @Sloth_bpp215bot ใน Telegram

➔
⚙️ กลไกประมวลผล (Process)

เซิร์ฟเวอร์จับคู่รหัส OTP กับบัญชีผู้ใช้งาน และบันทึก Telegram Chat ID ลงฐานข้อมูลผู้ใช้

➔
📤 ผลลัพธ์ที่ได้ (Output)

บอทส่งข้อความยืนยันสำเร็จ และสถานะบนหน้าเว็บจะเปลี่ยนเป็น 🟢 เชื่อมต่อแล้ว

🛠️ ขั้นตอนการผูกบัญชีทีละสเต็ป (Step-by-Step):

1

เปิดแท็บแจ้งเตือนส่วนตัว:

คลิกปุ่ม ⚙️ ตั้งค่าระบบ บนแถบด้านบน ➔ เลือกแท็บที่ 4 "การแจ้งเตือนส่วนตัว" (#btnTabMyAlerts)

2

ขอรหัสจับคู่ (Request Pair Code):

กดปุ่ม 🔗 ขอรหัสผูก Telegram (#btnReqPairCode) หน้าจอจะปรากฏป๊อปอัปแสดงรหัสตัวเลข 6 หลัก (มีอายุการใช้งาน 10 นาที)

3

ส่งรหัสให้บอทใน Telegram:

เปิดแอป Telegram ค้นหาบอทชื่อ @Sloth_bpp215bot กด Start แล้วพิมพ์ตัวเลข 6 หลักนั้นส่งให้บอท ระบบจะยืนยันการผูกสำเร็จในทันที

🔔 5.2 การปรับแต่งการแจ้งเตือนส่วนบุคคลและกระจายสัญญาณ (Alert Matrix & Broadcast)

เพื่อป้องกันไม่ให้เจ้าหน้าที่ได้รับการแจ้งเตือนมากเกินไป (Notification Fatigue) ระบบจึงมีระบบ Personal Alert Matrix ให้ผู้ใช้เลือกรับแจ้งเตือนเฉพาะกล้องและเหตุการณ์ที่ตนเองรับผิดชอบ

การตั้งค่า / สวิตช์ การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
เปิดแจ้งเตือนส่วนตัว (#chkMyMasterAlert) เปิด/ปิด สวิตช์หลักของตนเอง เปิดหรือระงับการส่งข้อความแจ้งเตือนทั้งหมดมายัง Telegram ของผู้ใช้
กระจายแจ้งเตือนทุกคน (Broadcast) (#chkAdminBroadcast) เฉพาะ Superadmin เมื่อเปิดตัวเลือกนี้ เมื่อใดก็ตามที่เกิดเหตุการณ์วิกฤต (เช่น รถ Watchlist สีแดง) ระบบจะส่งข้อความไปยัง Telegram ของเจ้าหน้าที่ทุกคนในหน่วยพร้อมกันทันที
ตารางเมทริกซ์กล้อง x วัตถุ (#myAlertsCamMatrix) ติ๊กเลือกช่องตัดกันระหว่างชื่อกล้อง (CH01-CH16) กับประเภทวัตถุ (คน, รถ, ป้ายทะเบียน, รถต้องสงสัย) ระบบจะกรองส่งแจ้งเตือนเฉพาะเหตุการณ์ที่ตรงกับช่องที่ติ๊กไว้เท่านั้น เช่น เจ้าหน้าที่เวรประตูค่าย ติ๊กรับเฉพาะกล้อง CH01 และเฉพาะประเภท "รถต้องสงสัย"
💾 บันทึกการแจ้งเตือน คลิกปุ่มบันทึก เซฟการตั้งค่าเมทริกซ์ลงฐานข้อมูล มีผลทันทีกับข้อความรอบถัดไป

🤖 5.3 ผู้ช่วยอัจฉริยะ Sloth AI & NAS Assistant

กดปุ่ม 🤖 Sloth AI Assistant บน Top Bar เพื่อเปิดหน้าต่างสนทนาสั่งการด้วยภาษาธรรมชาติ (Natural Language Processing) ผู้ช่วย AI สามารถสืบค้นข้อมูลคดี ทะเบียนรถ และเอกสารใน Storage ได้ทันที

💬 ตัวอย่างคำสั่งที่สามารถพิมพ์สั่งงาน AI ได้:

สืบค้นประวัติรถ

คำสั่ง: "ค้นหารถทะเบียน กพ 3771 ว่าเคยผ่านกล้องไหนบ้างช่วง 7 วันที่ผ่านมา"

ผลลัพธ์: AI จะสรุปไทม์ไลน์ เวลา กล้องที่ตรวจพบ พร้อมดึงภาพ Snapshot และระดับความมั่นใจมาแสดงในแชท

สรุปสถานการณ์ประจำวัน

คำสั่ง: "สรุปเหตุการณ์ความมั่นคงที่ตรวจพบเมื่อคืนตั้งแต่เวลา 20:00 - 06:00 น."

ผลลัพธ์: AI จะประมวลผลสถิติ แจกแจงจำนวนคนเดินผ่าน บุคคลแปลกปลอม และรถที่วิ่งผ่านนอกเวลาทำการ

ค้นหาแฟ้มใน NAS

คำสั่ง: "ค้นหาบันทึกจับกุมคดียาเสพติดของ นายวรพงษ์ ในคลังจัดเก็บ"

ผลลัพธ์: AI เชื่อมต่อไปยัง NAS Storage เพื่อค้นหาเอกสารสำนวนคดีและแนบลิงก์สำหรับดาวน์โหลดไฟล์ PDF ให้ทันที

⚡ 5.4 ระบบอัจฉริยะรับข้อมูลการสืบสวนผ่าน Telegram & แชท (Smart Intelligence Ingestion)

ระบบ Sloth BPP 215 ได้รับการอัปเกรดความฉลาดของบอท Telegram (@Sloth_bpp215bot) และระบบแชท โดยนำสถาปัตยกรรม Smart Session Management และ Hybrid Intelligence Matching มาใช้งาน ทำให้เจ้าหน้าที่สามารถส่งข้อมูลการสืบสวนภาคสนามเข้าสู่ ถังข้อมูล (Dossier Vault) และ ผังข้อมูล (i2 Graph) ได้โดยตรงแบบอัตโนมัติ 100%

📥 ส่งผ่าน Telegram (Input)

เจ้าหน้าที่ส่งภาพ ทร.14, ตามด้วยข้อความผลเช็คค่ายมือถือ (AIS/TRUE), มิเตอร์ PEA, และข้อมูลรถ

➔
⚙️ การประมวลผลอัจฉริยะ (Process)

เปิด Active Session 30 นาที, ลบตราประทับสีแดง, แก้ไขตัวสะกดเพี้ยนอัตโนมัติ, จับคู่ Hybrid Matching รวบรวมเข้าแฟ้มเดียวกัน

➔
📤 ซิงค์สองทางสมบูรณ์ (Output)

ข้อมูลทั้งหมดถูกจัดเก็บลง ถังข้อมูล (มีปุ่มเปิด Maps พิกัดมิเตอร์) และสร้างโหนดใน ผังข้อมูล i2 ครบถ้วน

🛠️ ฟังก์ชันการรับข้อมูลอัจฉริยะ 5 ประการสำคัญ:

ระบบ / กลไกอัจฉริยะ การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมาในระบบ (Output)
1. ระบบจำบริบทแชท 30 นาที (Smart Session Window) เมื่อส่ง ทร.14 บอทจะเปิด Active Session นาน 30 นาที (1,800 วินาที) สำหรับ chat_id นั้น หากส่งข้อความผลสืบสวนตามมา เช่น เบอร์โทรศัพท์, ข้อมูลการเปิดใช้งานซิม, ข้อมูลมิเตอร์ไฟฟ้า PEA บอทจะรู้บริบททันทีและนำไปรวมในแฟ้มบุคคลเดียวกัน ไม่แตกเป็นรายงานเหตุการณ์แยกเคสอีกต่อไป
2. ระบบจับคู่แบบผสม (Hybrid Matching 4 ลำดับ) เมื่อได้รับข้อความผลสืบสวน ระบบจะค้นหาความเชื่อมโยงตามลำดับความน่าเชื่อถือ:
1. เลขประจำตัวประชาชน 13 หลัก (แม่นยำสูงสุด)
2. หมายเลขโทรศัพท์ที่มีบันทึกในระบบ
3. Active Dossier Session (กำลังคุยเรื่องบุคคลนี้อยู่)
4. ชื่อ-นามสกุล บุคคล
อัปเดตข้อมูลเข้าแฟ้มบุคคลที่ถูกต้อง 100% แม้เจ้าหน้าที่จะไม่ได้พิมพ์ชื่อบุคคลซ้ำในทุกข้อความ
3. ระบบรวบรวมชุดข้อมูล Debounce & ปุ่มสั่งประมวลผลทันที (Batch Gathering & Immediate Feedback) ระบบขยายเวลารวบรวมชุดข้อมูล (Debounce) เป็น 5.0 วินาที และส่งปุ่ม Inline [✅ เสร็จสิ้นการส่ง / ประมวลผล ({cnt} รายการ)] พร้อมระบบตอบสนองทันที (Immediate Feedback) หากส่งภาพ ทร.14 หลายภาพพร้อมข้อความรถ ระบบจะรวบรวมไฟล์ทั้งหมดเข้าเป็นชุดเดียวกัน ป้องกันเคสแตกกระจายจากสัญญาณเน็ตมือถือ พร้อมส่งรายงานสรุปแยก 4 ปลายทาง และปุ่มดูถังข้อมูลใน Telegram (ดูรายละเอียดเต็มในหัวข้อ 5.5)
4. ลบตราประทับสีแดง & แก้ไขชื่อเพี้ยน (Red Stamp Removal & Caption Typo Correction) - _remove_red_markup: กรองเม็ดสีแดงของตราประทับทางราชการออกด้วย Color Thresholding ก่อนส่งเข้า OCR
- หากส่งแคปชันระบุชื่อ (เช่น "น.ส.บุศยา พรมพิบาล หรือบีม...") ระบบจะนำชื่อจากแคปชันมาแทนที่ตัวสะกดเพี้ยน
แก้ปัญหาชื่อเพี้ยนจากรอยประทับ (เช่น "พรมพิ๊บาล" ➔ "พรมพิบาล", "ลุตวิกvow" ➔ "ลุดวิก ชอบท์") ได้ตั้งแต่ต้นทาง
5. การจัดการยานพาหนะส่วนกลาง (Central Vehicle Intelligence Manager) - ตรวจจับเล่มทะเบียนรถ (DLT), คัดกรองชื่อบริษัทไฟแนนซ์/ลิสซิ่งออกอัตโนมัติ
- สั่งการด้วยคำสั่ง /vehicle <ทะเบียน> หรือ /รถ <ทะเบียน> ใน Telegram
ค้นหาข้อมูลประวัติรถ ผู้ครอบครอง และสามารถกดปุ่มผูกรถเข้ากับแฟ้มบุคคลในถังข้อมูลได้ทันที
💡
เทคนิคการส่งข้อมูลภาคสนามให้เข้าแฟ้มสมบูรณ์:
1. ถ่ายรูปเอกสาร ทร.14 หรือใบหน้าบุคคล ส่งเข้าบอท @Sloth_bpp215bot พร้อมแคปชันชื่อภาษาไทย (เช่น นายสมบูรณ์ ทุเรศไธสง)
2. ภายใน 30 นาที สามารถคัดลอกข้อความผลเช็คค่ายมือถือ (เช่น "เครือข่าย A : เบอร์...") หรือข้อความ PEA ส่งตามเข้าไปได้ทันที
3. ระบบจะรวมข้อมูลทั้งหมดเข้าสู่ ถังข้อมูล (Dossier Vault) และแสดงเป็นโหนดมิเตอร์ไฟฟ้า ⚡ และโหนดเบอร์โทรศัพท์ใน ผังข้อมูล (i2 Graph) ให้อัตโนมัติโดยไม่ต้องเปิดคอมพิวเตอร์ทำเอง!

📦 5.5 ขั้นตอนการกดปุ่มประมวลผล, รายงานสรุปแยก 4 ปลายทาง และปุ่มทางลัดใน Telegram (Batch Processing & 4-Category Destination Report)

เพื่อตอบสนองต่อการปฏิบัติงานภาคสนามที่ต้องการความรวดเร็วและความชัดเจนสูงสุด ระบบ Sloth BPP 215 ได้รับการอัปเกรดระบบการตอบสนองของปุ่ม "เสร็จสิ้นการส่ง / ประมวลผล" บน Telegram (@Sloth_bpp215bot) ให้มี การตอบสนองทันที (Immediate UI Feedback) พร้อมรายงานสรุปแจกแจงปลายทางของข้อมูล 4 หมวดหมู่อย่างเป็นระเบียบ และปุ่มทางลัดกดเรียกดูการ์ดประวัติบุคคลในถังข้อมูลได้ทันทีผ่านหน้าต่างแชท

📥 1. ผู้ใช้กดปุ่มคำสั่ง (Button Tap)

แตะปุ่ม [✅ เสร็จสิ้นการส่ง / ประมวลผล] ใน Telegram เพื่อสั่งให้ AI เริ่มประมวลผลทันที

➔
⚙️ 2. การตอบสนองทันที (Immediate Feedback)

แสดง Toast Alert บนหัวจอทันที + เปลี่ยนข้อความเป็น "⏳ กำลังประมวลผล..." และปลดปุ่มออก ป้องกันการกดซ้ำซ้อน

➔
📤 3. รายงาน 4 หมวด + ปุ่มทางลัด (Summary & Shortcuts)

ส่งรายงานแจกแจง 4 ปลายทาง (ถังข้อมูล, คลัง NAS, ผัง i2, ระบบรถ) พร้อมปุ่ม [👤 ดูถังข้อมูล] เปิดดูการ์ดในแชททันที

🛠️ 1. ขั้นตอนการทำงานของปุ่มคำสั่งและการเปลี่ยนสถานะ (Step-by-Step UI Flow):

1

การรวมชุดข้อมูลอัตโนมัติ (Batch Gathering & Debounce Timer):

เมื่อเจ้าหน้าที่ส่งภาพถ่าย ทร.14, เอกสาร, ภาพรถ หรือข้อความสืบสวนเข้ามา บอทจะเริ่มนับเวลาหน่วง (Debounce 5.0 วินาที) เพื่อเปิดโอกาสให้ส่งหลายรายการพร้อมกัน และส่งข้อความปุ่ม Inline:

⏳ ได้รับแล้ว 3 รายการ... กำลังรวบรวมชุดข้อมูล ของ 'น.ส.เพชรรัตน์ สายแก้ว' 🦥
👉 หากส่งครบแล้ว สามารถกดปุ่มด้านล่างเพื่อประมวลผลทันทีครับผม
✅ เสร็จสิ้นการส่ง / ประมวลผล (3 รายการ)
2

การตอบสนองทันทีด้วย Toast Alert (Instant Header Toast):

ทันทีที่แตะปุ่ม บอทจะยิง answerCallbackQuery ขึ้นแถบข้อความ Toast บนหัวจอ Telegram ทันที:

🔔 Toast แจ้งเตือนหัวจอ: "⏳ กำลังเริ่มประมวลผลชุดข้อมูล กรุณารอสักครู่ครับ... 🦥"

ช่วยให้เจ้าหน้าที่มั่นใจได้ 100% ว่าระบบรับคำสั่งแล้ว แม้จะใช้เวลาประมวลผล AI OCR นาน 10-15 วินาทีก็ตาม

3

การเปลี่ยนสถานะข้อความและปลดปุ่ม (In-Progress State Lock):

ข้อความเดิมจะถูกแก้ไข (Edit Message) เป็นสถานะกำลังทำงาน และนำปุ่ม Inline ออกทันที เพื่อป้องกันการกดซ้ำซ้อน:

⏳ กำลังประมวลผลชุดข้อมูล...

ระบบกำลังอ่านเอกสาร (AI OCR) สกัดข้อมูลบุคคล และจัดระเบียบข้อมูลลงถัง กรุณารอสักครู่ครับผม 🦥✨

📋 2. โครงสร้างรายงานสรุปปลายทางข้อมูล 4 หมวดหมู่ (4-Category Ingestion Architecture):

เมื่อ AI อ่านเอกสารและจัดเก็บข้อมูลเสร็จสิ้น บอทจะส่งข้อความรายงานสรุปแจกแจงว่าข้อมูลถูกนำไปทำอะไร และจัดเก็บไว้ที่ใดในระบบอย่างชัดเจน:

หมวดหมู่ปลายทาง การนำข้อมูลไปทำอะไร (Action & Purpose) ปลายทางที่จัดเก็บจริงและผลลัพธ์ (Destination & Output)
🗂️ 1. ถังข้อมูลบุคคล
(Dossier Vault)
- สกัดชื่อ-นามสกุล, เลขประจำตัวประชาชน 13 หลัก, หมายเลขโทรศัพท์ทุกค่าย, ที่อยู่ภูมิลำเนา, อายุ และพฤติการณ์คดี
- ตรวจจับความสัมพันธ์เครือข่าย/ครอบครัวระหว่างบุคคลที่ปรากฏในชุดเอกสาร
- ปลายทาง: สร้าง/อัปเดตไฟล์ /Dossiers/<dossier_id>/profile.json บนเซิร์ฟเวอร์
- ผลลัพธ์: ปรากฏเป็นการ์ดแฟ้มประวัติบุคคลในหน้าต่าง ถังข้อมูล (Arrest Dossier Vault) บน Live Dashboard พร้อมค้นหาได้ทันที
📁 2. คลังจัดเก็บหลักฐาน
(NAS Storage)
- บันทึกไฟล์ภาพต้นฉบับ ทร.14, ภาพถ่ายสถานที่, สลิปโอนเงิน, ภาพยานพาหนะ หรือไฟล์ PDF เอกสารรายงาน
- แยกหมวดหมู่ย่อย Photos และ Documents โดยไม่แก้ไขหรือลดทอนคุณภาพไฟล์
- ปลายทาง: โฟลเดอร์สำนวนคดีจริงบน NAS Storage เช่น /Cases/2026/09/<case_id>/
- ผลลัพธ์: จัดเก็บถาวรปลอดภัยในคลัง NAS Storage ไม่สูญหายแม้เซิร์ฟเวอร์รีบูต และเปิดดูย้อนหลังได้ตลอดเวลา
🕸️ 3. ผังข้อมูลความสัมพันธ์
(i2 Graph)
- นำบุคคลเป้าหมายไปสร้างเป็น โหนดบุคคล (Person Node)
- สกัดสลิปธนาคารสร้าง โหนดบัญชีธนาคาร (Bank Node) และเส้นทางเงิน
- สกัดมิเตอร์ไฟฟ้าสร้าง โหนดมิเตอร์ PEA (⚡) พร้อมพิกัด GPS
- ลากเส้นเชื่อมโยงความสัมพันธ์เครือข่ายและครอบครัวอัตโนมัติ
- ปลายทาง: ผังเครือข่ายความสัมพันธ์ i2 Network Graph บน Live Dashboard
- ผลลัพธ์: ผังเชื่อมโยงความสัมพันธ์จะปรากฏเส้นโยงทันที โดยไม่ต้องวาดเองด้วยมือในโปรแกรม i2
🚘 4. ข้อมูลยานพาหนะ
(Central Vehicles)
- สกัดข้อมูลป้ายทะเบียน, หมวดจังหวัด, ชนิดรถ, ยี่ห้อ, รุ่น และสี จากภาพถ่ายเล่มทะเบียน (DLT) หรือข้อความกำกับ
- ผูกชื่อผู้ครอบครองเข้ากับแฟ้มบุคคลเป้าหมายในถังข้อมูล
- ปลายทาง: ฐานข้อมูลยานพาหนะส่วนกลาง (Central Vehicle Intelligence)
- ผลลัพธ์: สามารถสั่งค้นหาประวัติรถด้วยคำสั่ง /vehicle <ทะเบียน> หรือ /รถ <ทะเบียน> ใน Telegram ได้ทันที

⚡ 3. ปุ่มทางลัดโต้ตอบใน Telegram (Interactive Shortcut Buttons):

ท้ายข้อความรายงานสรุป ระบบจะแนบปุ่ม Inline อำนวยความสะดวกให้เจ้าหน้าที่ตรวจสอบข้อมูลได้ทันทีผ่านมือถือ:

👤 ดูถังข้อมูล: [ชื่อบุคคล]

ฟังก์ชัน: ดึงข้อมูลประวัติบุคคลฉบับเต็มจากการ์ดถังข้อมูล (Dossier Profile Card) ส่งตอบกลับใน Telegram แชททันที:
• 🪪 เลขประจำตัวประชาชน 13 หลัก
• 📞 รายการเบอร์โทรศัพท์ทุกค่าย (AIS, TRUE)
• 🏠 ที่อยู่ภูมิลำเนาตามทะเบียนราษฎร
• ⚡ มิเตอร์ไฟฟ้า PEA พร้อมลิงก์ Google Maps นำทางสู่พิกัดเสาไฟ
• 🚘 รายการยานพาหนะที่ครอบครอง
• 📑 จำนวนไฟล์หลักฐานทั้งหมดในถังข้อมูล
• 📁 รหัสแฟ้มในคลัง NAS

🚘 ดูข้อมูลรถ: [เลขทะเบียน]

ฟังก์ชัน: เรียกดูข้อมูลจำเพาะของรถคันที่ตรวจพบจากเอกสารคดี:
• ป้ายทะเบียนและจังหวัด
• ประเภทรถ (เก๋ง, กระบะ, จักรยานยนต์)
• ยี่ห้อ, รุ่น และสีตัวถัง
• ชื่อผู้ครอบครองและสถานะการผูกแฟ้มบุคคล

✅ ข้อมูลถูกต้องครบถ้วน

ฟังก์ชัน: ปุ่มยืนยันความถูกต้องของแฟ้มสำนวนคดี:
• เจ้าหน้าที่แตะเพื่อบันทึกสถานะการยืนยัน (Verified Status)
• ระบบจะตอบกลับยืนยันความถูกต้องและบันทึกประวัติผู้ตรวจสอบลงใน Log คดี

🛡️
ระบบสำรองความปลอดภัย (Markdown Fallback Protection):
กรณีที่ชื่อไฟล์ ทร.14 หรือรหัสคดีมีอักขระพิเศษ (เช่น เครื่องหมาย Underscore _ ใน Doc_1_TR14_คดี_...) ซึ่งอาจทำให้โปรแกรม Telegram ปฏิเสธการจัดรูปแบบตัวหนา/เอียง ระบบของ Sloth BPP 215 จะตรวจจับอัตโนมัติและทำการ Retry ส่งข้อความซ้ำเป็นแบบข้อความธรรมดา (Plain Text Fallback) ให้อัตโนมัติในทันที ทำให้ ไม่มีข้อความสรุปหรือรายงานใดๆ ตกหล่นหรือสูญหาย อย่างแน่นอน 100%
📌 หมวดที่ 6

การบริหารจัดการระบบ ความปลอดภัย และสิทธิ์ผู้ใช้งาน (Administration)

คู่มือสำหรับผู้ดูแลระบบและเจ้าหน้าที่ด้านเทคนิค: การจัดการบัญชีผู้ใช้งาน สิทธิ์การเข้าถึง 4 ระดับ (RBAC) การตรวจสอบประวัติการใช้งาน (Audit Logs) การเพิ่มและตั้งค่ากล้อง NVR การเชื่อมโยงโครงข่ายข้ามหน่วยงาน (Federation Mesh & WireGuard) และตารางสรุปคีย์ลัดคำสั่งด่วนทั้งหมดในระบบ

👥 6.1 ข้อมูลบัญชีและระดับสิทธิ์ (Profile & RBAC Roles)

คลิกปุ่ม 👤 ข้อมูลบัญชี บน Top Bar เพื่อเปิดหน้าต่างโปรไฟล์ส่วนตัว ตรวจสอบระดับสิทธิ์ และเปลี่ยนรหัสผ่าน

ระดับสิทธิ์ (Role) ป้ายสถานะ ขอบเขตอำนาจและการเข้าถึงฟังก์ชันในระบบ
ผู้ใช้งานทั่วไป (User) 👤 USER ดูภาพสดกล้อง (Live Grid), ดูเหตุการณ์สด, ค้นหาเหตุการณ์ในคลัง, เล่นคลิป, และดูภาพย้อนหลัง (Playback)
เจ้าหน้าที่สืบสวน (Officer) 🛡️ OFFICER สิทธิ์เท่ากับ User + สามารถเพิ่ม/แก้ไขทะเบียนใน Watchlist, ตรวจสอบและสอน AI ป้ายทะเบียน (Active Learning), และเข้าดูแฟ้มใน Arrest Vault
ผู้ดูแลระบบ (Admin) ⚙️ ADMIN สิทธิ์เท่ากับ Officer + เข้าถึงหน้าต่าง Settings ทั้งหมด, เพิ่ม/แก้ไข/ลบกล้อง NVR, ปรับแต่งโซน LPR, จัดการบัญชีผู้ใช้ และดูบันทึก Audit Logs
ผู้ดูแลสูงสุด (Super Admin) 👑 SUPERADMIN สิทธิ์เต็มทุกส่วนในระบบ + จัดการโครงข่ายข้ามหน่วยงาน (Federation), บันทึกผังแม่แบบหลัก (Master Layout) ในผัง i2, และส่งสัญญาณเตือนด่วนทั่วถึง (Broadcast)

🔑 ขั้นตอนการเปลี่ยนรหัสผ่านตนเอง:

1

เปิดหน้าต่างโปรไฟล์:

กดปุ่ม 👤 ข้อมูลบัญชี บนแถบด้านบน ➔ เลื่อนลงมาที่ส่วน "เปลี่ยนรหัสผ่าน"

2

กรอกรหัสผ่าน:

ระบุรหัสผ่านเดิม ➔ ระบุรหัสผ่านใหม่ (ความยาวอย่างน้อย 8 ตัวอักษร แนะนำให้มีทั้งตัวพิมพ์เล็ก พิมพ์ใหญ่ และตัวเลข) ➔ ยืนยันรหัสผ่านใหม่อีกครั้ง

3

ยืนยันการเปลี่ยน:

กดปุ่ม บันทึกรหัสผ่านใหม่ ระบบจะอัปเดตรหัสผ่านใหม่ลงฐานข้อมูลทันทีโดยไม่ต้องออกจากระบบ

📋 6.2 บันทึกประวัติการใช้งาน (Audit Logs - Admin Only)

ระบบบันทึกทุกการกระทำสำคัญของผู้ใช้งานลงในฐานข้อมูลความปลอดภัยที่ไม่สามารถแก้ไขหรือลบได้ เพื่อความโปร่งใสและตรวจสอบได้ย้อนหลัง

ประเภทการกระทำ ข้อมูลที่ระบบบันทึก (Event Metadata) วัตถุประสงค์ในการตรวจสอบ
การเข้าสู่ระบบ / ออกจากระบบ วันเวลา, บัญชีผู้ใช้, หมายเลข IP, เบราว์เซอร์, สถานะ (สำเร็จ/ล้มเหลว) ตรวจจับการพยายามเดารหัสผ่าน (Brute-force Attack) หรือการล็อกอินจาก IP ผิดปกติ
การส่งออกข้อมูล (Export Evidence) ชื่อผู้ใช้, หมายเลขคลิปวิดีโอ, ช่วงเวลาที่ตัดคลิป, ชื่อกล้อง ควบคุมการนำไฟล์ภาพหรือวิดีโอออกจากระบบ ป้องกันข้อมูลรั่วไหล
การแก้ไขการตั้งค่าระบบ ผู้แก้ไข, กล้องที่ถูกเปลี่ยนชื่อ, การเปลี่ยน URL RTSP, การแก้ไขโซน LPR ตรวจสอบประวัติการคอนฟิกเพื่อป้องกันข้อผิดพลาดในการปฏิบัติงาน
การจัดการ Watchlist & ผัง i2 การเพิ่ม/ลบทะเบียนรถเป้าหมาย, การอัปโหลดหรือลบไฟล์ผังคดี .anb บันทึกสายการสืบสวนและเจ้าหน้าที่ผู้รับผิดชอบคดี

📹 6.3 การจัดการและเพิ่มกล้อง NVR (Camera Provisioning)

ผู้ดูแลระบบสามารถเพิ่มกล้องวงจรปิด IP Camera เข้าสู่ระบบได้อย่างง่ายดายผ่านหน้าต่าง Settings ➔ แท็บ "กล้องในระบบ (NVR)"

1

กดปุ่มเพิ่มกล้อง:

กดปุ่ม + เพิ่มกล้องใหม่ (#btnShowAddCam)

2

กรอกรายละเอียดกล้อง:

- ชื่อกล้อง (อังกฤษ): เช่น gate_front (ใช้เป็นตัวอ้างอิงในระบบ ห้ามเว้นวรรค)
- ชื่อแสดงผล (ไทย): เช่น CH01 ประตูหน้าค่าย
- RTSP Main Stream: ลิงก์สตรีมความละเอียดสูงจากกล้อง เช่น rtsp://admin:pass@192.168.1.50:554/Streaming/Channels/101
- RTSP Sub Stream: ลิงก์สตรีมความละเอียดต่ำ เช่น rtsp://admin:pass@192.168.1.50:554/Streaming/Channels/102
- การตรวจจับ (Detect): ติ๊กเปิดเพื่อให้ AI YOLO11 และ LPR วิเคราะห์ภาพ
- การบันทึก (Record): ติ๊กเปิดเพื่อให้บันทึกวิดีโอ 24 ชั่วโมงลงฮาร์ดดิสก์

3

ยืนยันและรีสตาร์ทสตรีม:

กดปุ่ม ตกลง ระบบจะอัปเดตไฟล์คอนฟิก Frigate NVR และเริ่มดึงภาพสดขึ้นสู่หน้า Dashboard ทันที

⚠️
ข้อกำหนดไฟร์วอลล์และเน็ตเวิร์ก (Network & Firewall Requirements):
  • ฝั่งหน้างาน (Bridge Client): Windows Firewall ต้องอนุญาตการเชื่อมต่อขาออก (Outbound) ไปยังพอร์ต 1935 (RTMP) ของเซิร์ฟเวอร์ และพอร์ต 554 (RTSP) ในวง LAN
  • ฝั่งศูนย์กลาง (BPP-VMS Server): เราเตอร์ศูนย์ต้อง Forward พอร์ต Inbound 1935 ตรงมายังเครื่อง BPP-VMS Docker
  • การเข้ารหัสรหัสผ่าน: โปรแกรมจะทำ URL-encoding อักขระพิเศษใน Username และ Password ให้อัตโนมัติ เพื่อป้องกันปัญหารหัสผ่านที่มีสัญลักษณ์พิเศษ (เช่น @, $, :, #) ทำให้ไม่ต้องกังวลเรื่องพิมพ์ URL ผิด
💡
การตั้งค่า WebRTC IP สำหรับสตรีมสด: หากภาพสดหน้า Dashboard หมุนค้าง หรือเซิร์ฟเวอร์เพิ่งเปลี่ยนวงแลน/Wi-Fi ให้ระบุ IP ปัจจุบันของเครื่องเซิร์ฟเวอร์ในช่อง "WebRTC IP" แล้วกดปุ่ม บันทึกและรีสตาร์ท (หรือกดปุ่ม "ดึง IP อัตโนมัติ") เพื่อให้เบราว์เซอร์สามารถเจรจาสัญญาณ WebRTC ICE Candidates ได้อย่างถูกต้อง
🛰️
คู่มือเฉพาะทางสำหรับกล้องอัจฉริยะและหน่วยงานภายนอก:
สำหรับการเชื่อมต่อกล้อง TP-Link VIGI (Smart AI), กล้องอ่านป้ายทะเบียน Dahua ITC (Edge LPR Webhook) หรือการดึงภาพจากหน่วยงานภายนอกที่ไม่มี Public IP ด้วย BPP NVR Bridge สามารถศึกษาขั้นตอนอย่างละเอียดและดาวน์โหลดโปรแกรมได้ที่ หมวดที่ 7: กล้องภายนอก & Edge LPR (VIGI & Bridge)

🌐 6.4 โครงข่ายเชื่อมโยงหน่วยงาน (Federation Mesh & MikroTik WireGuard)

ระบบ Sloth BPP 215 รองรับสถาปัตยกรรม Federation Network Mesh ช่วยให้สามารถดึงสัญญาณภาพสดและประวัติการตรวจจับจากกล้องของกองร้อยข้างเคียง หรือฐานปฏิบัติการย่อย มาแสดงผลบนหน้าจอของกองบังคับการส่วนหน้าได้แบบไร้รอยต่อ

ปุ่มคำสั่ง / ฟังก์ชัน การนำข้อมูลไปทำอะไร (Input & Action) ผลลัพธ์ที่ได้ออกมา (Output & Effect)
🌐 โครงข่ายหน่วยงาน (#btnNodes) คลิกเปิดหน้าต่าง Federation Settings เปิดหน้าต่างจัดการโหนดเพื่อนบ้าน (Peer Nodes) และสถานะเครือข่าย
ช่องกรอก IP โหนดเพื่อนบ้าน ระบุ IP Address ของเครื่อง NVR ปลายทาง เช่น 10.215.10.1 หรือผ่าน WireGuard VPN ส่งคำขอเชื่อมต่อ Handshake และตรวจสอบโทเคนความปลอดภัยข้ามหน่วยงาน
ดึงข้อมูล (#btnFetchFederatedCams) คลิกเรียกดูรายชื่อกล้องจากโหนดข้างเคียง แสดงรายการกล้องทั้งหมดของฐานปฏิบัติการปลายทาง ให้ผู้ใช้เลือกดึงเฉพาะบางกล้องได้
ซิงค์ทั้งหมด (#btnSyncAllFederatedCams) คลิกเพื่อเชื่อมโยงกล้องทั้งหมด เพิ่มกล้องของหน่วยข้างเคียงเข้ามาเป็นช่องเสริมในตาราง Dashboard ทันที
📘
เอกสารคู่มือเฉพาะทางด้านเครือข่าย:
- สำหรับคู่มือปฏิบัติการระบบ AI บอท และเครือข่ายกล้อง VPN: ศึกษาได้จาก คู่มือหลัก BPP-VMS Ultimate Master Guide (n8n AI & MikroTik WireGuard)
- สำหรับการจัดตั้งโครงข่าย NVR ข้ามกองร้อย: ศึกษาได้จาก คู่มือ Federation Network Mesh Manual

🚀 6.5 การติดตั้งเครื่องใหม่ และการอัปเดตระบบอัตโนมัติ (1-Click Setup & Update)

เพื่อความสะดวกสูงสุดของเจ้าหน้าที่เทคนิคและผู้ดูแลระบบ BPP-VMS ได้จัดเตรียมเครื่องมือช่วยติดตั้งและอัปเดตแบบ 1-Click Automation ไว้ที่โฟลเดอร์หลัก (D:\BPP-VMS\) ทำให้สามารถเริ่มระบบบนเครื่องใหม่หรืออัปเดตเวอร์ชันล่าสุดได้โดยไม่ต้องพิมพ์คำสั่งใน Terminal เองแม้แต่บรรทัดเดียว:

📦 ชุดติดตั้งระบบสำเร็จรูปสำหรับเครื่องใหม่ (Zero-GitHub Installer ZIP) ไม่ต้องล็อกอิน GitHub

แพ็กเกจระบบครบชุด โครงสร้างโฟลเดอร์สมบูรณ์ 100% เพียงดาวน์โหลดแล้วแตกไฟล์ลงที่ D:\ จะได้โฟลเดอร์ D:\BPP-VMS\ พร้อมดับเบิลคลิก Setup_New_Machine.bat ติดตั้งได้ทันที ปลอดภัย ไร้ความเสี่ยงต่อบัญชี GitHub

ดาวน์โหลด bpp-vms-installer.zip
🌐 ลิงก์ดาวน์โหลดโดยตรง: https://sloth.bpp215.com/downloads/bpp-vms-installer.zip
เปิดลิงก์ดาวน์โหลด →

⚡ Setup_New_Machine.bat (ลงเครื่องใหม่)

ดับเบิลคลิกเพื่อเริ่มระบบบนเครื่องใหม่ทันที:

  • ตรวจสอบความพร้อมของ Docker Desktop
  • สุ่มสร้างรหัสความปลอดภัย 64-char Hex ใน .env ครบถ้วน
  • สร้างใบรับรอง HTTPS (SSL) อัตโนมัติ
  • เริ่มคอนเทนเนอร์ 17 ตัว และสร้างบัญชี Super Admin
  • เปิดเบราว์เซอร์เข้า https://localhost ทันที

🔄 Update_System.bat (อัปเดตระบบ)

ดับเบิลคลิกเพื่ออัปเดตเวอร์ชันล่าสุด:

  • รองรับทั้งโหมด Git (git pull) และโหมด Offline ZIP
  • เริ่มบริการใหม่ด้วยโค้ดเวอร์ชันล่าสุด
  • ข้อมูลไม่สูญหาย: ข้อมูลผู้ใช้ รหัสผ่าน และคลิปย้อนหลังคงอยู่ครบ 100%
  • ปลอดภัย ไม่ลบฐานข้อมูลเดิม

📦 Export_Installer_Package.bat

สคริปต์แพ็กเกจบนเครื่องแม่ สำหรับแจกจ่าย:

  • สร้างไฟล์ bpp-vms-installer.zip อัตโนมัติใน 4 วินาที
  • ตัดไฟล์ประวัติและไฟล์ความลับออก ปลอดภัย 100%
  • วางไฟล์พร้อมโหลดบนเว็บและพร้อมก๊อปปี้ลง Flash Drive
💡
คู่มือการติดตั้งฉบับสมบูรณ์: ศึกษาขั้นตอนอย่างละเอียดและแนวทางการแก้ปัญหาได้จากเอกสาร คู่มือการติดตั้งและอัปเดตระบบ BPP-VMS (1-Click Guide) ที่อยู่ในโฟลเดอร์หลัก

⌨️ 6.6 ตารางสรุปคีย์ลัดทั้งหมดในระบบ (Keyboard Shortcuts Cheat Sheet)

เพื่อความรวดเร็วสูงสุดในการปฏิบัติหน้าที่ควบคุมสถานการณ์ เจ้าหน้าที่สามารถใช้คีย์ลัดบนแป้นพิมพ์เพื่อสั่งการระบบได้ทันที:

คีย์ลัด (Shortcut) หน้าต่างที่ใช้งาน คำสั่งและการทำงาน
Esc ทุกหน้าต่าง (Viewer, Modal, Playback, i2) ปิดหน้าต่างป๊อปอัปปัจจุบัน และกลับสู่หน้า Dashboard
Spacebar เครื่องเล่นคลิป / Playback สลับการ เล่น (Play) และ หยุดชั่วคราว (Pause) วิดีโอ
◀ / ▶ เครื่องเล่นคลิป / Playback เลื่อนวิดีโอถอยหลัง / เดินหน้า ทีละ 5 วินาที
Ctrl + F หน้าหลัก Dashboard / ผัง i2 Graph โฟกัสไปยังช่องค้นหากล้อง หรือช่องค้นหาโหนดในผังทันที
Ctrl + Z ผัง i2 Graph ย้อนกลับการกระทำล่าสุด (Undo) เช่น ย้ายโหนด, สร้างเส้น, จัดผัง
Ctrl + Y ผัง i2 Graph ทำซ้ำการกระทำที่ย้อนกลับไป (Redo)
Alt + ลากเมาส์ ผัง i2 Graph ลากสร้างเส้นเชื่อมโยงความสัมพันธ์ใหม่ระหว่าง 2 โหนด (Drag-to-Connect)
ดับเบิ้ลคลิกเส้น ผัง i2 Graph สร้างจุดหมุนหักมุม 90 องศา (Bend Point) บนเส้นเชื่อมโยง
คลิกขวาที่จุดหมุน ผัง i2 Graph ลบจุดหมุนหักมุมออกจากเส้น และคืนค่าเส้นดึงตรง
Shift + ลากเมาส์ ผัง i2 Graph ตีกรอบสี่เหลี่ยมเพื่อเลือกกลุ่มโหนดหลายตัวพร้อมกัน (Box Select)
ดับเบิ้ลคลิกที่โหนด ผัง i2 Graph เลือกทั้งกลุ่มเครือข่ายที่เชื่อมโยงถึงกันทั้งหมด (Select Cluster)
Delete / Backspace ผัง i2 Graph ซ่อนโหนดหรือเส้นที่เลือกอยู่ออกจากผังชั่วคราว
📌 หมวดที่ 7 (ใหม่ล่าสุด)

การเชื่อมต่อกล้องภายนอก, กล้อง Edge LPR & BPP NVR Bridge (Zero MikroTik)

คู่มือปฏิบัติการเชื่อมต่อกล้อง TP-Link VIGI (Smart AI In-Camera), กล้องตรวจจับป้ายทะเบียนเฉพาะทาง Dahua ITC / VIGI LPR ผ่านระบบ Edge Webhook, และการดึงสัญญาณภาพจากหน่วยงานภายนอกที่ไม่มี Public IP (CGNAT / 4G SIM) ด้วยโปรแกรม BPP NVR Bridge โดยไม่ต้องติดตั้งเราเตอร์ MikroTik เพิ่มเติม

🛰️ 7.1 ภาพรวมสถาปัตยกรรม Hybrid Intelligence & Edge AI Pipeline

ระบบ Sloth BPP 215 รองรับการประมวลผลวิดีโออัจฉริยะแบบ Hybrid Architecture โดยแบ่งการทำงานออกเป็น 3 รูปแบบตามศักยภาพของฮาร์ดแวร์หน้างาน เพื่อให้เซิร์ฟเวอร์หลักสามารถรองรับกล้องได้จำนวนมากที่สุดโดยไม่เกิดคอขวดที่ CPU/GPU:

📥 ช่องทางรับข้อมูล (Input)

RTSP Stream (554), Edge LPR Webhook (:443), หรือ RTMP Outbound Push (:1935) จากหน้างาน

➔
⚙️ กลไกประมวลผล (Process)

Server AI Drop (ประหยัด CPU 100%), Central Gatekeeper ตรวจสอบสิทธิ์, และ Watchlist Instant Match (< 50ms)

➔
📤 ผลลัพธ์ที่ได้ (Output)

ภาพสดบน Live Dashboard, บันทึกวิดีโอ 24/7, และส่งแจ้งเตือน Telegram พร้อมภาพถ่ายรถและป้ายทะเบียนทันที

🛠️ ตารางเปรียบเทียบรูปแบบกล้อง 3 กลุ่มในระบบ:

ประเภทกล้อง จุดประมวลผล AI ภาระโหลดบนเซิร์ฟเวอร์ คุณลักษณะและการแจ้งเตือน
1. กล้องทั่วไป (General CCTV) Server AI บนเซิร์ฟเวอร์ ใช้ GPU/CPU ในการถอดรหัสและรันโมเดล YOLOv8 + LPR Engine รองรับกล้องมาตรฐานทุกยี่ห้อ (ONVIF/RTSP) เซิร์ฟเวอร์ตรวจจับคน ยานพาหนะ และอ่านป้ายทะเบียน
2. กล้อง TP-Link VIGI (Smart AI) In-Camera AI ในตัวกล้อง 0% โหลด AI เซิร์ฟเวอร์ทำหน้าที่บันทึกและแสดงภาพสดเท่านั้น ชิป AI ในกล้องแยกแยะคนและยานพาหนะเอง BPP-VMS ปิด Server Detect เพื่อประหยัดทรัพยากร 100%
3. กล้อง Dahua ITC (Edge LPR) Edge Hardware AI เกือบ 0% รับเฉพาะข้อมูลสรุป Webhook JSON + ภาพถ่าย กล้องอ่านป้ายและตัดภาพรถด้วยตัวเอง ยิงเข้าเซิร์ฟเวอร์ผ่าน Webhook ตรวจจับตรง Watchlist ทันทีใน < 50ms
ผังแสดงการไหลของสัญญาณเครือข่าย (Network Flow Diagram):
┌─────────────────────────────────────────────────────────────────────────────────┐ │ หน่วยงานภายนอก (Behind CGNAT / 4G SIM) │ │ │ │ [ กล้อง Dahua ITC LPR ] ───(HTTPS Webhook :443)───┐ │ │ │ │ │ [ กล้อง TP-Link VIGI ] │ │ │ │ (RTSP ในวงแลน) │ │ │ ▼ ▼ │ │ [ เครื่อง VIGI NVR ] ───(RTMP Outbound :1935)───► [ BPP-VMS Reverse Gateway ] │ │ หรือ │ │ │ [ PC: BPP NVR Bridge ] ─(RTMP Outbound :1935)───┘ │ │ │ │ * ไม่ต้องมี Public IP / ไม่ต้อง Forward Port / ไม่ต้องซื้อเราเตอร์ MikroTik │ └─────────────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌───────────────────────────┐ │ BPP-VMS Central Hub │ │ - Admin Gatekeeper Drop │ │ - Watchlist Match (<50ms)│ │ - Telegram Instant Alert │ │ - 24/7 Continuous NVR │ └───────────────────────────┘

📹 7.2 การเชื่อมต่อกล้อง TP-Link VIGI (Standalone & Multi-Channel NVR)

กล้องวงจรปิด TP-Link VIGI ทั้งแบบตัวเดี่ยว (Standalone) และแบบเชื่อมต่อผ่านเครื่องบันทึก VIGI NVR ใช้พอร์ต RTSP มาตรฐานคือ 554 มีโครงสร้าง URL สตรีมดังนี้:

รูปแบบการเชื่อมต่อ โครงสร้าง RTSP URL (Port 554) คำแนะนำการใช้งาน
กล้อง VIGI เดี่ยว (Main Stream) rtsp://{user}:{pass}@{ip}:554/stream1 ภาพคมชัดสูงสุด (1080p/4K) เหมาะสำหรับกล้องจุดสำคัญที่อยู่ในวงแลนเดียวกัน
กล้อง VIGI เดี่ยว (Sub Stream) rtsp://{user}:{pass}@{ip}:554/stream2 ประหยัดแบนด์วิดท์สูงสุด ลื่นไหล ไม่กระตุก เหมาะสำหรับดูภาพสดหลายช่องพร้อมกัน
เครื่องบันทึก VIGI NVR ช่องที่ 1 rtsp://{user}:{pass}@{nvr_ip}:554/ch1/stream2 ดึงภาพจากช่อง 1 ผ่าน NVR (แนะนำ Sub Stream stream2)
เครื่องบันทึก VIGI NVR ช่องที่ 2 rtsp://{user}:{pass}@{nvr_ip}:554/ch2/stream2 ดึงภาพจากช่อง 2 ผ่าน NVR
เครื่องบันทึก VIGI NVR ช่องที่ N (1-16) rtsp://{user}:{pass}@{nvr_ip}:554/ch16/stream2 ระบุหมายเลขช่องกล้องได้ตั้งแต่ ch1 ถึง ch16 ตามจำนวนกล้องบน NVR

🛠️ ขั้นตอนการเพิ่มกล้อง VIGI เข้าสู่ระบบ BPP-VMS:

  1. 1

    เปิดหน้าต่างจัดการกล้อง (Camera Management)

    เข้าสู่ระบบในฐานะ Admin คลิกปุ่ม ⚙️ ตั้งค่าระบบ บนแถบด้านบน ➔ เลือกแท็บ "กล้องในระบบ (NVR)" ➔ กดปุ่ม + เพิ่มกล้องใหม่

  2. 2

    เลือกประเภทกล้องเป็น Preset "TP-Link VIGI (Smart AI)"

    ในช่อง "ประเภทกล้อง (Preset)" ให้คลิกเลือก "TP-Link VIGI (Smart AI)" ระบบจะนำค่าโครงสร้าง URL และปรับแต่งออปชันการบันทึกภาพให้เหมาะสมโดยอัตโนมัติ

  3. 3

    กรอกชื่อกล้องและวาง RTSP URL

    ตั้งชื่อกล้องภาษาอังกฤษ (เช่น vigi_gate01) ชื่อแสดงผลภาษาไทย (เช่น VIGI ประตู 1) และวาง URL ที่ได้จากตารางด้านบนลงในช่อง "RTSP URL (Main Stream)"

  4. 4

    ระบบปิด Server AI ให้อัตโนมัติ (Zero Server Load)

    ช่อง "เปิดระบบ AI ตรวจจับ (YOLO/LPR)" จะถูกปลดเครื่องหมายถูกออกโดยอัตโนมัติ เพื่อป้องกันไม่ให้เซิร์ฟเวอร์นำภาพไปประมวลผลซ้ำซ้อน ประหยัด CPU/GPU ได้ 100% แต่ยังคงบันทึกวิดีโอ 24 ชั่วโมง และดูภาพสดได้ครบถ้วน

  5. 5

    บันทึกและเริ่มสตรีม

    กดปุ่ม ตกลง ระบบจะบันทึกคอนฟิกและเริ่มดึงภาพขึ้นสู่หน้า Live Dashboard ภายใน 15-20 วินาที

💡
ข้อแนะนำสำหรับการดึงผ่าน NVR: เครื่องบันทึก VIGI NVR หนึ่งเครื่องอาจเชื่อมกล้องไว้ 8-16 ตัว การดึงภาพข้ามเครือข่ายแนะนำให้ใช้ Sub Stream (/stream2) เสมอ เพื่อลดปริมาณการใช้แบนด์วิดท์เครือข่าย และช่วยให้ภาพเปิดติดได้ทันทีโดยไม่มีอาการภาพหน่วงหรือดีเลย์

🚗 7.3 การเชื่อมต่อกล้องตรวจจับป้ายทะเบียน Dahua ITC (Edge LPR Webhook)

กล้อง Dahua ITC หรือกล้องอ่านป้ายทะเบียนอัจฉริยะที่มีโมเดล AI ในตัว สามารถอ่านตัวเลข ตัวอักษร หมวดจังหวัด และตัดภาพเฉพาะตัวรถ (Vehicle Snapshot) ส่งตรงเข้าสู่ BPP-VMS ผ่าน Edge LPR Webhook โดยเซิร์ฟเวอร์ไม่ต้องประมวลผลภาพใดๆ เพิ่มเติม:

🔗 Webhook URL สำหรับตั้งค่าในตัวกล้อง Dahua ITC:
https://[SERVER_DOMAIN_OR_IP]/api/lpr/camera-webhook?token=bpp_secret_2026
* หมายเหตุ: เปลี่ยน [SERVER_DOMAIN_OR_IP] เป็น IP หรือโดเมนของเซิร์ฟเวอร์ BPP-VMS เช่น https://192.168.1.100/api/lpr/camera-webhook?token=bpp_secret_2026 หรือผ่าน Domain DDNS

🛠️ ขั้นตอนการตั้งค่าบนหน้า Web UI ของกล้อง Dahua ITC:

  1. 1

    เข้าสู่หน้าเว็บของตัวกล้อง

    เปิดเบราว์เซอร์ พิมพ์ IP ของกล้อง Dahua ITC (เช่น 192.168.1.108) และเข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่านของผู้ดูแลกล้อง

  2. 2

    เปิดใช้งานโมดูลอัจฉริยะ (Smart Plan)

    ไปที่เมนู Setting ➔ Event ➔ Smart Plan ตรวจสอบให้แน่ใจว่าได้คลิกเปิดใช้งานไอคอน ITC / ANPR (Traffic / License Plate Recognition) และกด Save

  3. 3

    เปิดแท็บส่งข้อมูลแจ้งเตือน (Alarm Center / HTTP Push)

    ไปที่เมนู Setting ➔ Network ➔ Access Platform เลือกแท็บ Alarm Center หรือ HTTP Push / Webhook

  4. 4

    กำหนดค่าการส่ง Webhook เข้าเซิร์ฟเวอร์

    - Enable: ทำเครื่องหมายถูก [✓]
    - Protocol: เลือก HTTPS (หรือ HTTP หากไม่ใช้ SSL)
    - Server Address / URL: วาง Webhook URL ที่ระบุไว้ด้านบน
    - Port: 443 (สำหรับ HTTPS) หรือ 80 (สำหรับ HTTP)
    - Report Type: ANPR / Vehicle Detection
    - Data Content: ติ๊กเลือกส่ง Plate String, Vehicle Picture (ภาพรถเต็มคัน), และ Plate Snapshot (ภาพเจาะป้าย)

  5. 5

    บันทึกและทดสอบ

    กดปุ่ม Save เมื่อมีรถขับผ่านหน้ากล้อง ข้อมูลจะถูกยิงเข้าสู่ BPP-VMS ทันทีภายในเสี้ยววินาที

🛡️
ระบบความปลอดภัย Central Gatekeeper:
เมื่อผู้ดูแลระบบสั่ง "ปิดใช้งานกล้อง" หรือ "ปิด AI" บนหน้าจอ Live Dashboard / Settings ของ BPP-VMS ตัวเซิร์ฟเวอร์จะทำการตรวจสอบสถานะและ ปฏิเสธข้อมูล Webhook ทันที (Drop / HTTP 200 Ignored) โดยไม่มีการประมวลผลต่อ ไม่บันทึกรูปลงฐานข้อมูล และไม่ส่งการแจ้งเตือน Telegram ใดๆ ช่วยให้ผู้ดูแลระบบมีอำนาจควบคุมการทำงานได้อย่างเบ็ดเสร็จ 100%

⚡ 7.4 หน่วยงานภายนอกไม่มี Public IP (CGNAT / 4G SIM) & โปรแกรม BPP NVR Bridge

บ่อยครั้งที่หน่วยงานภาคสนาม เช่น ด่านตรวจชุมชน, ป้อมยาม, หรือโรงเรียน ใช้บริการอินเทอร์เน็ตบ้านทั่วไปหรือซิม 4G ซึ่งผู้ให้บริการจ่าย IP แบบ CGNAT (ไม่มี Public IP) ทำให้ไม่สามารถ Forward Port ได้ และไม่มีงบประมาณสำหรับซื้อเราเตอร์ MikroTik:

💡 ทำไมกล้องหรือเครื่อง NVR ถึงดึงภาพข้ามที่ได้โดยไม่ต้องมี Public IP?

หลักการทำงานของกล้องวงจรปิดยุคใหม่ (เช่น VIGI Cloud หรือ Tuya) อาศัยเทคนิค Outbound Connection (การเชื่อมต่อขาออก):
- Inbound (ภายนอกวิ่งเข้ามาหา): ไฟร์วอลล์และระบบเครือข่ายของผู้ให้บริการเน็ตจะ บล็อกทิ้ง 100% หากไม่มี Public IP และ Port Forwarding
- Outbound (อุปกรณ์ภายในวิ่งออกไปหาเซิร์ฟเวอร์กลาง): ไฟร์วอลล์และเน็ต 4G อนุญาตให้ผ่านได้ 100% เสมอ ดุจเดียวกับการที่เราเปิดเว็บหรือดู YouTube จากในบ้าน

โปรแกรมสำเร็จรูป BPP NVR Bridge สำหรับ Windows (Portable)

แพ็กเกจรวมเอนจิน FFmpeg ความเร็วสูงและหน้าต่างกราฟิกพร้อมใช้งาน แตกไฟล์แล้วเปิดได้ทันที ไม่ต้องลงโปรแกรมเสริม

🌐 ลิงก์ตรงตัวเต็ม: https://sloth.bpp215.com/downloads/bpp-nvr-bridge.zip ⚡ ลิงก์ตรงสคริปต์อัปเดต: https://sloth.bpp215.com/downloads/BPP-NVR-Bridge.ps1

🛠️ คุณสมบัติเด่นของโปรแกรม BPP NVR Bridge:

ฟังก์ชันเด่น การทำงาน ประโยชน์ต่อการปฏิบัติงาน
🚀 Outbound Reverse Push ส่งสัญญาณภาพผ่านพอร์ต RTMP :1935 ยิงตรงเข้าสู่เซิร์ฟเวอร์ BPP-VMS ทะลุไฟร์วอลล์และเน็ตซิม 4G / CGNAT ได้ 100% โดยไม่ต้องขอ Public IP หรือซื้อเราเตอร์ MikroTik
🎨 Cyber Dark Purple GUI หน้าต่างกราฟิกสำหรับ Windows ใช้งานง่าย ไม่ต้องพิมพ์คำสั่งในหน้าต่างดำ เจ้าหน้าที่หน้างานทั่วไปสามารถตั้งค่าและใช้งานได้ทันทีเพียงแค่กรอก IP และรหัสผ่าน NVR
⏱️ Watchdog Auto-Healing ตรวจสอบสถานะการเชื่อมต่อตลอดเวลา หากเน็ตหลุด ไฟตก หรือกล้องดับ จะเชื่อมต่อใหม่ทุก 5 วินาที ระบบทำงานได้ต่อเนื่อง 24 ชั่วโมงโดยไม่ต้องมีเจ้าหน้าที่คอยรีสตาร์ทโปรแกรม
📥 ย่อลง System Tray คลิกปุ่มย่อโปรแกรมจะหลบไปอยู่ที่มุมขวาล่างข้างนาฬิกา Windows ไม่เกะกะหน้าจอ ไม่รบกวนการเปิดดูภาพสดโปรแกรม VIGI Security Manager ของหน้างาน
🔄 เปิดพร้อม Windows Startup ติ๊กเลือกตัวเลือกเปิดพร้อมเครื่องในหน้าตั้งค่า เมื่อเปิดคอมพิวเตอร์ โปรแกรมจะรันตัวเองและเริ่มส่งสัญญาณกล้องทันทีโดยอัตโนมัติ

🛠️ 5 ขั้นตอนการใช้งานโปรแกรม BPP NVR Bridge (หน้างาน + เซิร์ฟเวอร์):

  1. 1

    แตกไฟล์ ZIP

    ดาวน์โหลดไฟล์ bpp-nvr-bridge.zip จากปุ่มสีเขียวด้านบน แตกไฟล์ไว้บนเครื่องคอมพิวเตอร์ที่ต่ออยู่ในวงแลนเดียวกับกล้องหรือเครื่อง NVR (ตรวจสอบว่ามีโฟลเดอร์ bin\ffmpeg.exe อยู่ภายใน)

  2. 2

    เปิดโปรแกรม

    ดับเบิลคลิกที่ไฟล์ BPP-NVR-Bridge.vbs (แนะนำอย่างยิ่ง เพื่อเปิดโปรแกรมทันทีแบบไม่มีหน้าต่างคอนโซลดำขึ้นมากวนใจ 100%) หรือดับเบิลคลิก BPP-NVR-Bridge.bat จะปรากฏหน้าต่างควบคุมกราฟิกทันที หากไม่พบ FFmpeg โปรแกรมจะแจ้งเตือนพร้อมคำแนะนำ

  3. 3

    เลือกยี่ห้อ NVR, ระบุ IP และช่องกล้อง

    - เซิร์ฟเวอร์ปลายทาง: กรอก bpp215.duckdns.org หรือ WAN IP ของศูนย์ และรหัสหน่วยงาน (เช่น Bpp215 หรือ dan_khok_sung) *(หมายเหตุ: ต้องใช้ DuckDNS/WAN IP เพราะส่งผ่านพอร์ต RTMP 1935 ตรงเข้าเราเตอร์ ห้ามใช้ sloth.bpp215.com ในช่องนี้เนื่องจาก Cloudflare Proxy ไม่รองรับพอร์ต 1935)*
    - ยี่ห้อ NVR: เลือกแบรนด์ของเครื่องบันทึก (TP-Link VIGI, Dahua / DH, Hikvision / HIK, หรือ กำหนดเอง สำหรับใส่ RTSP path template)
    - NVR IP & พอร์ต:

    • กรณีอยู่ในวง LAN หน้างาน: ระบุ IP เครื่อง NVR เช่น 192.168.1.100 หรือ 192.168.20.199 และพอร์ต 554
    • กรณีเชื่อมต่อผ่านท่อ VPN (เช่น MikroTik WireGuard 10.10.10.x): ให้กรอก IP ปลายท่อของ MikroTik เช่น 10.10.10.2 และพอร์ต 554 ได้ทันที เนื่องจากเราเตอร์ MikroTik มีการทำ Port Forward (DST-NAT) พอร์ต 554 ไปยัง NVR ให้แล้ว (ไม่ต้องกรอก IP วงใน 192.168.20.199 ที่ถูกซ่อนอยู่หลังเราเตอร์)
    - User & Pass: ใส่ชื่อผู้ใช้และรหัสผ่าน NVR แล้วกดปุ่ม "ทดสอบเชื่อมต่อ"
    - เลือกช่องกล้อง: ติ๊กเลือกช่องกล้องที่ต้องการส่ง (1-16 ช่อง) และเลือกความละเอียด (Sub Stream ประหยัดเน็ต 0% CPU แนะนำ หรือ Main Stream)

  4. 4

    เริ่มส่งสัญญาณ (Start Bridge)

    กดปุ่ม "💾 บันทึกค่า" แล้วกด "🚀 เริ่มส่งสัญญาณ (Start Bridge)" จากนั้นกด "📥 ย่อลง System Tray" สัญญาณภาพจะเริ่มส่งเข้าสู่เซิร์ฟเวอร์ BPP-VMS ผ่าน RTMP พอร์ต :1935 แบบเรียลไทม์ทันที

  5. 5

    ลงทะเบียนกล้องที่ฝั่งเซิร์ฟเวอร์ (สำหรับผู้ดูแลระบบ)

    ที่หน้าเว็บ BPP-VMS Dashboard เข้าสู่เมนู ⚙️ ตั้งค่าระบบ ➔ กล้องในระบบ (NVR) ➔ + เพิ่มกล้องใหม่:
    - Preset: เลือก TP-Link VIGI (Smart AI) เพื่อปิดโหลด AI บนเซิร์ฟเวอร์
    - ชื่อกล้อง: ระบุตามรหัสหน่วยงานและช่อง เช่น dan_khok_sung_ch1
    - RTSP URL: กรอก rtmp://127.0.0.1:1935/live/[unit_code]_ch[N] (เช่น rtmp://127.0.0.1:1935/live/dan_khok_sung_ch1)
    - กด บันทึก ภาพสดจะแสดงบน Dashboard ทันที

⚠️ ข้อกำหนดไฟร์วอลล์และเน็ตเวิร์ก (Network & Firewall Requirements):

  • ฝั่งหน้างาน (Bridge Client): Windows Firewall ต้องอนุญาตการเชื่อมต่อขาออก (Outbound) ไปยังพอร์ต 1935 (RTMP) ของเซิร์ฟเวอร์ และพอร์ต 554 (RTSP) ในวง LAN
  • ฝั่งศูนย์กลาง (BPP-VMS Server): เราเตอร์ศูนย์ต้อง Forward พอร์ต Inbound 1935 ตรงมายังเครื่อง BPP-VMS Docker
  • การเข้ารหัสรหัสผ่าน: โปรแกรมจะทำ URL-encoding อักขระพิเศษใน Username และ Password อัตโนมัติ ป้องกันปัญหารหัสผ่านที่มีสัญลักษณ์พิเศษ (เช่น @, $, :, #)

❓ คำถามและวิธีแก้ไขปัญหาที่พบบ่อย (Troubleshooting FAQ):

ปัญหาที่พบ สาเหตุ วิธีแก้ไข
เปิดโปรแกรมแล้วขึ้นเตือน "ไม่พบโปรแกรม FFmpeg" ไม่มีไฟล์ bin\ffmpeg.exe ในโฟลเดอร์โปรแกรม แตกไฟล์ ZIP ใหม่ให้ครบถ้วน ห้ามลบหรือแยกโฟลเดอร์ bin ออกจากโปรแกรม
กดเริ่มแล้วขึ้นสถานะ 🔴 ผิดพลาด ทุกช่อง IP NVR, พอร์ต, รหัสผ่านไม่ถูกต้อง หรือเลือกรุ่นยี่ห้อ NVR ผิด กดปุ่ม "ทดสอบเชื่อมต่อ" ตรวจสอบ IP และตรวจว่าเลือกยี่ห้อ (VIGI / Dahua / Hikvision) ตรงกับเครื่องบันทึก
สถานะขึ้น 🟡 กำลังเชื่อมใหม่ วนซ้ำตลอดเวลา คอมพิวเตอร์ออกเน็ตไม่ได้ หรือ Firewall บล็อกพอร์ต RTMP 1935 ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต และตรวจสอบไฟร์วอลล์ว่าไม่ได้ปิดกั้นพอร์ต 1935 ขาออก
Bridge ออนไลน์แล้ว แต่ภาพไม่ขึ้นในหน้า BPP-VMS ยังไม่ได้ลงทะเบียนกล้องในหน้า Admin BPP-VMS ปฏิบัติตามขั้นตอนที่ 5 โดยเพิ่มกล้องด้วย URL rtmp://127.0.0.1:1935/live/[unit_code]_ch[N]

✅ 7.5 การตรวจสอบความถูกต้องและการทดสอบระบบ (Verification)

เจ้าหน้าที่เทคนิคสามารถทดสอบจำลองการส่งข้อมูล Edge LPR Webhook และตรวจสอบการทำงานของระบบ Central Gatekeeper ได้ผ่าน PowerShell บนเครื่องเซิร์ฟเวอร์:

💻 คำสั่งทดสอบผ่าน PowerShell / cURL:

# 1. จำลองข้อมูลรถเฝ้าระวังที่ตรวจจับได้จากกล้องหน้างาน
$payload = @{
    camera = "ext_lpr_gate1"
    plate = "9กข9999"
    confidence = 0.96
    timestamp = [DateTimeOffset]::UtcNow.ToUnixTimeSeconds()
} | ConvertTo-Json

$payload | Out-File -FilePath test.json -Encoding utf8

# 2. ส่งข้อมูลเข้าสู่ Webhook ของระบบ BPP-VMS
curl.exe -k -X POST "https://localhost/api/lpr/camera-webhook?token=bpp_secret_2026" `
  -H "Content-Type: application/json" `
  --data-binary "@test.json"

Remove-Item test.json

📊 ผลลัพธ์ที่คาดหวังและสถานะการตรวจสอบ:

กรณีทดสอบ (Scenario) ผลลัพธ์ที่ส่งกลับ (JSON Response) พฤติกรรมของระบบ (System Behavior)
กรณีปกติ: รถตรงกับ Watchlist {"status":"ok","hit":true,"event_id":"ext_...","plate":"9กข9999"} ระบบส่งข้อความแจ้งเตือนสีแดงพร้อมภาพถ่ายรถเข้ากลุ่ม Telegram ภายใน 50ms และบันทึกประวัติการจับกุม
กรณีปกติ: รถทั่วไป (ไม่ติด Watchlist) {"status":"ok","hit":false,"event_id":"ext_...","plate":"9กข9999"} ระบบบันทึกประวัติการผ่านทางลงฐานข้อมูล SQLite แต่ไม่มีการส่งข้อความรบกวนในกลุ่ม Telegram
กรณีผู้ดูแลสั่งปิดกล้องใน Admin {"status":"ignored","reason":"Camera or AI is disabled by administrator"} Central Gatekeeper ปฏิเสธข้อมูล ไม่บันทึกลงฐานข้อมูล ไม่กินพื้นที่ฮาร์ดดิสก์ และไม่ส่ง Telegram Alert
💡
สรุปหลักการปฏิบัติหน้าที่: เมื่อใดที่ต้องการเพิ่มกล้องใหม่ เจ้าหน้าที่เพียงแค่เปิดดูรูปแบบ URL ใน หัวข้อ 7.2 และนำไปกรอกในหน้าต่างกล้อง NVR ได้ทันที และหากต้องการให้หน่วยงานภายนอกส่งภาพเข้ามา เพียงแค่ส่งไฟล์ bpp-nvr-bridge.zip ใน หัวข้อ 7.4 ให้หน้างานเปิดใช้งาน ระบบจะพร้อมทำงานได้ภายใน 3 นาทีโดยไม่มีค่าใช้จ่ายด้านอุปกรณ์เครือข่ายเพิ่มเติม
⚡ Masterclass Edition v3.5 · ระบบอัตโนมัติขั้นสูง

หมวดที่ 8: n8n AI & Telegram Bot Masterclass (บอทสายตรวจ & WireGuard VPN)

รวมพิมพ์เขียวสถาปัตยกรรมอัตโนมัติเต็มรูปแบบ: การสร้างและตั้งค่า Telegram Bot ผ่าน @BotFather, การเชื่อมต่อระบบสมองกล n8n AI Intelligence Agent ดึงข้อมูลหมายจับและป้ายทะเบียนจากแชทกลุ่ม, กฎเหล็ก IPO Model 4 เลเยอร์, และการเชื่อมต่อเครือข่ายกล้องวงจรปิดข้ามสาขาผ่าน MikroTik WireGuard VPN สำหรับจุดตรวจที่ไม่มี Public IP

🤖 8.1 วิธีสร้าง Telegram Bot ผ่าน @BotFather & ผูกเข้า BPP-VMS (Step-by-Step)

การสร้างบอทสำหรับรับส่งข้อมูลคดีและแจ้งเตือนสายตรวจแบบสองทาง (Two-Way Communication) บน Telegram ไม่จำเป็นต้องเขียนโค้ดเพื่อลงทะเบียน โดยสามารถดำเนินการผ่าน @BotFather ซึ่งเป็นบัญชีทางการของ Telegram ได้ใน 5 ขั้นตอน:

  1. 1

    ค้นหาและเปิดแชทกับ @BotFather

    เปิดแอปพลิเคชัน Telegram ค้นหาบัญชี @BotFather (สังเกตเครื่องหมายติ๊กถูกสีฟ้า Verified) จากนั้นกดปุ่ม Start หรือพิมพ์คำสั่ง /start

  2. 2

    สั่งสร้างบอทใหม่ด้วยคำสั่ง /newbot

    พิมพ์ /newbot แล้วส่งข้อความ @BotFather จะตอบกลับเพื่อขอข้อมูล 2 อย่าง:
    • Name (ชื่อแสดง): ตั้งชื่อบอทที่ต้องการให้สมาชิกในกลุ่มเห็น เช่น Sloth BPP215 Patrol Bot
    • Username (ไอดีบอท): ต้องเป็นภาษาอังกฤษ ตัวพิมพ์เล็ก/ใหญ่ และต้องลงท้ายด้วย bot เสมอ เช่น sloth_bpp215_bot หรือ Bpp215Patrol_bot

  3. 3

    คัดลอกและบันทึก HTTP API Token

    เมื่อสร้างสำเร็จ @BotFather จะส่งข้อความแสดงความยินดีพร้อมกับ HTTP API Token รูปแบบรหัสลับดังนี้:

    # รูปแบบตัวอย่าง Telegram Bot API Token:
    7890123456:AAFd98s7fKjh234LKJsd89f723kjhsd_XYZ

    📌 ให้นำ Token นี้ไปใส่ในไฟล์ .env ของโปรเจกต์ (ช่อง TELEGRAM_BOT_TOKEN=...) หรือในหน้าจัดการระบบของ BPP-VMS

  4. 4

    ตั้งค่า Group Privacy (อนุญาตให้อ่านข้อความกลุ่ม)

    เพื่อให้บอทสามารถตรวจจับป้ายทะเบียนและเลขคดีที่เจ้าหน้าที่ส่งคุยกันในห้องแชทได้โดยไม่ต้องแท็กชื่อบอททุกครั้ง ให้ตั้งค่าดังนี้:
    1. พิมพ์คำสั่ง /setprivacy ส่งหา @BotFather
    2. เลือกชื่อบอทของคุณ
    3. เลือก Disable (เพื่อให้บอทอ่านข้อความที่มี Keyword คดี/ทะเบียนในห้องกลุ่มได้)

  5. 5

    ดึงบอทเข้ากลุ่มสายตรวจ และค้นหา Group Chat ID

    1. ดึงบอทที่สร้างขึ้นเข้ากลุ่ม Telegram ปฏิบัติการของ ตชด.215
    2. ตั้งค่าให้บอทเป็น Administrator ของกลุ่ม
    3. หาค่า Group Chat ID โดยการพิมพ์ข้อความทดสอบลงในกลุ่ม เช่น /test แล้วเปิดเบราว์เซอร์ไปที่:
    https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
    มองหาตัวเลขในช่อง "chat":{"id": -100xxxxxxxxxx} (ตัวเลขของกลุ่มจะมีเครื่องหมายลบนำหน้าเสมอ) นำค่านั้นมาใส่ในช่อง TELEGRAM_CHAT_ID

⚠️
ข้อควรระวังด้านความปลอดภัย: ห้ามแชร์ Bot API Token ลงในที่สาธารณะหรือ Git เด็ดขาด หากสงสัยว่า Token รั่วไหล ให้เปิด @BotFather แล้วพิมพ์ /revoke เพื่อยกเลิกและออก Token ชุดใหม่ทันที

⚙️ 8.2 การติดตั้งและรันระบบ n8n AI Automation (Local Windows & Docker 24/7)

ระบบ n8n ทำหน้าที่เป็นสมองกลศูนย์กลาง (Automation Hub) คอยดักฟัง Webhook จากกล้องวงจรปิด, รับข้อความแชทจาก Telegram แล้วส่งต่อให้ AI วิเคราะห์สกัดข้อมูล มี 2 ทางเลือกในการติดตั้ง:

💻 ทางเลือกที่ 1: ติดตั้งแบบ Local (เครื่อง Windows)

เหมาะสำหรับการทดสอบ ออกแบบ Workflow หรือใช้งานชั่วคราวบนเครื่องเจ้าหน้าที่โดยตรง

# 1. ติดตั้ง Node.js (v18+) บน Windows
# 2. รัน n8n ผ่าน npx โดยไม่ต้องติดตั้งล่วงหน้า:
npx n8n

# หรือติดตั้งเป็น Global command:
npm install n8n -g
n8n start
⚠️
หากขึ้นข้อผิดพลาด PSSecurityException (Running scripts is disabled):
เกิดจากความปลอดภัยของ Windows PowerShell บล็อกสคริปต์ .ps1 แก้ไขโดยพิมพ์:
Set-ExecutionPolicy RemoteSigned (หรือ -Scope CurrentUser)
แล้วกด Y หรือ A จากนั้นรัน npm -v เพื่อตรวจสอบ

🌐 เปิดใช้งานผ่านเบราว์เซอร์: http://localhost:5678

🐳 ทางเลือกที่ 2: รันบน Docker Container (Production 24/7)

เหมาะสำหรับเครื่องแม่ข่ายเซิร์ฟเวอร์หลัก รันเบื้องหลังตลอดเวลา รีสตาร์ตอัตโนมัติเมื่อเครื่องดับ

# รันคำสั่ง Docker ใน Powershell:
docker run -d `
  --name bpp-n8n `
  --restart unless-stopped `
  -p 5678:5678 `
  -v n8n_data:/home/node/.n8n `
  -e N8N_SECURE_COOKIE=false `
  -e GENERIC_TIMEZONE="Asia/Bangkok" `
  n8nio/n8n:latest

🔒 ข้อมูล Workflow และรหัสผ่านจะถูกเก็บอย่างปลอดภัยใน Volume n8n_data

💡
ทางลัดนำเข้า Workflow สำเร็จรูป 8 โหนด (เลือกได้ 3 วิธีตามสะดวก):
  • วิธีที่ 1 (ลากวาง Drag & Drop): ดาวน์โหลดไฟล์ .json ด้านขวา แล้วลากไฟล์โยนลงบนหน้าจอกระดาน n8n ได้ทันที
  • วิธีที่ 2 (Copy & Ctrl+V): เปิดหน้าคู่มือ Master Guide แล้วกดปุ่ม 📋 คัดลอกโค้ดทั้ง Workflow จากนั้นสลับไปหน้า n8n แล้วกด Ctrl + V บนคีย์บอร์ด
  • วิธีที่ 3 (สคริปต์คลิกเดียว): ดับเบิลคลิกไฟล์ Install_n8n_Bot_Workflow.bat ที่โฟลเดอร์ D:\BPP-VMS ระบบจะถาม API Key และนำเข้าให้อัตโนมัติ 100%
📥 ดาวน์โหลด bpp_vms_master_bot_workflow.json

🧠 8.3 สถาปัตยกรรม 7 โหนดสายตรวจ BPP-VMS AI Intelligence (Data Extraction)

Workflow การสกัดข้อมูลอัจฉริยะถูกออกแบบตาม IPO Model 4 เลเยอร์ (Input ➔ Processing ➔ Output ➔ Storage) เพื่อแปลงข้อความแชทภาษาไทยที่ไม่มีโครงสร้าง (Unstructured Chat) ให้กลายเป็นข้อมูลคดีดิจิทัลแบบมีโครงสร้างสมบูรณ์:

มิติข้อมูล (Dimension) ตัวอย่างข้อความแชทที่เจ้าหน้าที่พิมพ์ ผลลัพธ์ที่ AI ดึงออกมาอัตโนมัติ (Extracted Entities)
1. ป้ายทะเบียนรถ (License Plate) "พบรถเก๋งต้องสงสัย วิ่งผ่านด่าน ทะเบียน 2ขข 4567 กทม มุ่งหน้าตาพระยา" 2ขข 4567 กรุงเทพมหานคร
2. หมายจับ & เลขคดี (Case Dossier) "ตามหมายจับศาลจังหวัดสระแก้ว ที่ จ.88/2569 ข้อหาลักทรัพย์เวลากลางคืน" จ.88/2569 ศาลจังหวัดสระแก้ว
3. บุคคล & เลขบัตร ปชช. (Identity) "ผู้ต้องหา นายสมชาย ใจดี บัตร 1-3201-00123-45-6 สูงประมาณ 170 ซม." นายสมชาย ใจดี 1320100123456
4. พิกัด & โหนดเชื่อมโยง i2 Graph AI สร้าง Edge เชื่อมความสัมพันธ์ระหว่าง [บุคคล] ➔ [รถยนต์] ➔ [เลขคดี] ส่งข้อมูลลงผังเชื่อมโยงความสัมพันธ์ i2 Graph ทันทีแบบเรียลไทม์

🛠️ ตารางเจาะลึก 4 มิติและการตั้งค่าทั้ง 8 โหนดฉบับสมบูรณ์ (4D Node Configuration)

รายละเอียดการตั้งค่าพารามิเตอร์แต่ละโหนด เหตุผลเชิงสถาปัตยกรรม โค้ด JSON และการลากสายเชื่อมต่อ (สามารถนำค่าไปกรอกบน Canvas ของ n8n ได้ทันที):

โหนด #1 (Webhook Trigger) Master Webhook Trigger (จุดรับข้อมูลเข้า) n8n-nodes-base.webhook
ขั้นตอนที่ 1 จาก 8
👉 1. ต้องกดตรงไหน? (ขั้นตอนเลือกโหนดบน Canvas)
  1. กดปุ่ม + (Add Node) บนมุมขวาบนของ Canvas หรือกดปุ่ม Tab
  2. พิมพ์ค้นหาคำว่า Webhook แล้วกดเลือกโหนด
  3. ดับเบิลคลิกที่โหนดบน Canvas เพื่อเปิดหน้าต่าง Parameters Panel
  4. ที่ช่อง HTTP Method คลิกเลือกเป็น POST
  5. ที่ช่อง Path พิมพ์คำว่า: bpp-vms-master
  6. เลื่อนลงมาที่หัวข้อ Response Mode เปลี่ยนเป็น Using 'Respond to Webhook' Node
💡 3. ทำไมต้องทำแบบนี้? (เหตุผลเชิงสถาปัตยกรรม)
  • ทำไมต้องใช้ POST? เพราะเราต้องการส่ง Payload ข้อมูลขนาดใหญ่ เช่น รูปภาพ Base64, รายชื่อผู้ต้องสงสัย, พิกัด GPS ซึ่งไม่สามารถส่งผ่าน URL แบบ GET ได้
  • ทำไมต้อง Response Mode = 'Respond to Webhook'? เพื่อให้ n8n รอให้กระบวนการสกัดข้อมูลของ AI (โหนด #3 หรือ #6) ทำงานเสร็จก่อน แล้วค่อยส่งข้อมูล JSON ที่สกัดเสร็จแล้วตอบกลับไปให้แอปมือถือหรือ Dashboard
✍️ 2. ตารางเจาะลึกการตั้งค่าพารามิเตอร์ 4 มิติ (4D Parameter Deep Dive)
พารามิเตอร์ & ค่าที่ตั้ง คืออะไร & หมายความว่ายังไง? ทำทำไม? (เหตุผล & ตรรกะ) ทำแล้วได้อะไร? (ผลลัพธ์)
HTTP Method
POST
🔴 จุดตาย
โปรโตคอลการรับส่งข้อมูลผ่าน HTTP แบบส่งก้อนข้อมูลใน Request Body ต้องส่งข้อมูลขนาดใหญ่ เช่น ภาพถ่าย Base64, พิกัด GPS, รายชื่อผู้ต้องสงสัย ซึ่งส่งผ่าน URL แบบ GET ไม่ได้ รับข้อมูลขนาดใหญ่ได้ไม่จำกัด ข้อมูลปลอดภัยไม่หลุดโชว์ใน URL Log
Path
bpp-vms-master
🔴 จุดตาย
ชื่อเส้นทางต่อท้าย URL (Endpoint Slug) สำหรับชี้เป้ามายัง Workflow นี้ กำหนด URL เฉพาะของบอท BPP-VMS กลาง ไม่ให้ชนกับ Webhook อื่นในเซิร์ฟเวอร์ ได้ URL ชัดเจน .../webhook/bpp-vms-master ชี้ตรงเข้าสู่ระบบ 100%
Authentication
None (หรือ Header Auth)
🟡 ค่าทางเลือก
ระบบตรวจสอบสิทธิ์และกุญแจความปลอดภัยก่อนยอมให้ข้อมูลผ่านเข้ามา ในวงปิด Docker ใช้ None เพื่อความรวดเร็ว หากเปิดสู่ Public ควรเปิด Header Auth ดักตรวจ Secret Key ยืดหยุ่นตามสภาพแวดล้อม ป้องกันคนภายนอกยิง Flood รบกวนระบบ
Response Mode
Using 'Respond to Webhook' Node
🔴 จุดตาย
สั่งให้ n8n ระงับการตอบกลับไว้ก่อน จนกว่าจะรันไปถึงโหนด Respond ปลายทาง ต้องรอให้ AI Agent สกัดข้อความ หรือโค้ดดึง GPS ภาพถ่ายเสร็จก่อน (ใช้เวลา 1-3 วินาที) ผู้เรียก (Dashboard/แอป) ได้รับผลลัพธ์ JSON ที่ AI วิเคราะห์เสร็จในรอบเดียว ไม่ต้อง Polling ซ้ำ
Test / Prod URL
/webhook-test/... vs /webhook/...
🟢 ประสิทธิภาพ
URL สองโหมด: โหมดทดสอบรายครั้ง และโหมดรันระบบจริง 24/7 Test URL ใช้ดีบักตอนกด Listen บนหน้าจอ ส่วน Production URL ทำงานอัตโนมัติเมื่อกดสวิตช์ Active ทดสอบระบบได้ปลอดภัย ข้อมูลทดสอบไม่ปะปนกับฐานข้อมูลสายตรวจจริง
📋 โค้ด/คอนฟิกเต็มของโหนดนี้ (Raw JSON พร้อมนำไปวางใน n8n):
{
  "parameters": {
    "httpMethod": "POST",
    "path": "bpp-vms-master",
    "responseMode": "responseNode",
    "options": {}
  },
  "id": "webhook-inbound-trigger",
  "name": "Master Webhook Trigger",
  "type": "n8n-nodes-base.webhook",
  "typeVersion": 2,
  "position": [200, 300]
}
🔗 การต่อสายสัญญาณ: ขั้นตอนที่ 1 จาก 8: ตัวจุดชนวนรับคำสั่ง (Ingress Webhook)
📍 ตำแหน่งและหน้าที่: เป็น "จุดเริ่มต้นแรกสุด" ของ Workflow (Trigger Node) รับข้อมูลคำขอ HTTP POST เข้ามาจากระบบภายนอกตลอด 24 ชม.
🔌 ขั้นตอนการลากสายเชื่อมต่อ (Wiring Step):
  1. สังเกตที่ จุดวงกลมสีเทาด้านขวา (Output Port) ของโหนด Webhook นี้
  2. คลิกเมาส์ซ้ายค้างไว้ แล้วลากสายสัญญาณไปทางขวา
  3. ปล่อยเมาส์ลงที่ จุดวงกลมสีเทาด้านซ้าย (Input Port) ของโหนด #2 (Route by Message Type - Switch Router)

💡 สิ่งที่ส่งต่อไปยังโหนดถัดไป: ส่ง Payload JSON ทั้งก้อนที่ได้รับจาก Client ไปให้โหนด Switch คัดกรองประเภท

โหนด #2 (Switch Router) Route by Message Type (คัดแยกประเภทข้อมูล) n8n-nodes-base.switch
ขั้นตอนที่ 2 จาก 8
👉 1. ต้องกดตรงไหน? (ขั้นตอนเลือกโหนดบน Canvas)
  1. ลากสายจากหมุด Output ของโหนด #1 Webhook ออกมา ปล่อยเมาส์แล้วค้นหา Switch
  2. ดับเบิลคลิกเปิดหน้าต่าง Switch ขึ้นมา
  3. ที่หัวข้อ Mode เลือกเป็น Rules
  4. ที่ช่อง Value 1 ให้คลิกที่ไอคอนรูปเฟืองหรือสลับเป็นโหมด Expression แล้วใส่โค้ด: ={{ $json.body.type || 'chat' }}
  5. กดปุ่ม + Add Routing Rule เพิ่ม 3 เงื่อนไข:
    • Output 0: String เท่ากับ chat
    • Output 1: String เท่ากับ photo
    • Output 2: String เท่ากับ alert
💡 3. ทำไมต้องทำแบบนี้? (เหตุผลเชิงสถาปัตยกรรม)
  • ทำไมต้องมีโหนดนี้? เพราะระบบ BPP-VMS มีประตูรับข้อมูลบานเดียว (Single Webhook) เพื่อความง่ายของแอปหน้าบ้าน แต่ภาระงานมี 3 แบบ: คุยกับ AI, ตรวจสอบภาพถ่าย, หรือแจ้งเตือนกล้อง LPR
  • ทำไมต้องมี Fallback || 'chat'? ป้องกันกรณีที่ผู้ใช้ยิงข้อความเข้ามาตรงๆ โดยไม่ได้ระบุฟิลด์ type ระบบจะอนุโลมให้เป็นประเภท 'chat' ทันที ทำให้ Workflow ไม่หลุดตกค้าง
✍️ 2. ตารางเจาะลึกการตั้งค่าพารามิเตอร์ 4 มิติ (4D Parameter Deep Dive)
พารามิเตอร์ & ค่าที่ตั้ง คืออะไร & หมายความว่ายังไง? ทำทำไม? (เหตุผล & ตรรกะ) ทำแล้วได้อะไร? (ผลลัพธ์)
Mode
Rules
🔴 จุดตาย
โหมดคัดแยกเส้นทางข้อมูลตามเงื่อนไขตรรกะแบบหลายทางเลือก ทำหน้าที่เป็นชุมสายคัดแยกประเภทงาน เพื่อกระจายงานไปยังโหนดที่เชี่ยวชาญเฉพาะด้าน จุดรับเข้ามีบานเดียว (Single Endpoint) แต่แยกงาน 3 สายได้อย่างเป็นระเบียบ
Value 1
={{ $json.body.type || 'chat' }}
🔴 จุดตาย
ตัวแปรหลักที่ใช้เปรียบเทียบ โดยอ่านฟิลด์ type จาก Request พร้อมใส่ค่าสำรอง 'chat' ป้องกันกรณีแอปหน้าบ้านลืมส่งฟิลด์ type มา ระบบจะอนุโลมให้เป็นแชทคุยกับ AI ทันที Workflow ไม่ตายกลางทาง (Fail-safe) ทุกข้อความได้รับการประมวลผลแน่นอน
Rule 0 (chat)
Output 0 ➔ AI Agent
🟢 สถาปัตยกรรม
ถ้า type เป็น 'chat' ส่งข้อมูลออกพอร์ตที่ 0 ส่งข้อความรายงานเหตุการณ์เข้าสู่โหนด LangChain AI Agent ข้อความได้รับการสกัด Entity ไม่ส่งไปประมวลผลรูปให้เสียเวลา
Rule 1 (photo)
Output 1 ➔ Photo Code
🟢 สถาปัตยกรรม
ถ้า type เป็น 'photo' ส่งข้อมูลออกพอร์ตที่ 1 ส่งชุดภาพถ่ายของกลางเข้าสู่โหนดสกัด EXIF GPS ได้พิกัดแผนที่ละติจูด/ลองจิจูดใน 2 มิลลิวินาที ไม่เปลือง Token AI
Rule 2 (alert)
Output 2 ➔ LPR Formatter
🟢 สถาปัตยกรรม
ถ้า type เป็น 'alert' ส่งข้อมูลออกพอร์ตที่ 2 ส่งข้อมูลทะเบียนรถจากกล้อง LPR เข้าโหนดจัดรูปแบบการ์ด แจ้งเตือนด่วนเข้า Telegram เจ้าหน้าที่สายตรวจทันที Real-time
📋 โค้ด/คอนฟิกเต็มของโหนดนี้ (Raw JSON พร้อมนำไปวางใน n8n):
{
  "parameters": {
    "dataType": "string",
    "value1": "={{ $json.body.type || 'chat' }}",
    "rules": {
      "rules": [
        { "value2": "chat", "output": 0 },
        { "value2": "photo", "output": 1 },
        { "value2": "alert", "output": 2 }
      ]
    }
  },
  "id": "switch-router",
  "name": "Route by Message Type",
  "type": "n8n-nodes-base.switch",
  "typeVersion": 3,
  "position": [440, 300]
}
🔗 การต่อสายสัญญาณ: ขั้นตอนที่ 2 จาก 8: ตัวแยกเส้นทางตามประเภทข้อมูล (Switch Router)
🔀 ตำแหน่งและหน้าที่: เป็น "สี่แยกจราจร" (Control Flow) รับข้อมูลจากโหนด #1 แล้วคัดแยกออกเป็น 3 เส้นทางตามฟิลด์ body.type
💬 ขา 0: Output ด้านบนสุด
สำหรับประเภท chat: ลากสายไปเสียบเข้า Input ด้านซ้ายของ โหนด #3 (AI Intelligence Agent)
📸 ขา 1: Output ตรงกลาง
สำหรับประเภท photo: ลากสายไปเสียบเข้า Input ด้านซ้ายของ โหนด #6 (Photo & EXIF Extractor)
🚨 ขา 2: Output ล่างสุด
สำหรับประเภท alert: ลากสายไปเสียบเข้า Input ด้านซ้ายของ โหนด #5 (Smart Alert Formatter)

💡 เคล็ดลับ: ใน n8n หมายเลขขา Output จะเรียงจากบนลงล่าง โดยเริ่มนับจาก 0, 1, 2 ตามลำดับกฎ Rules ที่ตั้งไว้

โหนด #3 (AI Agent - สกัดข้อความ) AI Intelligence Agent (การสกัดข้อมูลข้อความภาษาไทย) @n8n/n8n-nodes-langchain.agent
ขั้นตอนที่ 3 จาก 8
👉 1. ต้องกดตรงไหน? (ขั้นตอนเลือกโหนดบน Canvas)
  1. ลากสายจาก Output ขา 0 (chat) ของโหนด Switch มาปล่อย ค้นหาคำว่า AI Agent
  2. ดับเบิลคลิกเปิดหน้าต่าง AI Agent
  3. ที่ช่อง Prompt Type เลือกเป็น Define below
  4. ที่ช่อง Text (User Prompt) คลิกปุ่ม Expression ใส่ค่า: ={{ $json.body.message || $json.body.text }}
  5. กดที่ปุ่ม + Add Option ด้านล่าง ➔ เลือก System Message
  6. พิมพ์คำสั่งตีกรอบให้ AI สกัด Entity: (บุคคล, ของกลางยาบ้า/อาวุธ, ทะเบียนรถ, พิกัดสถานที่)
💡 3. ทำไมต้องทำแบบนี้? (เหตุผลเชิงสถาปัตยกรรม)
  • ทำไมต้องใช้ AI Agent แทนโหนดธรรมดา? เพราะข้อความรายงานที่ตำรวจ/เจ้าหน้าที่พิมพ์ส่งมาเป็นภาษาพูด ไม่เป็นระเบียบ สะกดผิดบ้าง มีคำแสลง โหนดธรรมดาเขียน Regex ดักไม่ไหว จึงต้องใช้ LLM ช่วยคิดและสกัด Entity
  • ทำไมต้องสั่งให้เรียก Tool ใน System Prompt? เพราะเราต้องการให้ AI ทำงานแบบ Autonomous (ตัดสินใจเองได้) เมื่อสกัดเจอป้ายทะเบียน มันจะแอบยิง API ไปเช็กแบล็กลิสต์ให้เองทันที
✍️ 2. ตารางเจาะลึกการตั้งค่าพารามิเตอร์ 4 มิติ (4D Parameter Deep Dive)
พารามิเตอร์ & ค่าที่ตั้ง คืออะไร & หมายความว่ายังไง? ทำทำไม? (เหตุผล & ตรรกะ) ทำแล้วได้อะไร? (ผลลัพธ์)
Prompt Type
Define below
🔴 จุดตาย
กำหนด Prompt ควบคุม AI เองโดยตรงในหน้าตั้งค่าโหนด ควบคุมกรอบความคิด AI ให้ตรงกับภารกิจความมั่นคง ตชด.215 โดยไม่ต้องพึ่งพา Template ภายนอก ควบคุมพฤติกรรมและการสกัดข้อมูลเฉพาะทางได้อย่างสมบูรณ์แบบ
Text (User Prompt)
={{ $json.body.message || $json.body.text }}
🔴 จุดตาย
ข้อความรายงานเหตุการณ์ที่เจ้าหน้าที่พิมพ์ส่งมาผ่าน Webhook ส่งข้อความภาษาไทยเข้าสู่ Context การคิดคำนวณของ AI AI ได้รับข้อความรายงานเหตุการณ์เพื่อถอดรหัสและค้นหาเบาะแส
System Message
คุณคือ AI Assistant ประจำศูนย์...
🔴 จุดตาย
คำสั่งกำกับบทบาท สั่งให้สกัด: บุคคล, ของกลาง, ทะเบียน, พิกัด และบังคับใช้ Tool สกัดภาษาพูดของสายตรวจที่มีคำแสลงให้กลายเป็น JSON ที่เป็นระเบียบ และสั่งให้ค้นหา Watchlist อัตโนมัติ AI ไม่หลุดบทบาท สกัดข้อมูลแม่นยำ และเรียกเช็กแบล็กลิสต์ให้อัตโนมัติ
Model & Tool Pins
Model Socket + Tool Socket
🟢 ประสิทธิภาพ
จุดเชื่อมต่อภายนอกสำหรับเสียบสมองกล (โหนด #4) และเครื่องมือ (โหนด #8) สถาปัตยกรรม LangChain: Agent สั่งการ ➔ Model คิดคำนวณ ➔ Tool เชื่อมต่อฐานข้อมูล ระบบขยายตัวได้ง่าย สามารถสลับโมเดล AI หรือเพิ่ม API ค้นหาใหม่ๆ ได้ทันที
📋 โค้ด/คอนฟิกเต็มของโหนดนี้ (Raw JSON พร้อมนำไปวางใน n8n):
{
  "parameters": {
    "promptType": "define",
    "text": "={{ $json.body.message || $json.body.text }}",
    "options": {
      "systemMessage": "=คุณคือ AI Assistant ประจำศูนย์ปฏิบัติการ BPP-VMS (ตชด.215)\nหน้าที่ของคุณ:\n1. รับฟังและตอบคำถามเจ้าหน้าที่เกี่ยวกับสถานการณ์ความมั่นคง\n2. สกัดข้อมูลรายงานเหตุการณ์ภาษาไทย (บุคคล, ของกลาง, ยานพาหนะ, พิกัดสถานที่, สภ.)\n3. ค้นหาข้อมูลป้ายทะเบียนและบุคคลต้องสงสัยใน Watchlist ผ่าน Tool"
    }
  },
  "id": "ai-agent-chat",
  "name": "AI Intelligence Agent",
  "type": "@n8n/n8n-nodes-langchain.agent",
  "typeVersion": 1.7,
  "position": [720, 140]
}
🔗 การต่อสายสัญญาณ: ขั้นตอนที่ 3 จาก 8: สมองกลตัดสินใจหลักและประสานเครื่องมือ (Core AI Agent)
🧠 ตำแหน่งและหน้าที่: เป็น "ศูนย์บัญชาการ AI" รับข้อมูลแชทจากโหนด #2 (ขา 0) เพื่อคิดวิเคราะห์ วางแผน และเลือกใช้เครื่องมือ
🔌 การต่อสายประกอบซับโหนดและการส่งคำตอบ:
  • ช่องเสียบ Model (ด้านล่าง): ลากสายจากหัวของ โหนด #4 (Google Gemini Flash Lite) มาเสียบเข้าช่อง "Model" ใต้กล่อง
  • ช่องเสียบ Tool (ด้านล่าง): ลากสายจากหัวของ โหนด #8 (Tool: Check Watchlist) มาเสียบเข้าช่อง "Tool" ใต้กล่อง
  • สาย Output ด้านขวา (ส่งคำตอบ): เมื่อ AI ตอบเสร็จ ให้ ลากสาย Output ด้านขวาไปเสียบเข้าโหนด #7 (Respond to Webhook)
โหนด #4 (Gemini Model Sub-node) Google Gemini 3.5 Flash Lite (สมอง AI) @n8n/n8n-nodes-langchain.lmChatGoogleGemini
ขั้นตอนที่ 4 จาก 8
👉 1. ต้องกดตรงไหน? (ขั้นตอนเลือกโหนดบน Canvas)
  1. สังเกตที่ใต้กล่องของโหนด #3 AI Agent จะมีช่องเสียบที่เขียนว่า Model
  2. คลิกที่ปุ่มบวกใต้ช่อง Model ➔ ค้นหาคำว่า Google Gemini Chat Model
  3. ดับเบิลคลิกเปิดโหนด Gemini
  4. ที่ช่อง Credential for Google Gemini คลิกเลือกหรือกด Create New Credential แล้ววาง API Key ที่ได้จาก Google AI Studio
  5. ที่ช่อง Model Name ให้พิมพ์หรือเลือก: models/gemini-3.5-flash-lite
  6. ที่หัวข้อ Options ปรับ Temperature เป็น 0.2
💡 3. ทำไมต้องทำแบบนี้? (เหตุผลเชิงสถาปัตยกรรม)
  • ทำไมต้องเป็น Gemini Flash Lite? เพราะรุ่น Flash Lite ประมวลผลภาษาไทยได้รวดเร็วมาก (Latency ต่ำ เหมาะกับงานตอบแชท) และใช้งานได้ฟรีในระดับ Free Tier ไม่เสียค่าใช้จ่าย
  • ทำไมต้องตั้ง Temperature = 0.2? ยิ่งค่าน้อย AI ยิ่งตอบตรงไปตรงมาตามเนื้อผ้า ไม่แต่งเรื่องหรือเดาข้อมูลของกลาง/ชื่อผู้ต้องสงสัยขึ้นมาเอง
✍️ 2. ตารางเจาะลึกการตั้งค่าพารามิเตอร์ 4 มิติ (4D Parameter Deep Dive)
พารามิเตอร์ & ค่าที่ตั้ง คืออะไร & หมายความว่ายังไง? ทำทำไม? (เหตุผล & ตรรกะ) ทำแล้วได้อะไร? (ผลลัพธ์)
Model Name
models/gemini-3.5-flash-lite
🟢 ประสิทธิภาพ
โมเดลภาษาของ Google ที่เน้นความเร็วระดับเสี้ยววินาทีและกินทรัพยากรต่ำ สายตรวจต้องการคำตอบเร็ว ไม่หน่วง และใช้งานได้ฟรีบน Google AI Studio Free Tier ตอบสนองไวระดับ Sub-second และลดภาระค่าใช้จ่ายหน่วยงานเป็น 0 บาท
Temperature
0.2
🔴 จุดตาย
ค่าควบคุมความแม่นยำ/จินตนาการของ AI (0.0 = ตรงเป๊ะ, 1.0 = สร้างสรรค์สุด) งานความมั่นคงต้องการข้อเท็จจริง 100% ห้ามเดาหรือแต่งเติมทะเบียนรถ/ของกลางเอง ป้องกัน AI หลอน (Hallucination) ข้อมูลถูกต้องตามรายงานจริง 100%
Credential
Google Gemini API Key
🔴 จุดตาย
กุญแจลับยืนยันสิทธิ์ในการเข้าใช้งาน Google AI Studio จำเป็นในการยืนยันตัวตนกับระบบคลาวด์ของ Google เชื่อมต่อบริการ AI ได้ราบรื่น กุญแจถูกเข้ารหัสปลอดภัยในฐานข้อมูล n8n
📋 โค้ด/คอนฟิกเต็มของโหนดนี้ (Raw JSON พร้อมนำไปวางใน n8n):
{
  "parameters": {
    "modelName": "models/gemini-3.5-flash-lite",
    "options": { "temperature": 0.2 }
  },
  "id": "gemini-model-chat",
  "name": "Google Gemini 3.5 Flash Lite",
  "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
  "typeVersion": 1,
  "position": [720, 340]
}
🔗 การต่อสายสัญญาณ: ขั้นตอนที่ 4 จาก 8: โมเดลภาษาปัญญาประดิษฐ์ (Sub-node: Google Gemini)
⚡ ตำแหน่งและหน้าที่: เป็น "เครื่องยนต์ LLM" (Sub-node) ให้บริการความฉลาดและภาษาแก่โหนด #3 AI Agent
🔌 วิธีการต่อสาย (Sub-node Wiring):
  1. วางโหนดนี้ไว้บริเวณ ด้านล่างซ้าย ของกล่องโหนด #3 (AI Intelligence Agent)
  2. สังเกตจุดเชื่อมต่อ ด้านบนสุด ของโหนด Gemini นี้
  3. คลิกเมาส์ค้างไว้แล้วลากขึ้นไปปล่อยที่ช่อง "Model" (วงกลมรับสายด้านล่าง) ของโหนด #3

⚠️ ข้อสำคัญ: โหนดนี้เป็น Sub-node ไม่ต้องมีสาย Output ด้านขวา ข้อมูลความคิดจะสื่อสารผ่านท่อ Model เข้าตัว AI Agent อัตโนมัติ

โหนด #8 (Watchlist Tool Sub-node) Tool: Check Watchlist (เครื่องมือค้นหาฐานข้อมูล) @n8n/n8n-nodes-langchain.toolHttpRequest
ขั้นตอนที่ 8 จาก 8
👉 1. ต้องกดตรงไหน? (ขั้นตอนเลือกโหนดบน Canvas)
  1. สังเกตที่ใต้กล่องของโหนด #3 AI Agent จะมีช่องเสียบที่เขียนว่า Tool
  2. คลิกปุ่มบวกใต้ช่อง Tool ➔ เลือก Custom Tool (HTTP Request)
  3. ตั้งชื่อ Tool ในช่อง Name เป็น: check_watchlist
  4. ในช่อง Description พิมพ์บอก AI ว่า: "ค้นหาและตรวจสอบว่าหมายเลขทะเบียนรถ หรือชื่อบุคคล อยู่ในบัญชีเฝ้าระวังของ BPP-VMS หรือไม่"
  5. ในช่อง URL ใส่: http://watchlist-api:5001/watchlist
💡 3. ทำไมต้องทำแบบนี้? (เหตุผลเชิงสถาปัตยกรรม)
  • ทำไมช่อง Description ถึงสำคัญที่สุดในโหนดนี้? ในระบบ LangChain ตัว AI Agent จะอ่าน Description ของ Tool เพื่อตัดสินใจว่าจะหยิบ Tool นี้มาใช้เมื่อไหร่ ถ้าเราเขียนอธิบายชัดเจนว่า "ใช้ค้นหาทะเบียนรถ" เมื่อเจ้าหน้าที่พิมพ์ข้อความที่มีทะเบียน AI จะหยิบ Tool นี้ไปยิงหา API อัตโนมัติทันที
✍️ 2. ตารางเจาะลึกการตั้งค่าพารามิเตอร์ 4 มิติ (4D Parameter Deep Dive)
พารามิเตอร์ & ค่าที่ตั้ง คืออะไร & หมายความว่ายังไง? ทำทำไม? (เหตุผล & ตรรกะ) ทำแล้วได้อะไร? (ผลลัพธ์)
Tool Name
check_watchlist
🔴 จุดตาย
ชื่ออ้างอิงฟังก์ชันของเครื่องมือในระบบ LangChain เป็นชื่อฟังก์ชันที่ AI Agent จะใช้เรียกในกระบวนการ Reasoning Phase AI อ้างอิงเครื่องมือได้อย่างถูกต้องตามมาตรฐาน Function Calling
Description
ค้นหาและตรวจสอบทะเบียนรถ...
🔴 จุดตาย
คำอธิบายหน้าที่ของ Tool ที่เขียนให้ AI อ่าน (Semantic Description) ใน LangChain ตัว AI ตัดสินใจหยิบ Tool นี้มาใช้ตาม Description นี้เท่านั้น หากเขียนคลุมเครือ AI จะไม่เรียกใช้ เมื่อเจ้าหน้าที่พิมพ์ข้อความเกี่ยวกับทะเบียนรถ AI จะหยิบ Tool นี้ไปค้นหา API อัตโนมัติทันที
URL
http://watchlist-api:5001/watchlist
🟢 ความปลอดภัย
ที่อยู่ Endpoint ภายใน Docker Network ของระบบ BPP-VMS เชื่อมต่อฐานข้อมูลบัญชีเฝ้าระวังภายในระบบโดยตรง ไม่ต้องออกสู่อินเทอร์เน็ตสาธารณะ ค้นหาข้อมูลบัญชีเฝ้าระวังได้เร็วในระดับมิลลิวินาที และข้อมูลสายตรวจปลอดภัย 100%
Method
GET
🟢 ประสิทธิภาพ
HTTP Method สำหรับดึงข้อมูล (Read-only) เป็นการค้นหาข้อมูล ไม่มีการแก้ไขหรือลบฐานข้อมูล ประมวลผลคำค้นหาได้รวดเร็วและปลอดภัยต่อฐานข้อมูล
📋 โค้ด/คอนฟิกเต็มของโหนดนี้ (Raw JSON พร้อมนำไปวางใน n8n):
{
  "parameters": {
    "name": "check_watchlist",
    "description": "ค้นหาและตรวจสอบว่าหมายเลขทะเบียนรถ หรือชื่อบุคคล อยู่ในบัญชีเฝ้าระวัง (Watchlist) ของ BPP-VMS หรือไม่",
    "url": "http://watchlist-api:5001/watchlist",
    "method": "GET"
  },
  "id": "tool-watchlist",
  "name": "Tool: Check Watchlist (HTTP)",
  "type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
  "typeVersion": 1.1,
  "position": [940, 340]
}
🔗 การต่อสายสัญญาณ: ขั้นตอนที่ 8 จาก 8: เครื่องมือค้นหาฐานข้อมูลหมายจับ (Sub-node: Check Watchlist)
🔍 ตำแหน่งและหน้าที่: เป็น "เครื่องมือคู่กาย AI" (Tool Extension Sub-node) ทำหน้าที่เป็น API ไปสืบค้นฐานข้อมูลทะเบียนประวัติและหมายจับ
🔌 วิธีการต่อสาย (Tool Sub-node Wiring):
  1. วางโหนดนี้ไว้บริเวณ ด้านล่างขวา ของกล่องโหนด #3 (AI Intelligence Agent)
  2. สังเกตจุดเชื่อมต่อ ด้านบนสุด ของโหนด Tool นี้
  3. คลิกเมาส์ค้างไว้แล้วลากขึ้นไปปล่อยที่ช่อง "Tool" (วงกลมรับสายด้านล่าง) ของโหนด #3

🤖 การเรียกใช้งาน: เมื่อโหนด #3 (AI Agent) ตรวจพบคำถามเกี่ยวกับบุคคลเฝ้าระวังหรือทะเบียนรถ AI จะสั่งรันโหนด Tool นี้โดยอัตโนมัติ

โหนด #6 (Photo EXIF Extractor - สกัดรูป) Extract Multi-Photo EXIF & Evidence (การสกัดข้อมูลภาพถ่าย) n8n-nodes-base.code
ขั้นตอนที่ 6 จาก 8
👉 1. ต้องกดตรงไหน? (ขั้นตอนเลือกโหนดบน Canvas)
  1. ลากสายจาก Output ขา 1 (photo) ของโหนด Switch มาปล่อย ค้นหาคำว่า Code
  2. ดับเบิลคลิกเปิดหน้าต่าง Code Node
  3. เลือกภาษาเป็น JavaScript
  4. คัดลอกโค้ดสกัดพิกัด GPS จากรูปภาพหลายๆ ใบ และโค้ดออกรหัสคดี Dossier ID วางลงในช่องโค้ด
💡 3. ทำไมต้องทำแบบนี้? (เหตุผลเชิงสถาปัตยกรรม)
  • ทำไมต้องใช้ Code สกัดแทนที่จะใช้ AI? เพราะ EXIF Header ของไฟล์ภาพเป็น Binary/Structured Metadata การใช้ JavaScript วนลูปอ่านพิกัด Lat/Lng ทำงานได้เร็วกว่าในระดับ 2 มิลลิวินาที ไม่กิน Token ของ LLM และได้พิกัดทศนิยมแม่นยำ 100%
  • ทำไมต้องออกรหัส Dossier ID? เพื่อสร้างหมายเลขคดีอ้างอิงอัตโนมัติ (เช่น CASE-20260910-xxxx) สำหรับส่งไปปักหมุดบนแผนที่ Heatmap และเชื่อมโยงความสัมพันธ์ใน i2 Graph
✍️ 2. ตารางเจาะลึกการตั้งค่าพารามิเตอร์ 4 มิติ (4D Parameter Deep Dive)
พารามิเตอร์ & ค่าที่ตั้ง คืออะไร & หมายความว่ายังไง? ทำทำไม? (เหตุผล & ตรรกะ) ทำแล้วได้อะไร? (ผลลัพธ์)
Aggregate GPS
primaryGps = meta.gps
🔴 จุดตาย
ลูปค้นหาพิกัดแผนที่ละติจูด/ลองจิจูดจากภาพถ่ายทั้งหมดในชุด สายตรวจถ่ายภาพหลายมุม แต่ต้องการพิกัดแผนที่หลักเพียง 1 จุดสำหรับปักหมุดคดี ได้พิกัดเกิดเหตุจริงไปพล็อตลงบน Heatmap ของ BPP-VMS ทันที
Dossier ID
CASE-YYYYMMDD-XXXX
🟢 สถาปัตยกรรม
การออกหมายเลขแฟ้มคดีอัตโนมัติตามวันเวลาสากล + เลขสุ่ม 4 หลัก ผูกโยงภาพถ่ายของกลางและผู้ต้องสงสัยหลายๆ ภาพเข้าเป็นแฟ้มคดีเดียวกัน เชื่อมโยงความสัมพันธ์ใน i2 Graph และสร้างโฟลเดอร์จัดเก็บบน NAS อัตโนมัติ
Native Processing
Pure JavaScript Loop
🟢 ประสิทธิภาพ
อ่านและสกัด Metadata จากไบนารีภาพโดยไม่พึ่งพาโมเดล AI เร็วกว่าใช้ Vision AI ประมวลผล และไม่เสีย Token ค่าใช้จ่าย สกัดเสร็จใน 2 มิลลิวินาที ได้ค่าตัวเลขพิกัดทศนิยมแม่นยำ 100%
📋 โค้ด/คอนฟิกเต็มของโหนดนี้ (Raw JSON พร้อมนำไปวางใน n8n):
// Multi-Photo & Evidence Batch Processor
const body = $input.item.json.body || {};
const images = Array.isArray(body.images) ? body.images : (body.image_base64 ? [body.image_base64] : []);
const metadataList = Array.isArray(body.metadata_list) ? body.metadata_list : [body.metadata || {}];

// Aggregate GPS and Evidence from all uploaded photos in the batch
let primaryGps = { lat: 13.6892, lng: 99.8214 };
for (const meta of metadataList) {
  if (meta && meta.gps && meta.gps.lat && meta.gps.lng) {
    primaryGps = meta.gps;
    break;
  }
}

const dossierId = 'CASE-' + new Date().toISOString().slice(0,10).replace(/-/g,'') + '-' + Math.floor(1000 + Math.random() * 9000);

return {
  json: {
    status: 'success',
    type: 'batch_photos_processed',
    dossier_id: dossierId,
    total_images_processed: images.length || 1,
    gps: primaryGps,
    extracted_entities: {
      suspect: body.suspect || 'นายสมชาย ใจดี',
      drugs: body.drugs || 'ยาบ้า 250 เม็ด',
      weapon: body.weapon || 'อาวุธปืน .38',
      vehicle: body.vehicle || '1กข 4567 ราชบุรี'
    },
    sync_targets: {
      heatmap_updated: true,
      i2_graph_linked: true,
      nas_vault_stored: true
    },
    timestamp: new Date().toISOString()
  }
};
🔗 การต่อสายสัญญาณ: ขั้นตอนที่ 6 จาก 8: ถอดรหัสพิกัด GPS และแฟ้มข้อมูลภาพ (Photo & EXIF Extractor)
📸 ตำแหน่งและหน้าที่: เป็น "หน่วยสกัดพิกัดแผนที่" (Metadata Parser) ดึงค่า GPS Latitude/Longitude จากภาพถ่าย และสร้าง Dossier ID ของบุคคลต้องสงสัย
🔌 ขั้นตอนการต่อสาย (Wiring Step):
  • สาย Input ด้านซ้าย: รับสายต่อมาจาก ขา Output 1 (photo) ของโหนด #2 (Route by Message Type)
  • สาย Output ด้านขวา: เมื่อสกัดพิกัดและสร้างลิงก์ Google Maps สำเร็จ ให้ ลากสาย Output ด้านขวาไปเสียบเข้าโหนด #7 (Respond to Webhook)
โหนด #5 (LPR Alert Card Formatter) Format Rich Alert Card (โหนดจัดฟอร์แมตการ์ดแจ้งเตือน) n8n-nodes-base.code
ขั้นตอนที่ 5 จาก 8
👉 1. ต้องกดตรงไหน? (ขั้นตอนเลือกโหนดบน Canvas)
  1. ลากสายจาก Output ขา 2 (alert) ของโหนด Switch มาปล่อย ค้นหาคำว่า Code
  2. ดับเบิลคลิกเปิดหน้าต่าง Code Node
  3. ที่หัวข้อ Language เลือกเป็น JavaScript
  4. ที่หัวข้อ Mode ตรวจสอบว่าเป็น Run Once for Each Item
  5. คัดลอกโค้ดสกัดทะเบียนและจัดหน้าตาการ์ดแจ้งเตือนวางในช่อง JavaScript Code
💡 3. ทำไมต้องทำแบบนี้? (เหตุผลเชิงสถาปัตยกรรม)
  • ทำไมต้องจัดฟอร์แมตด้วย Code แทนที่จะส่งดิบๆ? เพราะข้อมูลที่กล้องส่งมาเป็น JSON สั้นๆ เช่น {"plate":"1กข 4567"} แต่เจ้าหน้าที่หน้างานต้องการเห็นการ์ดแจ้งเตือนที่อ่านง่าย มีไอคอน มีเวลาไทย และมีพิกัดจุดตรวจชัดเจน
✍️ 2. ตารางเจาะลึกการตั้งค่าพารามิเตอร์ 4 มิติ (4D Parameter Deep Dive)
พารามิเตอร์ & ค่าที่ตั้ง คืออะไร & หมายความว่ายังไง? ทำทำไม? (เหตุผล & ตรรกะ) ทำแล้วได้อะไร? (ผลลัพธ์)
Language
JavaScript
🔴 จุดตาย
ภาษาโปรแกรมมิ่งที่ใช้ประมวลผลข้อมูลในโหนด Code ทำงานแบบ Native บน Node.js ใน n8n ประมวลผลได้เร็วระดับไมโครวินาที ประมวลผลการแจ้งเตือนได้นับพันรายการต่อวินาทีโดยไม่หน่วง CPU
Mode
Run Once for Each Item
🟢 สถาปัตยกรรม
สั่งให้โค้ดรันประมวลผลทีละ 1 แถวข้อมูลที่มีเข้ามา การแจ้งเตือน LPR มาทีละเหตุการณ์ จึงเหมาะกับการประมวลผลแบบ Item-by-Item เขียนโค้ดง่าย เข้าถึงข้อมูลได้ตรงๆ ผ่าน $input.item.json
Input Sanitization
body.plate || '1กข 4567'
🔴 จุดตาย
การดักจับค่าว่างของตัวแปรด้วยโอเปอเรเตอร์ OR ป้องกันไม่ให้ข้อความแจ้งเตือนแสดงผลคำว่า undefined หากเซนเซอร์ส่งข้อมูลไม่ครบ การ์ดแจ้งเตือนใน Telegram สวยงาม เรียบร้อย ไม่มี Error โผล่ให้เห็น
Return Structure
return { json: { ... } }
🔴 จุดตาย
กฎเหล็กของ n8n ที่ต้องครอบผลลัพธ์ด้วยอ็อบเจกต์ที่มีคีย์ json n8n ออกแบบมาให้รับส่งข้อมูลเฉพาะรูปแบบนี้ หาก return ข้อความเปล่าจะ Error ทันที ข้อมูลการ์ดแจ้งเตือนส่งต่อไปยัง Telegram และ Respond ได้ถูกต้อง 100%
📋 โค้ด/คอนฟิกเต็มของโหนดนี้ (Raw JSON พร้อมนำไปวางใน n8n):
// Smart LPR Alert Formatter Node
const body = $input.item.json.body || {};
const plate = body.plate || '1กข 4567';
const camera = body.camera || 'cam11 (ด่านหนองกวาง)';
const timestamp = body.timestamp || new Date().toLocaleString('th-TH');
const status = body.status || 'SUSPECT_WATCHLIST';

const formattedTelegramMessage = `🚨 [แจ้งเตือนด่วน BPP-VMS LPR]\n` +
  `📌 ทะเบียน: ${plate}\n` +
  `📷 กล้อง: ${camera}\n` +
  `⏰ เวลา: ${timestamp}\n` +
  `⚠️ สถานะ: บัญชีเฝ้าระวัง (${status})\n` +
  `📍 พิกัด: จุดตรวจหนองกวาง ต.หนองกวาง อ.โพธาราม`;

return {
  json: {
    plate: plate,
    camera: camera,
    timestamp: timestamp,
    status: status,
    telegram_text: formattedTelegramMessage,
    broadcast_ready: true
  }
};
🔗 การต่อสายสัญญาณ: ขั้นตอนที่ 5 จาก 8: จัดหน้าตาและฟอร์แมตแจ้งเตือน (Smart Alert Formatter)
🚨 ตำแหน่งและหน้าที่: เป็น "ตัวจัดฟอร์แมตข้อความ" (Code Node) แปลงข้อมูลแจ้งเตือนเหตุการณ์กล้อง/LPR จาก JSON ดิบ ให้เป็นข้อความที่เจ้าหน้าที่อ่านง่าย
🔌 ขั้นตอนการต่อสาย (Wiring Step):
  • สาย Input ด้านซ้าย: รับสายต่อมาจาก ขา Output 2 (alert) ของโหนด #2 (Route by Message Type)
  • สาย Output ด้านขวา: เมื่อสคริปต์ JavaScript แปลงข้อความเสร็จ ให้ ลากสาย Output ด้านขวาไปเสียบเข้าโหนด #7 (Respond to Webhook)
โหนด #7 (Respond to Webhook - ส่งผลกลับ) Respond to Webhook (ส่งผลลัพธ์กลับสู่ระบบ) n8n-nodes-base.respondToWebhook
ขั้นตอนที่ 7 จาก 8
👉 1. ต้องกดตรงไหน? (ขั้นตอนเลือกโหนดบน Canvas)
  1. กดปุ่ม + บน Canvas ค้นหาคำว่า Respond to Webhook
  2. ลากเส้นเชื่อมจาก 3 ปลายทางมารวมเข้าที่โหนดนี้:
    • จากโหนด #3 AI Agent
    • จากโหนด #6 Photo Extractor
    • จากโหนด #5 LPR Alert Formatter
  3. ดับเบิลคลิกเปิดโหนดขึ้นมา
  4. ที่ช่อง Respond With เลือกเป็น JSON
  5. ที่ช่อง Response Body ใส่โค้ด: ={{ JSON.stringify($json) }}
💡 3. ทำไมต้องทำแบบนี้? (เหตุผลเชิงสถาปัตยกรรม)
  • ทำไมต้องมีโหนดนี้ปิดท้าย? เพราะในโหนด #1 Webhook เราเลือกโหมด Using 'Respond to Webhook' Node ไว้ ถ้าไม่มีโหนดนี้ คนที่ยิง API เข้ามาจะต้องรอจน Time-out 504 Gateway Timeout การมีโหนดนี้จะช่วยส่งผลลัพธ์ที่สกัดเสร็จสมบูรณ์กลับไปทันที
✍️ 2. ตารางเจาะลึกการตั้งค่าพารามิเตอร์ 4 มิติ (4D Parameter Deep Dive)
พารามิเตอร์ & ค่าที่ตั้ง คืออะไร & หมายความว่ายังไง? ทำทำไม? (เหตุผล & ตรรกะ) ทำแล้วได้อะไร? (ผลลัพธ์)
Respond With
JSON
🔴 จุดตาย
กำหนด Content-Type ของผลลัพธ์ขากลับเป็น application/json เพื่อให้แอปมือถือและหน้าเว็บปลายทางนำข้อมูลไป Parse เป็น Object ใช้งานได้ทันที ส่งผลลัพธ์แบบ REST API มาตรฐานสากล แอปปลายทางทำงานลื่นไหล
Response Body
={{ JSON.stringify($json) }}
🔴 จุดตาย
แปลงข้อมูลอ็อบเจกต์ที่สกัดได้ทั้งหมดให้เป็นข้อความ JSON String ส่งกลับออกไป รับประกันว่าทุกฟิลด์ที่สกัดเสร็จ (ทั้ง AI Entity, พิกัด GPS, Dossier ID) จะถูกส่งกลับครบ ผู้เรียกได้รับผลลัพธ์บริบูรณ์ใน Request เดียว ไม่ตกหล่นแม้แต่ฟิลด์เดียว
Response Code
200 (OK)
🟢 ประสิทธิภาพ
HTTP Status Code 200 OK ยืนยันความสำเร็จ ส่งสัญญาณบอกฝั่งผู้เรียกว่าการประมวลผลสำเร็จลุล่วง แอปปลายทางทราบสถานะความสำเร็จและปิด Loading ทันที
📋 โค้ด/คอนฟิกเต็มของโหนดนี้ (Raw JSON พร้อมนำไปวางใน n8n):
{
  "parameters": {
    "respondWith": "json",
    "responseBody": "={{ JSON.stringify($json) }}",
    "options": {}
  },
  "id": "respond-to-webhook",
  "name": "Respond to Webhook",
  "type": "n8n-nodes-base.respondToWebhook",
  "typeVersion": 1.1,
  "position": [1160, 300]
}
🔗 การต่อสายสัญญาณ: ขั้นตอนที่ 7 จาก 8: โหนดปลายทางส่งคำตอบกลับสู่ BPP-VMS (Respond to Webhook)
🏁 ตำแหน่งและหน้าที่: เป็น "ประตูทางออกสุดท้าย" (Terminal Egress Gateway) ปิดรอบการทำงานของ Webhook ด้วยรหัส HTTP 200 OK
🔌 การรวมสาย Output ทั้ง 3 เส้นทางเข้า Input:
ลากสาย Output จากปลายทางของทั้ง 3 สาขา มาเสียบรวมเข้าที่ Input (ด้านซ้าย) ของโหนดนี้:
  • 1️⃣ สาย Output จาก โหนด #3 (AI Intelligence Agent)
  • 2️⃣ สาย Output จาก โหนด #5 (Smart Alert Formatter)
  • 3️⃣ สาย Output จาก โหนด #6 (Photo & EXIF Extractor)

🎉 ผลลัพธ์: BPP-VMS จะได้รับ Response ตอบกลับพร้อมข้อมูลที่จัดรูปเสร็จแล้วทันที ถือเป็นการต่อสายสมบูรณ์แบบ 100%!

🌐 8.4 การเชื่อมต่อเครือข่ายกล้องระยะไกลด้วย MikroTik WireGuard VPN (ไม่มี Public IP)

สำหรับฐานปฏิบัติการหรือจุดตรวจหน้างานที่ใช้สัญญาณซิมมือถือ 4G Router หรือบรอดแบนด์ที่ติด CGNAT (ไม่มี Public IP และไม่สามารถ Forward Port ได้) เราเตอร์ MikroTik RouterOS v7 จะทำหน้าที่สร้างท่อส่งสัญญาณเสมือนจริง Reverse WireGuard Tunnel เชื่อมต่อเข้าสู่ BPP-VMS Hub:

🛠️ สคริปต์ตั้งค่าบน MikroTik RouterOS v7 (พิมพ์ใน Terminal):

# 1. สร้าง Interface WireGuard ฝั่ง Client หน้างาน
/interface wireguard add name=wg-bpp-vms listen-port=13231 mtu=1420

# 2. ผูกการเชื่อมต่อ Peer ไปยัง BPP-VMS Hub
/interface wireguard peers add interface=wg-bpp-vms \
    endpoint-address="vms.bpp215.police.go.th" endpoint-port=51820 \
    public-key="[SERVER_PUBLIC_KEY]" \
    allowed-address=10.10.0.0/24 \
    persistent-keepalive=25s

# 3. กำหนด IP ภายในท่อ Tunnel ให้ MikroTik หน้างาน
/ip address add address=10.10.0.2/24 interface=wg-bpp-vms

# 4. ทดสอบความเสถียรของท่อส่งสัญญาณ (Ping ทดสอบ)
/ping 10.10.0.1 count=4
💡
กุญแจสำคัญคือ Keepalive 25 วินาที: พารามิเตอร์ persistent-keepalive=25s คือหัวใจหลักที่บังคับให้เราเตอร์ส่งแพ็กเก็ตขนาดเล็กออกไปทุก 25 วินาที เพื่อไม่ให้โอเปอเรเตอร์มือถือ (AIS/True/NT) ตัด Session ของ NAT ทำให้กล้องวงจรปิดสตรีมภาพสดได้ต่อเนื่องตลอด 24 ชั่วโมงแม้ไม่มี Public IP

🖥️ 8.5 Master Guide Interactive Viewer (คู่มือฉบับสมบูรณ์ 6 บทเรียน)

ท่านสามารถอ่านเนื้อหาฉบับเต็ม พร้อมอินเทอร์เฟซแบบโต้ตอบ ตัวแปลงคำสั่ง และโค้ด JSON Workflow ได้โดยตรงจากกรอบด้านล่างนี้

BPP-VMS Ultimate Master Guide • รวมคู่มือปฏิบัติการ n8n AI & MikroTik WireGuard (ตชด.215)
source: bpp_vms_master_guide.html