
การออกแบบ Threshold Alert สำหรับ IoT Sensor สำหรับระบบแจ้งเตือนฝุ่น PM2.5 ผ่าน Telegram
ในยุคที่ค่าฝุ่น PM2.5 กลายเป็นปัญหาสุขภาพระยะยาว การมีระบบตรวจวัดที่แม่นยำเพียงอย่างเดียวอาจไม่พอ แต่ "การแจ้งเตือนที่มีประสิทธิภาพ" คือหัวใจสำคัญที่จะช่วยให้เราป้องกันตัวเองได้ทันท่วงที บทความนี้จะพาคุณไปเจาะลึกการสร้างระบบแจ้งเตือนผ่าน Telegram การตั้งค่า Threshold (จุดตัดการเตือน) และเทคนิคการลด Notification Spam เพื่อให้ระบบใช้งานได้จริงในชีวิตประจำวัน
บทความที่เกี่บวข้อง
1. ทำไมต้อง Telegram?
สำหรับการทำ IoT Notification ตัว Telegram มีข้อดีที่เหนือกว่าแพลตฟอร์มอื่นในหลายด้าน:
- API ฟรีและง่าย: Telegram Bot API ไม่มีค่าใช้จ่ายและตั้งค่าได้รวดเร็ว
- Customization: สามารถส่งข้อความพร้อมฟอร์แมต HTML หรือ Markdown รวมถึงการส่งรูปกราฟประกอบ
- Reliability: ระบบมีความเสถียรสูงและรองรับการใช้งานผ่าน Webhook หรือ Polling
2. การออกแบบ Threshold Alert: ไม่ใช่แค่ "เกินแล้วเตือน"
การตั้งค่า Threshold (เกณฑ์การวัด) ที่ดีต้องอ้างอิงตามมาตรฐานสากล หรือดัชนีคุณภาพอากาศ (AQI) โดยแบ่งระดับความสำคัญเพื่อให้การแจ้งเตือนมีน้ำหนักต่างกัน
ตัวอย่างการแบ่งระดับ Threshold (อิงตามค่า $\mu g/m^3$)
| ระดับความรุนแรง | ค่า PM2.5 ($\mu g/m^3$) | การจัดการของระบบ |
|---|---|---|
| Normal | 0 - 15.0 | ไม่มีการแจ้งเตือน (หรือสรุปยอดรายวัน) |
| Moderate | 15.1 - 37.5 | แจ้งเตือนสถานะ "เริ่มเฝ้าระวัง" |
| Unhealthy | 37.6 - 75.0 | แจ้งเตือนทันที + แนะนำให้ปิดหน้าต่าง |
| Hazardous | > 75.0 | แจ้งเตือนซ้ำทุก 30 นาที จนกว่าค่าจะลดลง |
3. วิธีลด Spam Notification: ให้ระบบ "เตือนเมื่อจำเป็น"
ปัญหาที่ใหญ่ที่สุดของระบบ IoT Alert คือการที่ Sensor ส่งข้อมูลแกว่งไปมา (Jitter) จนทำให้มือถือสั่นตลอดเวลา เราสามารถแก้ได้ด้วย 3 เทคนิคนี้:
A. Hysteresis (ส่วนต่างความต่างศักย์)
ป้องกันการแจ้งเตือนรัวๆ เมื่อค่าฝุ่นแกว่งอยู่ที่จุดตัด เช่น ถ้าตั้ง Threshold ไว้ที่ 37.5 และค่าฝุ่นสลับไปมาที่ 37.4 -> 37.6 -> 37.4 ระบบจะส่งข้อความไม่หยุด
- วิธีแก้: ตั้งค่า "จุดหยุดเตือน" ให้ต่ำกว่า "จุดเริ่มเตือน" เช่น เตือนเมื่อ > 37.5 แต่จะหยุดเตือนและรีเซ็ตสถานะเมื่อค่าลดลงต่ำกว่า 30.0 เท่านั้น
B. Time Debouncing
กำหนดให้ค่าฝุ่นต้องสูงเกินเกณฑ์ติดต่อกันเป็นระยะเวลาหนึ่ง (เช่น 5-10 นาที) ก่อนจะส่งคำสั่งแจ้งเตือน เพื่อป้องกัน Error จาก Sensor หรือควันชั่วคราว (เช่น ควันบุหรี่หรือควันทำอาหาร)
C. Rate Limiting
จำกัดจำนวนครั้งในการส่งข้อความ เช่น "ห้ามส่งข้อความซ้ำภายใน 1 ชั่วโมง" เว้นแต่จะมีการขยับขึ้นไปสู่อีกระดับความรุนแรง (Severity Level) ที่สูงกว่า
4. Implementation Concept (Python Example)
หากคุณใช้ Python ในการควบคุม Bot นี่คือโครงสร้างตรรกะเบื้องต้น:
# ตัวอย่างตรรกะการลด Spam ด้วยสถานะ current_pm25 = get_sensor_data() threshold = 37.5 alert_sent = False if current_pm25 > threshold and not alert_sent: send_telegram_msg(f"⚠️ ค่าฝุ่นสูงเกินมาตรฐาน: {current_pm25} µg/m³") alert_sent = True # ล็อคไว้ไม่ให้ส่งซ้ำ elif current_pm25 < (threshold - 5.0) and alert_sent: send_telegram_msg(f"✅ ค่าฝุ่นกลับเข้าสู่ภาวะปกติ: {current_pm25} µg/m³") alert_sent = False # ปลดล็อคเพื่อเตรียมแจ้งเตือนครั้งต่อไป
5. การทำให้ใช้งานจริง (Practical Tips)
- สรุปรายวัน (Daily Summary): แทนที่จะเตือนทุกครั้งที่ฝุ่นเปลี่ยน ให้ระบบส่งรายงานสรุปสถานะตอน 07:00 น. ของทุกวัน เพื่อให้เราเตรียมตัวก่อนออกจากบ้าน
- Rich Content: ใส่ Emoji เพื่อให้กวาดสายตาอ่านง่าย เช่น 🟢 (ปกติ), 🟠 (เริ่มสูง), 🔴 (อันตราย)
- Silent Messages: สำหรับระดับ "Moderate" (สีเหลือง) ให้ส่งแบบ
disable_notification=Trueเพื่อให้ข้อความเข้าแต่ไม่ส่งเสียงรบกวน
สรุป
ระบบแจ้งเตือนที่ดีไม่ใช่ระบบที่ส่งเสียงดังที่สุด แต่เป็นระบบที่ส่งข้อมูลได้ "ถูกที่ ถูกเวลา และถูกระดับความสำคัญ" การนำเกณฑ์ Threshold ที่ชัดเจนมาผสานกับเทคนิค Hysteresis จะช่วยเปลี่ยนจาก Notification ที่น่ารำคาญ ให้กลายเป็นเครื่องมือดูแลสุขภาพที่พึ่งพาได้จริง