ส่งข้อมูลผ่านเครือข่าย NB-IoT (ตอนที่ 1)

ส่งข้อมูลโดยใช้ AIS Magellan Library และการส่งข้อมูลออกไปที่ระบบอื่น

Nat
Chiang Mai Maker Club
3 min readMay 20, 2018

--

การส่งข้อมูลผ่านเครือข่าย NB-IoT ทางเทคนิคนั้นสามารถทำได้หลายทางครับ แต่ทางปฏิบัติผมขอแบ่งเป็น 2 ทางคือ

  1. ทำเอง ตั้ง Server เอง ดูแลเอง, เวลาล่ม ด่าตัวเอง ซ่อมเอง.
  2. คนอื่นทำ ใช้ Service Provider, เวลาล่ม ด่าคนอื่น เดี๋ยวเค้าซ่อมให้เรา.

ปกติแล้วผมไม่แนะนำให้เลือกข้อ 1 ครับ แต่ Developer หลายคนก็จะบอกว่าถ้าเลือกข้อ 2 แล้วมันไม่ได้ดั่งใจอะ ให้ทำไงได้….

ทางออกคือ เราก็ต้องรู้เขา, รู้เรา ก่อนครับว่า
เขาทำอะไรได้บ้าง?, และเราต้องการอะไร? (แต่ถ้าเขาไม่รัก อันนี้ไม่รู้ด้วยนะ)

กาแล๊กซีแมกเจลแลนใหญ่ จาก: https://universesystem.wordpress.com/

Magellan (แมกเจลแลน)

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

AIS Magellan

เอไอเอส แมกเจลแลน เป็น Platform IoT ของ AIS ครับ ซึ่งให้บริการเป็น 1. UDP Server — CoAP, 2. Dashboard และ 3. Data Proxy จากเครือข่าย NB-IoT ครับ (เท่าที่รู้ณ ตอนที่เขียนนะครับ)

การเชื่อมต่อกับ AIS Magellan

จากที่ผู้เขียนได้ลองพยายามเล่น Magellan มาหลายครั้งแล้วพบว่า ทำได้ยากครับ เพราะไม่รู้ว่า Library อยู่ไหน ทำไมมันไม่อยู่ด้วยกัน(ฟระ?) แล้วทำไมถึงไม่ใช้ NB-IoT Client Library ตัวเดียวกัน? และทำไมต้องมาหาโหลดเอาเอง?

แต่ไม่เป็นไรครับ ผมหาเจอแล้ว ส่วนใครที่หาไม่เจอ ให้สมัครสมาชิก Login แล้วมาดูในแท็บ User Guide ตามในภาพข้างล่างครับ

เดาว่าอาจจะเป็นความตั้งใจอยากให้คนที่เป็นสมาชิก Magellan จริงๆเท่านั้นที่โหลดไปใช้ได้

AIS Magellan Library

ทำความเข้าใจกับ Library: AIS Magellan

หลังจากที่เอา Library ไปวางไว้ในตำแหน่งที่เหมาะสมแล้ว (Documents/Arduino/libraries) ก่อนจะใช้งานก็ขอดูคำสั่ง AT-Command กันสักหน่อยครับว่ามีคำสั่งอะไรบ้าง ด้วยคำสั่ง grep -nr 'AT+' /Users/nat/Downloads/Magellan

grep -nr 'AT+' /Users/nat/Downloads/Magellan

จะเห็นว่าคำสั่งที่ใช้ในการส่งข้อมูลมีแค่ AT+NSOCR และ AT+NSOST เท่านั้น ส่วน AT+NSORFนั้นเอาไว้อ่านข้อมูลที่ได้รับมาจาก Server

Code ตัวอย่างของ Library: AIS Magellan

โค๊ดตัวอย่างของ AIS Magellan ค่อนข้างเรียบง่ายครับ เริ่มต้นมาด้วยการกำหนด Token โดยเอามาตรงที่เขียนว่า Token Key จาก หน้า Thing ครับ ที่เหลือก็เป็นการสร้าง JSON String ส่งเข้าไปที่ระบบ ตามโค๊ดด้านล่าง

Token Key ในหน้า Thing
โค๊ดตัวอย่าง

