วันนี้เห็นน้อง ๆ ในบริษัทถือเครื่องวัดค่า PM2.5 มา
ก็เลยถามว่า เราสามารถดึงข้อมูลจากเครื่องมาได้ไหม ?
น้องบอกว่า ได้สิ
ดังนั้นความอยากรู้อยากลองจึงเกิดขึ้น ว่าต้องทำอย่างไรบ้าง ?
มาเริ่มกันเลย

ขั้นตอนที่ 1 ต้องติดตั้ง Mi Home App บนมือถือก่อน

ใช้สำหรับการ config ค่าต่าง ๆ ของเครื่องวัดค่า PM2.5
เครื่องวัดมันคือ Xiaomi Smart Air Quality Monitor PM2.5 Detector


ตรงนี้ไม่ขออธิบายมากนัก เพราะว่าทำตามขั้นตอนใน app ได้เลย

  • Login เข้า app
  • ในขั้นตอนเลือก region ให้เลือกเป็น Main Chaina (เท่าที่น้องมันบอก แต่ละ region มันไม่เหมือนกันอีก ต้องดูอีกว่าซื้อมาจากไหน ชีวิตดูยากนะ !!)
  • ทำการเพิ่ม device
  • ขั้นตอนที่สำคัญคือการเลือก WIFI network ซึ่งน้องบอกมาว่า support 2.4GHz เท่านั้น
  • เมื่อผ่านแล้วก็ device จะสร้าง WIFI network ใหม่ขึ้นมา ชื่อแนว ๆ นี้ zhimi.airmonitor.v1_xxxx
  • ถ้าเจอก็เปลี่ยนมาใช้ เพื่อใช้ติดต่อไปยัง device เท่านี้ก็จบ ซึ่ง app จะทำการ connect และ config ค่าต่าง ๆ ของ device ให้เอง

ขั้นตอนที่ 2 ดึงข้อมูล device ออกมาอย่างไร ?

จากที่น้องบอกมา มีคนเข้าทำไว้ให้แล้วเยอะเลย
หนึ่งในนั้นคือ miio ซึ่งเป็น project ที่พัฒนาด้วยภาษา NodeJS 
การใช้งานก็ไม่ยาก แต่เอกสารไม่ update เลย โครตแย่ !!

// ติดตั้ง
$npm install -g miio

//ค้นหา device ต่าง ๆ ด้วยคำสั่งจะเจอรายละเอียดของ device 
// ซึ่งเราต้องการ IP ของ device นั่นเอง

$miio discovery
INFO  Discovering devices. Press Ctrl+C to stop.

Device ID: 75105160
Model info: xxxx
Address: 192.168.1.35
Token: xxxx
Support: xxxxx

// ดูข้อมูลของ device ที่เจอด้วย IP ได้อีก
$miio inspect <IP of device>

// ดูข้อมูลจาก device ได้เลย ด้วยคำสั่ง
$miio control <IP of device>  pm2.5

เพียงเท่านี้ก็ได้ข้อมูล PM2.5 ที่ต้องการแล้ว
แต่ยังไม่พอ เรามาเขียน code เพื่อดึงข้อมูลมาจัดเก็บเพื่อประมวลผล
รวมทั้งเอามาแสดงข้อมูลแบบสวย ๆ กัน ดีกว่า

ขั้นตอนที่ 3 เขียน code เพื่อดึงข้อมูล PM2.5 จาก device

แน่นอนว่าใช้ libary miio นั่นเอง
ถามว่าเขียนง่ายไหม ตอบว่าง่ายนะแต่ถามว่าเอกสารของ library ช่วยไหม
ตอบได้เลยว่าไม่เลย ห่วยสุด ๆ ไม่ update เลย

โดยค่า default แล้วนั้น library นี้จะทำการดึงข้อมูลทุก ๆ 30 วินาที
ลองไปเปลี่ยนให้เร็วขึ้นตามเอกสาร แต่ก็ไม่เปลี่ยน ดังนั้นใช้ค่า default ก็แล้วกัน

เมื่อได้ข้อมูล PM2.5 ทุก ๆ 30 วินาทีแล้ว
ก็ทำการจัดเก็บลงใน data store ให้เรียบร้อยตามความต้องการของเรา

ขั้นตอนที่ 4 จัดเก็บและแสดงผลข้อมูล PM2.5 ของ device

ในตอนที่ทำก็ไม่ได้คิดอะไรมาก ไหลไปเรื่อย ๆ
ในหัวเลยคิดว่าเอาไปเก็บที่ง่าย ๆ เร็ว ๆ
ก็เลยคิดถึง Firebase Realtime Database เลยเนื่องจากฟรี ง่ายและเร็ว
ที่สำคัญคือ ข้อมูลเปลี่ยนแล้วคนดึงข้อมูลได้ข้อมูลล่าสุดทันทีเลยเท่านี้ก็โดนในแล้ว

ก็เลยไปเขียน code เพิ่มเติมนิดหน่อยคือ

  • การบันทึกข้อมูล PM2.5 ไปที่ Firebase Realtime Database
  • การดึงหรืออ่านข้อมูลจาก Firebase Realtime Database ซึ่งผมเขียน JavaScipt + HTML ทั่วไป และเอาไป deploy บน Firebase Hosting ไปเลย จบงาน !!

ในส่วนนี้เป็น code ตามเอกสารของ Firebase เลย
ไม่มีอะไรมากผลที่ได้ก็ กาก ๆ ประมาณนี้ ใส่สีนิดหน่อย

หมดไป 1 วันสำหรับการลองของใหม่ ๆ ที่ไม่เคยทำ
มันสนุกดีนะ
จากนี้ก็อยู่ที่จินตนาการของเราแล้วว่าจะเอาไปทำอะไร
เช่น ไปเชื่อมต่อกับ Slack และ LINE เลยดีไหม ?
เช่น เก็บข้อมูลแบบ time serie เพื่อเอามาวิเคราะห์ และแสดงผลต่อไป ?

ที่สำคัญ Xiaomi device มันก็สนุกและง่ายดีนะ

Tags: