ปัญหาเดิม
อุปกรณ์ IoT ส่งแต่ยอดสะสม ซึ่งเอาไปใช้ต่อยาก ธุรกิจต้องการ log รายช่วงเวลาตามวันทำงานของโรงงาน
สิ่งที่สร้าง
บริการ Python ใน Docker ที่ฟัง MQTT แล้วจับจากการเคลื่อนไหวของยอดว่าสินค้าตัวไหนเริ่มผลิต ผลิตครบแผน หรือหยุดผลิต แต่ละเหตุการณ์ส่งผ่าน n8n ขึ้นหน้าแจ้งเตือนของแดชบอร์ด ระหว่างผลิตก็แปลงยอดสะสมเป็นยอดต่อช่วง 10 นาที ซึ่งเป็นฐานของกราฟยอดต่อชั่วโมงในแดชบอร์ด
ฟีเจอร์หลัก
- เริ่มบันทึกเมื่อยอดขยับจริงเท่านั้น
- ตรวจจับการรีเซ็ตตัวนับของเครื่อง แล้วขึ้นล็อตใหม่
- หยุดเมื่อถึงยอดตามแผนใน ERP หรือไม่ขยับนาน 60 นาที
- รีสตาร์ตแล้วโหลดสถานะล่าสุดจากฐานข้อมูล
- ประกาศรายการไลน์ที่ทำงานอยู่กลับไปที่ MQTT ให้ระบบอื่นใช้
- ส่งเหตุการณ์เริ่มผลิต ครบตามแผน และหยุดผลิต พร้อมโรงงาน ไลน์ สินค้า และยอดเทียบแผน ผ่าน n8n ขึ้นหน้าแจ้งเตือนของแดชบอร์ด
- สินค้าที่หยุดไปแล้วกลับมาผลิตต่อ ระบบจับได้และเริ่มบันทึกใหม่
เบื้องหลังทางเทคนิค
- แยกค่าแรกจริงออกจาก noise: ค่าแรกต้องเท่ากับยอดสะสม ส่วนตัวนับที่ลดลงหมายถึงรีเซ็ต
- paho-mqtt รันใน thread แยก ใช้ lock คุม buffer แล้ว flush เป็นช่วง 10 นาที
- วันทำงานตัดรอบ 08:00 และแก้ปัญหา TLS ตอนต่อ SQL Server จากใน container