ผู้เขียนไม่ได้สนใจ เรื่อง Token Key หลุดครับ จึงแสดงภาพที่เป็น Token จริงครับ แต่ถ้าใครใช้สำหรับ Production แล้วล่ะก็… ให้เก็บรักษาไว้อย่างดีที่สุดนะครับ

ทำความเข้าใจ Library: AIS Magellan

ผมใช้วิธีเปิด Flag Debug แล้วก็ดู packet ที่เค้าส่งไปเลยครับว่าหน้าตาเป็นยังไง
แล้วก็พบสิ่งที่หน้าสนใจนั่นก็คือ Packet ตามคำสั่งนี้ครับ AT+NSOST=0,103.20.205.85,5683,80,40020579b54e42496f540d1763376635343964302d313835382d313165382d383633302d623333653636396532323935ff7b2254656d7065726174757265223a322c2248756d6964697479223a31307d

อย่าเพิ่งตกใจไปกับตัวเลขครับ ให้ไปเปิด AT Command Manual หน้า 74 ก่อนครับว่า AT+NSOST เป็นคำสั่งอะไร ใช้งานยังไง แต่ถ้าผู้อ่านยังสตั้นท์ไม่หาย ให้หาโปรแกรมมาช่วยครับ อย่างผมถนัดใช้ NodeJSก็ใช้ Buffer API มาเป็นวุ้นแปลภาษาด้วยคำสั่งBuffer.from แต่ถ้าใครถนัด python ให้ใช้คำสั่ง decode('hex')

NodeJS: Buffer.from
Python: decode

เราก็จะพอเห็น JSON String และ Token Key ของเราแล้วครับ
หลังจากนั้นให้ไปดูในเว็ปของ AIS Magellan ครับ จะเห็นว่าข้อมูลมาละเนอะมีสอง Fields ก็คือ Temperature และ Humidity

การนำข้อมูลไปใช้ หรือส่งต่อไปให้ระบบอื่นนอกเหนือจาก AIS Magellan

ความสามารถอีก 1 อย่างของ Magellan คือทำตัวเป็น Data Proxy ครับ ซึ่งถ้าสังเกตดีๆ ในช่อง DataSource จะมี URL ที่จะทำให้เราดึงข้อมูลไปใช้ต่อได้เลยครับ ใครถนัดเขียนโปรแกรมภาษาไหนก็ดึงไปได้เลย หรือจะใช้ NodeRed ก็ย่อมได้ครับ ไม่ใช่ Server เรา ก็จัดการ Polling ได้เลยครับ

ภาพแสดง Polling ดึงข้อมูลจาก HTTP API ของ Magellan

แต่จะมีสิ่งหนึ่งที่ AIS Magellan ไม่เคยบอกใคร… นั่นคือเค้ามี Link แบบ Pub/Sub ที่เค้าใช้อยู่ครับ เป็น MQTT Binding วิ่งบน SecureWebSocket ซึ่งมีการจัดกัดสิทธิ์ไว้ครับ (ไม่เห็นข้อมูลคนอื่น)

บทสรุปปิดท้าย

ผมคิดว่า AIS มี Platform ที่เป็น UDP Server (CoAP) ให้เราอยู่แล้วครับ เราไม่ทำเองจะดีกว่าครับ แต่เราอาจจะต้องสามารถปรับจูน กระบวนการส่งค่า หรือ Client Library ให้เหมาะสมกับวิถีของผู้ใช้งานครับ

บทความหน้าที่จะเป็นเรื่องที่ประยุกต์กว่านี้ครับ JSON String มันไม่น่าจะเหมาะเท่าไหร่กับการวิ่งบนลิ้งก์ที่เป็น NB-IoT หรือ LoRa นะครับ คอยติดตามกันต่อๆไปเนอะว่าจะทำยังไง

สวัสดีครับ.

* หมายเหตุ:

ตอนนี้ผู้เขียนได้รับแจ้งเข้ามาว่า Magellan เป็น CoAP Server ไว้บทความหน้าเราจะลงลึกกันไปอีกนิดนะครับ แต่ตอนนี้ความรู้เรายังตีความได้แค่ UDP Server อยู่ ต้องขออภัยด้วยครับ. —

Update:

— 20/04/2018, 14:54 เพิ่มผลจากการ Parse Coap Packet

coap packet

--

--