คู่มือการใช้งาน netpie an official guide to...

156
คู ่มือการใช้งาน NETPIE An Official Guide to NETPIE

Upload: others

Post on 25-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE

An Official Guide to NETPIE

Page 2: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 2

เอกสารฉบบนเปนลขสทธของศนยเทคโนโลยอเลกทรอนกสและคอมพวเตอรแหงชาต

เอกสารฉบบนเผยแพรภายใตสญญาอนญาตแบบ

Creative Commons Attribution 4.0 International License

อนญาตใหน าผลงานไปใชได แกไขได ดดแปลงเนอหาได ใชในเชงพาณชยได โดยอางองทมา

ดรายละเอยดสญญาอนญาตท https://creativecommons.org/licenses/by/4.0/

เอกสารเวอรชน 2017-02-02

สามารถดาวนโหลดไฟลเอกสารนไดท https://netpie.io/tutorials

Page 3: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 3

สารบญ

บทน า ...................................................................................................................................... 6

1. แนะน า NETPIE ............................................................................................................ 7

1.1. รจก NETPIE .......................................................................................................... 7

1.2. Microgear ............................................................................................................... 8

1.3. MQTT (MQ Telemetry Transport) ....................................................................... 11

แบบฝกหด: Local MQTT Chat บน Raspberry Pi .......................................................... 19

1.4. Authorization และ Authentication ใน NETPIE ................................................... 21

2. Getting Started ............................................................................................................ 25

2.1 การสมครสมาชก ................................................................................................. 25

2.2 การสรางแอปพลเคชน ........................................................................................ 26

2.3 การตดตงเครองมอพฒนา .................................................................................. 30

3. HTML 5 Microgear ...................................................................................................... 36

Lab 3.1: Hello NETPIE ................................................................................................... 36

Lab 3.2: HTMLChat ........................................................................................................ 38

Lab 3.3: Room Chat ....................................................................................................... 40

4. ESP8266 Microgrear .................................................................................................. 46

4.1 รจก ESP8266/NodeMCU ................................................................................... 46

Lab 4.1: NETPIE Blink ................................................................................................... 48

Lab 4.2: IoT Switch ........................................................................................................ 52

5. Freeboard .................................................................................................................... 57

Lab 5.1: การแสดงผลขอมลจากอปกรณเซนเซอรบน NETPIE Freeboard .................. 62

Lab 5.2: การควบคมอปกรณดวย NETPIE Freeboard .................................................. 68

6. NETPIE FEED ............................................................................................................ 74

6.1 การสราง FEED ................................................................................................... 74

Page 4: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 4

6.2 การก าหนดสทธในการเขาถง feed ..................................................................... 76

6.3 การเขยนขอมลลงใน Feed ................................................................................. 78

6.4 การดงขอมลจาก feed มาใชงาน ........................................................................ 80

6.5 ขอจ ากดการใชงาน.............................................................................................. 89

Lab 6.1: การแสดงผลขอมลเซนเซอรดวย NETPIE Feed ............................................. 89

7. NETPIE REST API ..................................................................................................... 94

7.1 REST API ............................................................................................................ 94

7.2 NETPIE REST API .............................................................................................. 94

Lab 7.1: HTML HTML .............................................................................................. 97

Lab 7.2: HTML NodeMCU ..................................................................................... 101

Lab 7.3: KKMC IoT ...................................................................................................... 105

8. NETPIE Secure Connection ..................................................................................... 109

Lab 8.1: สราง Secure Connection ระหวาง NodeMCU และ HTML5 ......................... 111

ภาคผนวก NETPIE Microgear Reference Guide .............................................................. 118

1. ESP8266-Arduino Microgear .................................................................................... 118

1.1 ความเขากนได ................................................................................................... 118

1.2 พอรตสอสาร ..................................................................................................... 118

1.3 การตดตง ........................................................................................................... 118

1.4 ขอจ ากดทพบ .................................................................................................... 119

1.5 ตวอยางการเรยกใช ........................................................................................... 119

1.6 การใชงาน library............................................................................................... 122

2. Arduino-Ethernet Microgear ..................................................................................... 126

2.1 ความเขากนได ................................................................................................... 126

2.2 ตวอยางการเรยกใช ........................................................................................... 126

2.3 การใชงาน library............................................................................................... 128

3. Node.js Microgear ..................................................................................................... 132

Page 5: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 5

3.1 พอรตสอสาร ..................................................................................................... 132

3.2 การตดตง ........................................................................................................... 132

3.3 ตวอยางการเรยกใช ........................................................................................... 132

3.4 การใชงาน library............................................................................................... 133

4. HTML5 Microgear ..................................................................................................... 138

4.1 การรองรบ ......................................................................................................... 138

4.2 พอรตสอสาร ..................................................................................................... 139

4.3 การตดตง ........................................................................................................... 139

4.4 ตวอยางการเรยกใช ........................................................................................... 139

4.5 การใชงาน library............................................................................................... 140

5. Python Microgear ...................................................................................................... 144

5.1 การตดตง ........................................................................................................... 145

5.2 ตวอยางการเรยกใชงาน .................................................................................... 145

5.3 ตวอยางเพมเตม ................................................................................................ 145

5.4 การใชงาน library............................................................................................... 145

6. REST API .................................................................................................................. 152

6.1 API Endpoint ..................................................................................................... 152

6.2 Authentication .................................................................................................... 152

6.3 Resource Types ................................................................................................ 153

ผเขยน ................................................................................................................................ 156

Page 6: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 6

บทน า

ในปจจบนเทคโนโลย Internet of Things หรอ IoT เรมเขามามบทบาทส าคญในชวตประจ าวน IoT คอ สภาพแวดลอมอนประกอบดวยสรรพสง (Things) ทสามารถสอสารและเชอมตอกนไดผานโพรโทคอลการสอสารทงแบบใชสายและไรสาย โดยสรรพสงตางๆ มวธการระบตวตนได รบรบรบทของสภาพแวดลอมไดและมปฏสมพนธโตตอบและท างานรวมกนได

ปจจบนเราสามารถน าเทคโนโลย IoT มาประยกตในดานตางๆ โดยเพมขดความสามารถของอปกรณเครองใชหรอบรการ ใหสามารถรบร แลกเปลยนขอมล แสดงผล ควบคมหรอท างานรวมกนได โดยกาวขามขดจ ากดในเรองของเวลาและสถานท เปนการบรณาการเทคโนโลยตางๆ เชน การสอสาร เครอขายคอมพวเตอร อปกรณไมโครคอนโทรลเลอร อปกรณระบบสมองกลฝงตว อปกรณเซนเซอร และขอมล เขาดวยกน และดวยราคาของอปกรณตางๆ ทถกลงสวนทางกบสมรรถนะทดขน ท าใหการพฒนาตอยอดผลตภณฑหรอบรการทเปน IoT เปนไปไดโดยงาย

NETPIE เปนแพลตฟอรมใหบรการส าหรบ IoT เปนระบบพนฐานทอ านวยความสะดวกใหกบนกพฒนา นกพฒนาฮารดแวรสามารถพฒนาอปกรณ โดยไมตองกงวลเรองการตดตงดแลระบบสอสาร ระบบเซรฟเวอร หรอฐานขอมลใดๆ ในขณะเดยวกนแพลตฟอรมนยงชวยใหนกพฒนาซอฟตแวรเขาถงอปกรณอเลกทรอนกสตางๆ ไดงายขน ผานไลบรารส าเรจรปทแพลตฟอรมเตรยมไวให ดงนนบรการแพลตฟอรม NETPIE จงเปนเสมอนสะพานเชอมระหวางนกพฒนาฮารดแวรและนกพฒนาซอฟตแวร

เอกสารนอธบายการประยกตใช IoT เบองตนดวย NETPIE คณะผจดท าหวงวาผอานจะไดรบความรความเขาใจเกยวกบเทคโนโลย IoT เขาใจกระบวนการพฒนาผลตภณฑ บรการ และแอปพลเคชนเบองตนโดยใชแพลตฟอรมสอสาร NETPIE ในการเชอมตออปกรณและแลกเปลยนขอมลกนไดในรปแบบของ IoT เพอใหเทคโนโลยทเกยวของกบ Internet of Things ไดรบการพฒนาและตอยอดเปนนวตกรรม เกดการสรางสรรคพฒนาผลตภณฑ บรการ และแอปพลเคชนดาน IoT โดยผประกอบการไทย และเพมขดความสามารถในการแขงขนกบนานาประเทศ

Page 7: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 7

1. แนะน า NETPIE

1.1. รจก NETPIE

NETPIE เปน IoT (Internet of Things) Cloud Platform ทพฒนาขนโดยทมงานวจยและเปดใหบคคลทวไปใชงานโดยม Web Portal ทใหสามารถลงทะเบยนและจดการตวตนและสทธของแอปพลเคชนและอปกรณไดทเวบไซต https://netpie.io ตงแตเดอนกนยายน 2558 เปนตนมา NETPIE เปน Middleware ทมหวใจหลก (นอกเหนอจากสวนอนๆ) เปน Distributed MQTT Brokers ซงเปนเสมอนจดนดพบใหสงตางๆ (Things) มาตดตอสอสารและท างานรวมกนผานวธการสงขอความแบบ Publish/Subscribe NETPIE มโครงสรางสถาปตยกรรมเปนคลาวดอยางแทจรงในทกองคประกอบ ท าใหสามารถขยายตวไดอยางอตโนมต (Auto-scale) สามารถดแลและซอมแซมตวเองไดอตโนมตเมอสวนหนงสวนใดในระบบมปญหา (Self-healing, Self-recovery) โดยไมตองพงผดแลระบบ การบรหารจดการระบบเปนแบบ Plug-and-Play ไมตอง Configure หรอปรบแตง ในฝงอปกรณ NETPIE ม Client Library หรอทเรยกวา Microgear ซงท าหนาทสรางและดแลชองทางสอสารระหวางอปกรณกบ NETPIE รวมไปถงรกษาความปลอดภยในการสงขอมล Microgear เปน Open Source และสามารถดาวนโหลดไดจาก https://github.com/netpieio โดย ณ ปจจบนม Microgear ส าหรบ OS และ Embedded Board หลกๆ ทเปนทนยมในหมนกพฒนาเกอบทกชนด โมเดลการสอสารของ NETPIE แสดงไวในรปท 1.1

รปท 1.1 วธการสอสารของสงตางๆ ผาน NETPIE

Page 8: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 8

ประโยชนของ NETPIE

1. ชวยลดการใชทรพยากรของการเชอมตอ

NETPIE ชวยใหอปกรณสามารถสอสารกนไดโดยผใชไมตองกงวลวา อปกรณนนจะอยทใด เพยงแคน า Microgear Library ไปตดตงในอปกรณ NETPIE จะรบหนาทดแลเชอมตอใหทงหมด ไมวาอปกรณนนจะอยในเครอขายชนดใด ลกษณะใด หรอแมกระทงเคลอนยายไปอยทใด ผใชสามารถตดปญหาในการเขาถงอปกรณจากระยะไกล (Remote Access) ดวยวธการแบบเดมๆ เชน การใช Fixed Public IP Address หรอการตง Port Forwarding ในเราทเตอรและการตองไปลงทะเบยนกบผใหบรการ Dynamic DNS ซงทงหมดลวนมความยงยาก ลดความยดหยนของระบบ ไมเพยงเทานน NETPIE ยงชวยใหการเรมตนใชงานเปนไปโดยงาย โดยออกแบบใหอปกรณถกคนพบและเขาสบรการโดยอตโนมต (Automatic Discovery, Plug-and-Play)

2. ชวยลดภาระดานความปลอดภยของขอมล

NETPIE ถกออกแบบใหมระดบและสทธในการเขาถงในระดบ Fine Grain กลาวคอผใชสามารถออกแบบไดเองทงหมดวา สงใดมสทธคยกบสงใด สงใดมสทธหรอไม - เพยงใดในการอานหรอเขยนขอมล และสทธเหลานจะมอายการใชงานนานเทาใด หรอจะถกเพกถอนภายใตเงอนไขใด เปนตน

3. ยดหยนตอการขยายระบบ

NETPIE มสถาปตยกรรมเปนคลาวดเซรฟเวอรอยางแทจรงในทกองคประกอบของระบบ ท าใหเกดความยดหยนและคลองตวสงในการขยายตว นอกจากนโมดลตางๆ ยงถกออกแบบใหท างานแยกจากกน เพอใหเกดสภาวะ Loose Coupling และสอสารกนดวยวธ Asynchronous Messaging ชวยใหแพลตฟอรมมความนาเชอถอไดสง น าไปใชซ าและพฒนาตอไดงาย ดงนนผพฒนาไมจ าเปนตองกงวลกบการขยายตวเพอรบโหลดทเพมขนในระบบอกตอไป

1.2. MICROGEAR

Microgear คอซอฟตแวรไลบรารของ NETPIE ทตดตงอยบนอปกรณทตองการเชอมตอสอสารผานคลาวดของ NETPIE Microgear เปรยบเสมอนตวกลางและผชวยในการสรางและดแลการเชอมตอ ใหมความเสถยร ปลอดภย ใหการสอสารแลกเปลยนขอมลระหวางอปกรณเปนไปอยางราบรน บทบาทหนาทของ Microgear สามารถแบงออกเปน 4 ดานคอ

1. ดานการสอสาร (Communication) Microgear จะเปนผชวยในการสรางการเชอมตอ (Connection) ไปยงคลาวดของ NETPIE และคอยตรวจสอบสถานะของการเชอมตอ หากการเชอมตอมปญหา Microgear สามารถชวยเชอมตอใหใหมเพอใหการสอสารเปนไปไดอยาง

Page 9: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 9

ราบรน นอกจากน Microgear ยงชวยอ านวยความสะดวก ในการสรางชองทางการสอสารแบบเขารหสในกรณทผใชตองการ สวนการแลกเปลยนขอมลระหวาง Microgear และคลาวดของ NETPIE จะใชโพรโทคอล MQTT ในการสอสาร

2. ดานการยนยนตวตน (Authentication) ในขนตอนการสรางการเชอมตอ Microgear จะชวยยนยนตวตนของอปกรณกบคลาวดของ NETPIE โดยการพสจนตวตน (Identity) ของอปกรณจะใชขอมลประกอบกนสามสวนคอ AppID, App Key และ Token

3. ดานการขออนญาตสทธ (Authorization) การขออนญาตสทธในการสอสารจะเกดขนในขนตอนการสรางการเชอมตอ ควบคกบการยนยนตวตน คลาวดของ NETPIE จะเปนผออกใบอนญาต (Token) ทระบวาอปกรณตวน สามารถสอสารไดกบอปกรณตวใดบาง ในกรณปกตอปกรณทอยภายใตกลม AppID เดยวกนเทานน จงจะมสทธสอสารกนได (ยกเวนในกรณการใช Freeboard Microgear ทอนญาตใหสอสารขาม AppID ได ซงจะอธบายในบทท 5)

4. ดานการประสานงาน (Coordination) Microgear มฟงกชนทชวยใหอปกรณตางๆ ภายในกลม AppID เดยวกนทราบสถานะของกนและกน เชน ทราบวามอปกรณใดออนไลนเขามาใหมในกลม หรอมอปกรณใดออกไปจากกลม รวมถงทราบการเปลยนแปลงสถานะของอปกรณทสนใจตดตาม จากขอมลดงกลาวผ ใชสามารถก าหนดบทบาทหนาทใหอปกรณในกลมตามสถานะของอปกรณอนๆ ในกลม เชน หากเปนอปกรณตวแรกในกลมใหท าหนาทเปนหวหนากลม เปนตน

Microgear ถกพฒนาขนเพอใหท างานไดกบอปกรณทหลากหลาย ในสวนของซอฟตแวรม Microgear ใหเลอกใชกบ Programming Language ไดแก Node.js Python HTML5 Java Android C# ส าหรบอปกรณฮารดแวรประเภทไมโครคอนโทรลเลอร Microgear เปรยบเสมอน Firmware ซงม Microgear ทรองรบ Arduino with Ethernet Shield (ใชไดกบ Arduino Mega) และ Microgear ส าหรบ WiFi ไมโครคอนโทรลเลอร ESP8266 Microgear ทพฒนาขนทงหมดถกรวบรวมไวท https://github.com/netpieio โดยมสญญาอนญาตใหใชสทธแบบเปดประเภท ISC License ซงอนญาตใหท าซ า ดดแปลง และ/หรอสงตอไลบรารนได ทงในการใชงานเชงสาธารณประโยชนและเชงพาณชย รายละเอยดของสญญาอนญาตใหใชสทธแบบ ISC License มดงน

Page 10: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 10

ISC License

Copyright (c) 2015, NECTEC < @nectec.or.th>

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above

copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF

MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES

WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN

ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR

IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

ฟงกชนหลกของ Microgear

Microgear แตละชนดอาจมชอและชนดของฟงกชนแตกตางกนตามลกษณะของการเขยนโปรแกรมในภาษานนๆ ในทนขอยกตวอยางฟงกชนทมเหมอนกนอยในหลาย Microgear โดยขออางองชอฟงกชนจาก HTML5 Microgear ส าหรบรายละเอยดฟงกชนของแตละชนด Microgear สามารถดไดจากภาคผนวก หรอเอกสาร Readme ใน https://github.com/netpie.io

create สราง Microgear เพอเรมตนใชงาน

connect เชอมตอ Microgear เขากบคลาวดของ NETPIE

setAlias ก าหนดชอเลนของอปกรณเพอใชระบตวตนของอปกรณภายใน NETPIE

chat สงขอความแบบเจาะจงผ รบ

publish สงขอความแบบไมเจาะจงผ รบไปยงหวขอสนทนาทก าหนด

subscribe ระบความสนใจในหวขอสนทนา บอกรบขอความทเกดขนบนหวขอนนๆ

unsubscribe ยกเลกการบอกรบขอความในหวขอสนทนาทเคย subscribe ไว

resetToken ยกเลกใบอนญาต (Token) และลบใบอนญาตออกจาก cache บนอปกรณ

useTLS ระบวาตองการสรางการเชอมตอแบบเขารหสระหวาง Microgear กบคลาวดของ NETPIE

on ตอบสนองตอเหตการณทสนใจผานการเรยก Callback Function

ล าดบในการเรยกฟงกชนพนฐานเพอเรมสงขอมลเปนไปตามแผนภาพในรปท 1.2

Page 11: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 11

รปท 1.2 ล าดบการเรยกฟงกชนพนฐานของ Microgear

Events ของ Microgear

การท างานของ Microgear เปนแบบ Event-driven จงตองตอบสนองตอเหตการณตางๆ ดวยการเขยน Callback Function ซงชนดของเหตการณทสามารถเกดขน มดงน

connected เกดขนเมอ Microgear เชอมตอกบ NETPIE ส าเรจ

closed เกดขนเมอ Microgear ปดการเชอมตอกบ NETPIE

error เกดขนเมอมความผดพลาดเกดขนกบ Microgear

message เกดขนเมอมขอความเขามาทอปกรณ

present เกดขนเมอมอปกรณใน AppID เดยวกนเชอมตอเขามาบน NETPIE

absent เกดขนเมอมอปกรณใน AppID เดยวกนหายไปจากการเชอมตอกบ NETPIE

1.3. MQTT (MQ TELEMETRY TRANSPORT)

MQTT เปนโพรโทคอลสอสารชนแอปพลเคชนทรนบน TCP/IP ถกพฒนาขนในป 1999 โดย IBM และ Eurotech ส าหรบการมอนเตอรสถานะทอสงน ามนสวนทวางผานเขตทะเลทราย ดวยการออกแบบใหเปนการรบสงขอความทมน าหนกเบามากและเปนโพรโทคอลเปด ท าใหในปจจบน MQTT ถกน ามาใชแพรหลายในการสอสารแบบ M2M หรอ IoT เพราะเหมาะสมกบอปกรณปลายทางทมขนาดเลก/พลงงานจ ากด หรอในการสอสารระยะไกลทตองการการใชงานแบนดวดธอยางมประสทธภาพ

createuseTLS

(optional)connect setAlias publish

chat

Page 12: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 12

โมเดลการสอสารของโพรโทคอลแสดงดงรปท 1.3 ประกอบดวย 2 สวนคอไคลเอนต และโบรกเกอร

รปท 1.3 โมเดลการสอสารของโพรโทคอล MQTT

โบรกเกอร เปนจดศนยกลางในการรบสงขอความระหวางไคลเอนต วธการก าหนดเสนทาง (Routing) กระท าผานหวขอ (Topic) โดยไคลเอนต Subscribe ในหวขอทตนตองการ จากนนโบรกเกอรจะสงขอความทงหมดทถก Publish ในหวขอนนๆ ไปให ดงนนไคลเอนตจงสอสารกนไดโดยไมจ าเปนตองรจกกน ชวยลดความเกยวพนระหวางผสรางขอมลและผใชขอมล สงผลใหการขยายตวของเครอขายท าไดงาย นอกจากนหนาททส าคญอกประการของโบรกเกอรคอการรกษาความปลอดภยของไคลเอนต (Authorization, Authentication) ซงในสวนนสามารถขยายเพมเตม หรอน าไปเชอมกบกลไกความปลอดภยของระบบหลงบานทมอยแลวได ชวยใหน าโบรกเกอรเขาไปใชงานเปนสวนหนงของระบบอนๆ ได สวน Authorization ของ NETPIE ซงจะไดกลาวถงในหวขอตอไป กถอเปนตวอยางหนงของการขยายเพมเตมการรกษาความปลอดภยของโบรกเกอรใน MQTT ปจจบนมโบรกเกอร MQTT ทเปดใหดาวนโหลดไปใชหรอดดแปลงอยหลายราย ไดแก Mosquitto, RabbitMQ, Erlang, VerneMQ ฯลฯ

ไคลเอนต จะเปนไดทง Publisher หรอ Subscriber หรอ Publisher/Subscriber พรอมๆ กน และจะเปนอปกรณใดๆ กไดทสามารถรน MQTT Client Library บน TCP/IP Stack การท MQTT ใชโมเดล Publish/Subscribe ตรรกะสวนใหญจงไปตกอยในฝงโบรกเกอร ท าให Library มขนาดเลก ตดตงไดงาย ใชงานไดกบอปกรณทมทรพยากรจ ากด ไคลเอนตจ าเปนตองเปดการเชอมตอ TCP ไวตลอดเพอทโบรกเกอรจะสามารถผลกขอความไปใหได หากการเชอมตอถกตดขาด โบรกเกอรจะเกบขอความทงหมดทเขามาไวจนกวาไคลเอนตจะกลบมาออนไลนอกครง

เมอเปรยบเทยบ MQTT กบ HTTP (REST) ทมสถาปตยกรรมแบบ Request/Response จะพบวา MQTT มความไดเปรยบทโบรกเกอรสามารถผลก (Push) ขอความไปยงไคลเอนตไดตามเหตการณ

Page 13: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 13

(Event-driven) ในขณะทเมอใช HTTP ฝงไคลเอนตตองคอยสมถาม (Poll) ขอมลเปนระยะๆ และตองตงคาคาบเวลาการสมถามไวกอนลวงหนา โดยแตละครงตองมการสรางการเชอมตอขนใหมและอาจจะไมมขอมลใหมใดๆ ใหอพเดท ดงนนหากตองการใหระบบท างานแบบ Real Time หรอใกลเคยง ยอมหมายถงตองตงคาบเวลาการมถามใหสน และเกดความสนเปลองของการใชชองสญญาณทไมจ าเปนทตามมา นจงเปนอกเหตผลส าคญทท าให MQTT ไดรบความนยมเหนอ REST ส าหรบการใชงานแบบ M2M นอกเหนอจากการมน าหนกเบา

MQTT Topics

MQTT Topic เปน UTF-8 String ในลกษณะเดยวกบ File Path คอสามารถจดเปนล าดบชนไดดวยการขนดวย “/” ตวอยางเชน myhome/floor-one/room-c/temperature ไคลเอนตสามารถเลอก Publish หรอ Subscribe เฉพาะ Topic หรอ Subscribe หลาย Topic พรอมๆ กนโดยใช Single-Level Wildcard (+) เชน myhome/floor-one/+/temperature หมายถงการขอเขยนหรอรบขอความ temperature จากทกๆ หองของ myhome/floor-one หรอ Multi-Level Wildcard (#) เชน myhome/floor-one/# หมายถงการขอเขยนหรอรบขอความทงหมดทม Topic ขนตนดวย myhome/floor-one เปนตน

เราสามารถก าหนด Topic อยางไรกได โดยมขอยกเวนการขนตน Topic ดวยเครองหมาย “$” ซงจะจ ากดไวส าหรบการเกบสถตภายในของตวโบรกเกอรเทานน ดงนนไคลเอนตจะไมสามารถ Publish หรอ Subscribe ไปยง Topic เหลานได โดยทวไป Topic เหลานจะขนตนดวย $SYS

MQTT vs Message Queues เรามกพบการสบสนระหวาง MQTT กบ Message Queues โดยคนจ านวนไมนอยเชอวา MQ

ใน MQTT มาจากค าวา Message Queueในความเปนจรงแลว MQ ในทนมาจากชอรนผลตภณฑทรองรบโพรโทคอล MQTT ของ IBM ทเรยกวา MQ Series และ MQTT ไมไดท างานในลกษณะ Message Queue กลาวคอ ขอความใน MQTTจะถกสงใหกบไคลเอนตทงหมดท Subscribe ใน Topic ในขณะทขอความใน Message Queue สามารถถกดงออกไปใชงานโดยผใชเพยงรายเดยวเทานน

MQTT Connections

แพกเกตควบคม (Control Packets) ทงหมดทใชในการสอสารระหวางโบรกเกอรกบไคลเอนตใน MQTT มทงสน 14 ชนด แสดงไวดงตารางท 1.1

Page 14: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 14

ตารางท 1.1 ชนดของแพกเกตควบคมในโพรโทคอล MQTT

แพกเกตควบคม ผสง ค าอธบาย

โบรกเกอร ไคลเอนต

CONNECT X ขอเชอมตอ

CONNACK X รบทราบการขอเชอมตอ

PUBLISH X X ขอความทจะขอ Publish

PUBACK X X แจงวาได Publish แลว (QoS Level 1)

PUBREC X X แจงวาได Publish แลว (QoS Level 2)

PUBREL X X รบทราบวาขอความถก Publish แลวและแจงใหอกผ รบลบคาสถานะได (QoS Level 2)

PUBCOM X X แจงวา Publish เสรจสนและสถานะถกลบ (QoS Level 2)

SUBSCRIBE X ขอ Subscribe

SUBACK X รบทราบการขอ Subscribe

UNSUBSCRIBE X ขอยกเลก Subscribe

UNSUBACK X รบทราบการขอยกเลก Subscribe

PINGREQ X PING Request

PINGRESP X PING Response

DISCONNECT X ขอยกเลกการเชอมตอ

Page 15: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 15

การเชอมตอ MQTT จะเรมตนจากฝงไคลเอนตสงแพกเกตควบคม CONNECT ไปยงโบรกเกอร โบรกเกอรจะตอบรบดวยแพกเกตควบคม CONNACK วธนชวยแกปญหาไคลเอนตทตดตงอยหลงเราทเตอรหรอไมมเลขไอพสาธารณะ เพราะโบรกเกอรมเลขไอพสาธารณะและจะรกษาการเชอมตอสองทางไวตลอดหลงจากไดรบแพกเกตควบคม CONNECT หากโบรกเกอรพบวาแพกเกต CONNECT ทไดรบไมถกตอง หรอไคลเอนตใชเวลานานเกนไปนบตงแตเปดซอกเกตจนกระทงเรมสงแพกเกต โบรกเกอรจะปดการเชอมตอ เพอปองกนไคลเอนตไมประสงคดทตองการถวงการท างานของโบรกเกอร

ไคลเอนตจะเปนผระบคาการเชอมตอในแพกเกตควบคม CONNECT คาเหลานไดแก

Client ID เพอใหโบรกเกอรใชระบตวตนของไคลเอนตและเกบคาสถานะเซสชนไวให ซงไดแก Subscriptions และขอความทงหมดทไคลเอนตยงไมไดรบ (สวนนเกยวของกบการตงคาระดบ QoS ซงจะกลาวถงตอไป) ดงนน Client ID จงจ าเปนทจะตองไมซ ากน แตหากไมตองการใหโบรกเกอรเกบคาสถานะ ไคลเอนตสามารถเวนสวนนวางไวได

Clean Session มคา True หรอ False เพอระบวาไคลเอนตตองการใหโบรกเกอรรกษาคาสถานะของเซสชนไวใหหรอไม หากตองการ ใหระบคาเปน False หากไม ใหระบคาเปน True ดงนนหากไคลเอนตไมระบคา Client ID ในแพกเกต CONNECT จะตองระบ Clean Session เปน True ดวย มฉะนนโบรกเกอรจะไมรบการเชอมตอ

Username และ Password เพอใหโบรกเกอรใชในการ Authentication และ Authorization ซงตามมาตรฐานปจจบน (MQTT 3.1.1) โพรโทคอล MQTT เองไมมการเขารหสหรอแฮชในสวนน กลาวคอ Username/Password จะถกสงเปน Plaintext ดงนนจงมขอควรระวงในการใช MQTT หากไมมชนความปลอดภยเพมเตมเชน TLS ในชนทรานสปอรต

Last Will Topic, Last Will QoS และ Last Will Message มไวใหโบรกเกอร Publish ขอความสงเสยสดทาย (Last Will Message) ไปยง Topic ทระบ (Last Will Topic) เพอใหไคลเอนตอนรบรในกรณการเชอมตอของไคลเอนตรายนขาดลงแบบไมเจตนา

Keep Alive เปนคาตวเลขคาบเวลาทไคลเอนตตกลงกบโบรกเกอรวาจะสงแพกเกตควบคม PINGREQ มาเปนระยะๆ ซงโบรกเกอรจะตอบดวยแพกเกต PINGRESP เพอใหทงสองฝายรบรวาการเชอมตอยงคงอย

Page 16: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 16

รปท 1.4 ผงการรบสงขอความสงเสยสดทาย (Last Will Message)1

ไคลเอนต Publish ขอความ โดยบรรจลงในสวน Payload ของแพกเกตควบคม PUBLISH ซงจะตองระบ Packet ID, ชอ Topic, ระดบของ QoS, Duplicate Flag และ Retain Flag โบรกเกอรจะตอบกลบดวยแพกเกต PUBACK หรอ PUBREC ขนอยกบระดบ QoS ทระบในแพกเกต PUBLISH ในทางกลบกนเมอตองการรบขอมล ไคลเอนตสงแพกเกตควบคม SUBSCRIBE ไปยงโบรกเกอร โดยระบรายชอ Topic ทตองการ ซงอาจมไดมากกวาหนง และสามารถเลอกตงคาระดบ QoS ทแตกตางกนส าหรบแตละ Topic และโบรกเกอรจะตอบดวยแพกเกต SUBACK โดยยนยนคาระดบ QoS ของแตละ Topic ทไคลเอนตขอ Subscribe กลบมาอกครง หาก Topic ใดทไมอนญาตหรอไมปรากฏบนโบรกเกอร โบรกเกอรจะตอบกลบดวยคา 128 แทนทคาระดบ QoS

เมอไคลเอนตตองการยกเลกการรบขอมล ท าไดโดยการสงแพกเกตควบคม UNSUBSCRIBE ไปยงโบรกเกอร โดยระบรายชอ Topic ทตองการบอกเลกในคราวเดยวกนไดมากกวาหนง โบรกเกอรจะยนยนการยกเลกดวยแพกเกต UNSUBACK

เมอไคลเอนตตองการเลกการเชอมตอ ท าไดโดยการสงแพกเกตควบคม DISCONNECT ไปยงโบรกเกอร หากไคลเอนต CONNECT โดยตงคา Clean Session เปน True โบรกเกอรจะยกเลก Subscription ทงหมดของไคลเอนตใหเองโดยอตโนมต ในทางกลบกนหาก Clean Session เปน False โบรกเกอรจะยงคงเกบคาตางๆ ของเซสชนไว เมอไคลเอนตเชอมตอเขามาใหมดวย Client ID เดม จงไมจ าเปนตองเรม Subscribe ใหมอกครง

1http//:www.embedded101.com

Page 17: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 17

MQTT Quality of Service (QoS)

ไคลเอนตจะเปนผก าหนดระดบของบรการสงและรบขอความหรอ QoS ทตนตองการในแตละ Topic ในแพกเกต PUBLISH หรอ SUBSCRIBE และโบรกเกอรจะตอบสนองดวย QoS ระดบเดยวกนส าหรบ Topic นนๆ

QoS ใน MQTT แบงไดเปน 3 ระดบ คอ

1. อยางมากหนงครง (At Most Once) แทนดวยโคด 0

QoS 0 เปนระดบบรการทต าทสด กลาวคอไมรบประกนวาขอความจะถกสงถงผ รบใดๆ เลยหรอไม หากไคลเอนต Publish ขอความดวย QoS 0 โบรกเกอรจะไมมการตอบรบใดๆ วาได Publish ตอไปใหผ รบรายอนหรอไม หากไมมผ รบขอความ โบรกเกอรอาจเกบขอความไวหรอลบทงกได ขนอยกบนโยบายของผใหบรการเซรฟเวอร ในทางกลบกนหากไคลเอนตทเปนผ รบ Subscribe ไวดวย QoS 0 เมอไดรบขอความจากโบรกเกอร กไมตองสงขอความตอบรบใดๆ กลบ ท าใหการสงขอความแบบนรวดเรวทสด เพราะไมมโอเวอรเฮดในการตอบรบ ขณะเดยวกนหากขอความถกสงไมถง กไมมทางทราบไดเชนกน

2. อยางนอยหนงครง (At Least Once) แทนดวยโคด 1

QoS 1 รบประกนวาขอความจะถกสงถงผ รบอยางนอยหนงครง การสงลกษณะน ผสงจะเกบขอความเอาไว จนกวาจะไดรบแพกเกต PUBACK จากผ รบ ในกรณไคลเอนตขอ Publish ผ รบขอความซงเปนโบรกเกอรจะตอง Publish ตอไปยงไคลเอนตท Subscribe ไวอยางนอยหนงครง จงจะสามารถสงแพกเกตตอบรบไปกลบยงผสง ในกรณ Subscribe ผสงซงกคอโบรกเกอรจะตองเกบขอความไวจนกวาไคลเอนตทตนสงขอความไปใหจะยนยนตอบรบ ดงนนแพกเกต PUBACK จงตองมหมายเลขไอดเดยวกบแพกเกต PUBLISH เพอใหผสงทราบวาขอความใดถกสงถงแลวและสามารถลบออกได

3. หนงครงเทานน (Exactly Once) แทนดวยโคด 2

QoS 2 รบประกนวาแตละขอความจะถกสงถงผ รบเพยงหนงครงเทานน เปนบรการทปลอดภยทสดและชาทสดของโพรโทคอล MQTT เนองจากผ รบและผสงตองสงแพกเกตควบคมไปกลบถงสองรอบ เรมตนดวยผสงสงขอความไปในแพกเกต PUBLISH เมอผ รบไดรบขอความจะเกบแพกเกตไวและยนยนกลบไปยงผสงดวยแพกเกต PUBREC ผสงจงสามารถลบขอความนนออกจากหนวยเกบขอมลของตนได และสงแพกเกต PUBREL ไปยงผ รบเพอใหผ รบสามารถลบสถานะการสงขอความนออกได หากผ รบเปนไคลเอนตปลายทางท Subscribe ขอความเอาไว ผ รบจะสงแพกเกต PUBCOM เพอยนยนวาขอความถกสงถงแลวเรยบรอยหนงครง หากผ รบเปนโบรกเกอร ทนททได Publish ขอความตอไปยงไคลเอนตปลายทางหนงครง จงจะลบขอความนนออก และปดเซสชนดวยการสงแพกเกต PUBCOM กลบไปยงผสง

Page 18: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 18

รปท 1.5 ผงการสอสารเพอ Publish ขอความดวย QoS 02

รปท 1.6 ผงการสอสารเพอ Publish ขอความดวย QoS 13

2http//:www.embedded101.com 3http//:www.embedded101.com

Page 19: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 19

รปท 1.7 ผงการสอสารเพอ Publish ขอความดวย QoS4

Retained Messages

เมอไคลเอนต Publish ขอความแบบ Retained Message โดยการตง Retain Flag เปน True จะท าใหโบรกเกอรเกบขอความนนไวใน Topic ทระบอยางถาวร จนกวาจะม Retained Message อนทถก Publish ภายหลงมาเกบแทนท โดยโบรกเกอรจะเกบ Retained Message ไวใหเพยง Topic ละหนงขอความ ดงนนทกครงทมไคลเอนต Subscribe เขามาใหม กจะไดรบ Retained Message ทนท ไมตองรอจนกวาจะม Publication ใหมเกดขน จงมองไดวา Retained Message คอขอมลลาสดท Subscriber ทกรายควรตองทราบ ดงนน Retained Message จงเปนประโยชนอยางยงกบแอปพลเคชนทเกยวของกบการอพเดทสถานะ หากไคลเอนตตองการลบ Retained Message ใน Topic ใดๆ กสามารถท าไดไมยาก ดวยการสงแพกเกต PUBLISH ทมไมม Payload และตง Retain Flag เปน True ไปยง Topic นนๆ หรอหากมขอมลจะอพเดท กไมมความจ าเปนตองลบ Retained Message เกาออกกอน แตสามารถสง Retained Message เขาไปเขยนทบไดเลย

แบบฝกหด: Local MQTT Chat บน Raspberry Pi

1. ตดตงโบรกเกอร Mosquitto ลงบน Raspberry Pi โดยพมพชดค าสงขางลาง และแทนท xxxx ดวยชอรนระบบปฏบตการเชน wheezy หรอ jessie

4 http//:www.embedded101.com

Page 20: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 20

curl -0 http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key add mosquitto-repo.gpg.key

rm mosquito-repo.gpg.key

cd /etc/apt/sources.list.d/

sudo curl -0 http://repo .mosquitto.org/debian/mosquitto-xxxx.list

sudo apt-get update

2. ตดตงไคลเอนต

sudo apt-get install mosquitto mosquitto-clients

3. ทดลองแชทโดยเปดหนาตาง สรางหวขอ “chat/test1 ”รบนเครองและลงบนโบรกเกอ Subscribe โดยพมพ

mosquitto_sub –h localhost –t “chat/test1”

4. เปดหนาตางใหมโดยยงไมปดหนาตางแรก พมพค าสงขางลางเพอ Publish ขอความ “hello” ไปยงหวขอ “chat/test1”

mosquitto_pub –h localhost –t “chat/test1” –m “hello”

ในหนาตางแรกทได Subscribe เอาไว จะปรากฏขอความ hello

5. สงเกตผลของการตงระดบบรการรบสงขอมล (QoS) ทแตกตางกน พมพค าสงขางลางในหนาตางแรก เพอ Subscribe ในหวขอ “chat/test2” ดวย QoS 1

mosquitto_sub –h localhost –v –t “chat/#” –c –q 1 –i “Client ID”

6. ในหนาตางทสอง พมพค าสงขางลางเพอ Publish ขอความ “You might get this message.” และ “You will get this message.” ดวย QoS 0 และ QoS 1 ตามล าดบ

mosquitto_pub –h localhost –t “chat/test2” –m “You might get this message.”

mosquitto_pub –h localhost –t “chat/test2” –m “You will get this message.”

–q 1

7. สงเกตผลลพธในหนาตางแรก 8. หยดการท างานของหนาตางแรกชวคราวโดยกด ctrl-c 9. ท าซ าขอ 6 10. ท าซ าขอ 5 และสงเกตผลลพธ

Page 21: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 21

1.4. AUTHORIZATION และ AUTHENTICATION ใน NETPIE

เนองจาก NETPIE มศนยกลางการสอสารเปน Distributed MQTT Broker ความปลอดภยจงขนตรงกบการเขาถงโบรกเกอรของอปกรณ ดงทไดกลาวไปแลวในหวขอท1.3 วามาตรฐาน MQTT ระบใหใชเพยง Username และ Password ในการพสจนตวตน (Authentication) ของไคลเอนท โดยสามารถก าหนดสทธการเขาถงโบรกเกอรของไคลเอนตแตละรายดวยการผกเปนรายการ (List) เขากบ Username บนโบรกเกอร ในขณะท NETPIE นน มขอมลประจ าตว (Credentials) ของอปกรณทจะมาขอเชอมตอถงสองชน คอ Key และ Token ซงจะชวยเพมความยดหยนในการบรหารจดการการเขาถงโบรกเกอรของอปกรณใหมความละเอยด ยดหยนและมประสทธภาพมากขน ดงนน

อปกรณจะไดมาซงขอมลประจ าตวจากการขออนญาตสทธ (Authorization) ซงประกอบดวยผ เกยวของ 3 ฝายคอ

1) อปกรณ (Device) ทจะมาเชอมตอสอสารกนใหเกดแอปพลเคชน ในทนรวมถงทงอปกรณกายภาพและอปกรณเสมอน (Object)

2) ผใช (User) ซงเปนเจาของแอปพลเคชน และเปนผก าหนดวาอปกรณใดมสทธหรอไม มากนอยเพยงใดในแอปพลเคชนของตน

3) NETPIE ท าหนาทเปนตวกลางในการขออนญาตสทธระหวางผใชและอปกรณ

กระบวนการทงหมดมขนตอนคอ

1) ผใชลงทะเบยนกบ NETPIE Web Portal และสรางแอปพลเคชน

2) ผใชเพมอปกรณภายใตแอปพลเคชนนนๆ และไดรบ Key และ Key Secret เพอน ามาใสลงในโคดของ Microgear ในอปกรณ

3) เมออปกรณถกเปดใชงาน Microgear จะเชอมตอเขามายง NETPIE โดยอตโนมต และพสจนตวตนดวย Key และ Key Secret ทไดรบในการขอ Token เพอเชอมตอและสอสารผาน NETPIE

4) ในขนตอนน NETPIE มทางเลอกสองทางเพอความสะดวกของผใช

ทางเลอกท 1: Pre-approved Key กลาวคอผใชสามารถก าหนดไวกอนลวงหนาวา Key ใดบางจะไดรบการอนญาตสทธแบบอตโนมต ดงนนทนททอปกรณตอเขามา จะไดรบ Token ทนท นอกจากนผ ใชยงสามารถก าหนดระดบของสทธไวกอนไดเชนกน เชน ใหสทธอปกรณของผใชเองแบบเตม ใหสทธอปกรณของคนอนบางสวน เปนตน

Page 22: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 22

ทางเลอกท 2: Third-Party Key ซงเหมาะกบกรณทผใชใหสทธอปกรณของบคคลอนเขามารวมใชแอปพลเคชน เมออปกรณรองขอ Token เขามา NETPIE AUTH Server จะตดตอไปยงผใช ใหเขามาอนญาตสทธ โดยสามารถก าหนดระดบของสทธ และ NETPIE จะท าการออก Token ใหกบอปกรณและบนทกระดบของสทธทไดรบอนญาตเอาไว

รปท 1.8 NETPIE Authorization ในกรณ Pre-approved Key

รปท 1.9 NETPIE Authorization ในกรณ Third-party Key

Page 23: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 23

เมออปกรณไดชดขอมลสวนตวครบแลว จะน าทงหมด (Key, Key Secret, Token, Token Secret) ไปสราง Client ID, Username และ Password ในการพสจนตวตนเขาใช NETPIE ตามโพรโทคอล MQTT โดยวธการสรางจะท าให Username กบ Password มการเปลยนแปลงทกครงในแตละเซสชน และมการแฮชและเขารหส ชวยปองกนการดกฟงและการท าซ า

NETPIE รองรบการเชอมตอ MQTT แบบ Persistent Connection เทานน ดงนนจะมการตง

คา Client ID ไวเสมอ หากมการเพกถอนสทธของอปกรณ Client ID จะถกลบ อปกรณจะตองตอไปยง NETPIE เพอขอ Token ใหม โดยไมตองไปเรมตนกระบวนการขอ Key ใหมตงแตตน โมเดลของ NETPIE นเปนการน าแนวคดทใชในสงคมมนษยมาปรบใชในสงคมของสงของ เชน เมอคนท าผดกฎจราจร ถกยดใบขบข ท าใหไมมสทธในการขบขยานพาหนะ แตสามารถไปขอท าใบขบขใหมไดภายหลง เปนตน

ชนดของ Key

NETPIE รองรบอปกรณทหลากหลาย นอกจากอปกรณกายภาพเชน บอรดไมโครคอนโทรลเลอรตางๆ แลว ยงรองรบอปกรณเสมอนเชน แอปพลเคชนตางๆ ซงรวมไปถงแอปพลเคชนทเขยนดวย HTML5 ทสามารถรนไดบนเบราวเซอร ในกรณเชนน การเชอมตอไมสามารถเปนแบบ Persistent ได เนองจากตองมการปดเปดเบราวเซอรตลอดเวลา ดงนนเพอใหการจดการ Key และ Token มประสทธภาพ หลกเลยงการสราง Token ทงไวโดยไมไดใชงาน NETPIE จงออกแบบใหม Key อย 2 ชนด คอ

1. Device Key

เมออปกรณไดรบการตดตง Device Key และรองขอ Token มายง NETPIE หากไดรบการอนญาตสทธ อปกรณจะไดรบ Token ทใชไดตลอดไป ไมมการหมดอาย ดงนนตราบใดทไมมการเพกถอนสทธ อปกรณสามารถใช Token เดมไปไดตลอดโดยไมตองเขาสกระบวนการ Authorization ใหม Device Key จงเหมาะกบอปกรณกายภาพทสามารถรกษาชองการเชอมตอกบ NETPIE ไวไดโดยตลอด

2. Session Key

อปกรณทไดรบการตดตง Session Key จะไดรบ Token ทใชไดเพยงครงเดยว (One-time Token) หากอปกรณยกเลกการเชอมตอไป และตอกลบมาใหม จะตองมการน า Session Key ไปขอ Token ใหมทกครง Session Key จงเหมาะกบการใชงานแอปพลเคชนทรนบนเบราวเซอรทตองมการปดเปดอยเรอยๆ เพราะหากใช Device Key ทกครงทเบราวเซอรถกเปดขนจะมการรองขอ Token ใหม และเมอเบราวเซอรถกปดไป Token ทไดจะคางอยเชนนนโดยไมไดใชงานอก สงผลใหภายใต Key เดยวกน ม Token ทงทใช

Page 24: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 24

งานและไมไดใชงานแลวผกอยเปนจ านวนมาก สรางความสบสนซบซอนทไมจ าเปนใหกบผใช จงขอเนนย าเปนอยางยงวาไมควรใช Device Key กบแอปพลเคชนทรนบนเบราวเซอร (HTML5) โดยเดดขาด

ขอบเขตของสทธ (Scope) ในการเขาถง NETPIE MQTT Brokers

เมอผใชอนญาตสทธใหกบอปกรณ จะสามารถระบขอบเขตของสทธ หรอทเราเรยกวา Scope ไดวามากนอยเพยงใด โดย Scope นจะผกอยกบ Token ทอปกรณจะไดรบ และถกเกบไวท NETPIE รปแบบของ Scope Identifier เกยวพนโดยตรงกบโครงสรางการสอสารแบบ Publish/Subscribe ไปยง Topic บนโบรกเกอร MQTT มได 3 ลกษณะคอ

1. rw:/topic เชน rw:/home/bedroom/temperature หมายถง มสทธอาน (Subscribe) และเขยน (Publish) ใน home/bedroom/temperature

2. r:/topic เชน r:/home/# หมายถง มสทธอาน (Subscribe) ทก Topic ทขนตนดวย home 3. w:/topic เชน w:/home/+/temperature หมายถง มสทธเขยน (Publish) ไปยง Topic ชอ

temperature ของทกๆ หองใน home

การก าหนด Scope ทเกยวของกบหลาย Topic นอกจากใช Wildcard ดงทไดแสดงไปแลว สามารถท าไดโดยการเรยง Scope Identifier เขาดวยกนแลวคนดวยเครองหมาย Bar "|" ตวอยางเชนrw:/home/bedroom/temperature|r:/home/#|w:/home/+/temperature

Page 25: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 25

2. GETTING STARTED

2.1 การสมครสมาชก

ขนตอนการสมครสมาชกเพอใชงาน NETPIE มดงน

1. ไปทเวบไซต https//:netpie.io/sign_up จะปรากฏหนาเวบดงรป กรอกขอมลใหเรยบรอยจากนนคลกทป ม SIGN UP เพอยนยนการลงทะเบยน

รปท 2.1 หนาลงทะเบยนผใชงาน NETPIE

2. รอรบ SMS จากทาง NETPIE ซงสงไปยงหมายเลขโทรศพทเคลอนททลงทะเบยนไว

ตวอยาง SMS:

Your one-time password for NETPIE is 255906201550

3. คลกทเมน LOG IN เพอเขาสระบบน าอเมลทลงทะเบยนไวใสในชอง USERNAME OR EMAIL ADDRESS และน ารหสผานทไดรบจาก SMS ใสในชอง PASSWORD แลวคลกป มLOG IN

4. ตงรหสผานใหมโดยใสรหสผานใหมในชอง NEW PASSWORD และ CONFIRM PASSWORD

Page 26: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 26

รปท 2.2 หนาตงรหสผานใหมส าหรบผใช NETPIE

5. สามารถเปลยนรหสผานไดทเมน CHANGE PASSWORD

รปท 2.3 เมนในการเปลยนรหสผใชงาน NETPIE

2.2 การสรางแอปพลเคชน

หลงจากสมครสมาชก และลอกอนไดเรยบรอยแลว ผใชสามารถสรางแอปพลเคชนไดโดยท าตามขนตอนดงตอไปน

1. เลอกทเมน APPLICATIONS เพอเขาไปทหนา APPLICATION MANAGEMENT ซงแสดง

แอปพลเคชนทงหมดทผใชงานมอย การสรางแอปพลเคชนใหมท าไดโดยการคลกทป ม + ดงแสดงในรป

Page 27: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 27

รปท 2.4 หนาจดการแอปพลเคชนส าหรบผใชงาน NETPIE

2. ในหนาตาง Pop-up ใหก าหนดชอแอปพลเคชน (Application ID หรอ AppID) ทตองการ ในตวอยางนใชชอวา PaulSmartHome จากนนคลกป ม CREATE การตงชอ AppID จะตองไมซ ากบผ อน ดงนนควรเลอกชอทมความเฉพาะตวเพอใหจ าได เนองจาก AppID นจะถกน าไปใชในการพฒนาโปรแกรมตอไป

รปท 2.5 กลองใหผใชตงชอ AppID

3. หากสรางแอปพลเคชนใหมไดส าเรจทหนาตาง APPLICATION ในหนา APPLICATION MANAGEMENT จะปรากฏชองของชอ AppID ทเราก าหนดไว หากชอซ าหรอมขอผดพลาดจะมขอความแจงเตอนขนมาดงน

หลงจากสรางส าเรจจะเปลยนไปทหนาของแอปพลเคชนทสรางขนใหมนโดยอตโนมต

Page 28: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 28

รปท 2.6 ตวอยางหนาแอปพลเคชนหนงของ NETPIE

4. สราง Application Key โดยคลกทป ม +

5. ก าหนดชอของ Application Key ตามตองการ ในตวอยางใชขอความวา Key Television1

และเลอกชนดของ Key ใน Drop-down box ใหเปน Device Key

รปท 2.7 การตงชอและเลอกชนด Application Key

Application Key ม 2 ประเภท คอ

1. Device Key คอ Key ทใชกบอปกรณประเภทกายภาพ โดย Device Key ของอปกรณนนจะถกจดจ าไปตลอดถงแมอปกรณจะไมไดเชอมตอกบ NETPIE แลว แตเมอมการเชอมตอ

ชอ AppID ท

ก าหนดไว

Page 29: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 29

ใหม จะถกมองวาเปนอปกรณตวเดม ประโยชนคอเราจะสามารถจดจ าอางองถงอปกรณตวนนได

2. Session Key คอ Key ทใชกบอปกรณทมการใชงานไมถาวรเชน เบราวเซอร เมอยกเลกการเชอมตอหรอปดเบราวเซอรไปตวตนของอปกรณนนจะถกลบทง เมอเชอมตอมาอกครงระบบจะสรางบตรผานใหมจาก Key ตวเดมให โดย NETPIE จะไมถอวาอปกรณท Online แตละครงมตวตนเดยวกน แตกตางจากกรณ Device Key

แนะน าใหใช Device Key กบ Hardware และใช Session Key กบ Browser, HTML5 โดย

ความแตกตางของ Key ทงสองประเภทจะแสดงในหนาของ Application ดวยรปกญแจสตางกน

เมอสรางส าเรจ จะมชอ Key Television1 ปรากฏในหนาตาง APPLICATION KEY

6. ตรวจสอบขอมลหรอดรายละเอยด Key ดวยการคลกท Key Television1 จะปรากฏขอมล

ของApplication Key ซงประกอบดวย

Application Key Name สามารถเปลยนแปลงชอไดตามทตองการ มไวใหผใชสามารถระบอปกรณของตนภายใต AppID หนงเทานน จงสามารถตงซ ากบชอผ อนได

รปท 2.8 การเปลยนชอ Application Key

Key เปนกญแจทอปกรณใชส าหรบเชอมตอ NETPIE

ชอเรยก ApplicationKey สามารถพมพแกไข

ได

Page 30: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 30

Secret เปนรหสลบหรอรหสผานทอปกรณตองใชคกบ Key ส าหรบใหอปกรณเชอมตอ NETPIE

REST API auth เปนกญแจทเรยงตอกบรหสลบเพอใชส าหรบการใชงานดวย REST API

2.3 การตดตงเครองมอพฒนา

เครองมอส าหรบการพฒนา ประกอบไปดวย

Arduino IDE และ SDK ส าหรบ ESP8266

NETPIE Microgear ส าหรบ ESP8266

CP2012 USB to UART driver

เวบเบราวเซอร Chrome และ Firefox

Arduino IDE

ดาวนโหลด Arduino IDE ไดจาก https://www.arduino.cc/en/Main/Software ซงสามารถเลอกไฟลเพอตดตงในแพลตฟอรมตางๆ อาท Windows, Mac OS X, Linux หาก Arduino IDE ทตองการตดตงไมไดเปนเวอรชนลาสด ทานสามารถไปดาวนโหลดเวอรชนกอนๆ ไดทhttps://www.arduino.cc/en/Main/OldSoftwareReleases

เวอรชนของ Arduino IDE ทใชทดสอบกบ code ในเอกสารนคอเวอรชน1.6.12

Page 31: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 31

หลงจากตดตงเสรจ ไปทเมน File --> Preferences

รปท 2.9 การเลอกเมน Preferences ใน Arduino IDE

ใสขอความตอไปน ลงในชอง Additional Board Manager URLs

http://arduino.esp8266.com/stable/package_esp8266com_index.json

รปท 2.10 การใสลงคเพอตดตง ESP8266 Arduino Core

Page 32: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 32

คลกทเมน Tools --> Board: ??????? --> Board Manager…

รปท 2.11 การเลอกเวอรชนของ ESP8266 ส าหรบตดตง

คนหาค าวา ESP8266 เมอปรากฏผลลพธ ใหเลอกเวอรชน 2.2.0 ใน Drop-down Optionและคลก Install

รปท 2.12 การตดตง ESP8266

ในเมน Tools จะมบอรด ESP8266 ชนดตางๆ เพมขนมา เลอกใหตรงกบชนดของบอรดทใช ในทน ใหเลอก NodeMCU 1.0 (ESP-12E Models)

Page 33: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 33

รปท 2.13 การเลอกชนดของบอรด ESP8266

NETPIE Microgear Library ส าหรบ ESP8266

ดาวนโหลด Microgear ส าหรบ ESP8266 จาก GitHub ของ NETPIE หรอ Manage Libraries

กรณท 1 ถาดาวนโหลด Microgear จาก GitHub (https://github.com/netpieio/microgear-esp8266-arduino) ใหคลกเมน Sketch --> Include Library --> Add .ZIP Library… เลอก Zip File ทดาวนโหลดมา คลก Choose ถาตดตงส าเรจ เขาไปทเมน Sketch --> Include Library จะเหนชอ ESP Microgear

กรณท 2 ถาดาวนโหลด Microgear จากเมน Manage Libraries… ใหคลกเมน Sketch --> Include Library --> Manage Libraries…

รปท 2.14 การตดตง Microgear Library จาก Arduino IDE

คนหาค าวา Microgear ทดาวนโหลดมา คลก Choose

Page 34: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 34

ถาตดตงส าเรจ เมอเขาไปทเมน Sketch --> Include Library--> Manage Libraries… จะเหนชอ ESP8266 Microgear ถาลงเสรจเรยบรอยแลวจะปรากฏขอความวา Installed แตถายงไมส าเรจใหคลกป ม Install เพอตดตง

รปท 2.15 การตดตง Microgear Library ลงบนบอรด

USB Driver

ใน Workshop เราจะใชบอรด NodeMCU ซงม USB Port ทใชชป CP2102 ดงนนเราจ าเปนทจะตองตดตง Driver ใหระบบปฏบตการรจก USB Device ชนดน โดยดาวนโหลด USB Driver ไดท

https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx

Web Browser

ขอแนะน าใหใช Chrome หรอ Firefox หากยงไมไดตดตง สามารถดาวนโหลดไดจาก

Chrome https://www.google.com/chrome/browser/index.html

Firefox https://www.mozilla.org/en-US/firefox/new/

Page 35: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 35

การใชงาน NETPIE กบอปกรณชนดอนๆ

นอกจาก ESP8266 แลว NETPIE ยงม Microgear ส าหรบภาษาตางๆ เชน HTML5, Node.js, Python, Java, Android, C# และฮารดแวรอนๆ โดยสามารถดาวนโหลดพรอมคมอการใชงานไดใน GitHub (https://github.com/netpieio/)

รปท 2.16 หนา GitHub ของ NETPIE

Page 36: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 36

3. HTML 5 MICROGEAR

การใช NETPIE Client Library ในอกรปแบบหนงทถกน าไปประยกตใชอยางแพรหลายคอ HTML5 Microgear Library ซงสามารถเปลยน Web Browser ใหเปน Thing (หรอ NETPIE device) เพอสอสารกบ Thing หรออปกรณอนๆทเชอมตอกนภายใตแพลตฟอรม NETPIE ได HTML5 Microgear Library น เขยนดวยภาษา JavaScript นกพฒนาสามารถน าไปตอยอดเปน Web Application อนๆ โดยทไมตองตดตงโปรแกรมใดเพมเตมอก และสามารถใชไดกบอปกรณทวไป เชน คอมพวเตอรหรอสมารทโฟนทใช Browser ตางๆไดในปจจบน

Lab 3.1: Hello NETPIE

Lab นเปนการทดลองใช HTML5 Microgear ดวยวธงายๆ โดยการเขยนไฟล HTML ดวย Javascript เพยงไฟลเดยวเพอสราง Microgear ในการสงขอความผาน NETPIE กลบมายง Browser ของตนเองเปนระยะๆ Browser ซงกถอวาเปน Thing ชนดหนงสามารถเชอมตอกบ NETPIE ผานทาง Microgrear Library ขนตอนการทดลอง มดงน

1. พมพโคดขางลางลงใน Text Editor โดยแกไข APPID, KEY, SECRET ตามทไดสรางไวบนเวบ NETPIE โดยใหเลอกชนด Application Key เปน Session Key รวมทงตงชออปกรณ (ALIAS) เพอใชอางองในการสอสาร จะเหนไดวาการเรยกใช Microgear Library ถก Define ไวในบรรทดแรกทอางถง Source https://cdn.netpie.io/microgear.js

<script src="https://cdn.netpie.io/microgear.js"></script>

<script>

const APPID = "YOUR_APPID"; // แทนทดวย AppID

const KEY = "YOUR_KEY"; // แทนทดวย Key

const SECRET = "YOUR_SECRET"; // แทนทดวย Secret

const ALIAS = "myhtml"; // ตงชอเรยกอปกรณ (อยางไรกไดไมจ ากด)

var microgear = Microgear.create({

key: KEY,

secret: SECRET,

Page 37: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 37

alias : ALIAS

});

// สรางฟงกชนทจะตอบสนองตอขอความทเขามา

microgear.on('message', function(topic,msg) {

//ในทนเราจะเอาขอความไปแทนขอความของ HTML element ชอ data

document.getElementById("data").innerHTML = msg;

});

// สรางฟงกชนทจะถกเรยกเมอเชอมตอ NETPIE ส าเรจ

microgear.on('connected', function() {

microgear.setAlias(ALIAS); // ตงชอเรยกใหกบอปกรณตามตวแปรทตงไวสวนตนของไฟล

// แสดงขอความใหทราบวาเชอมตอส าเรจ

document.getElementById("data").innerHTML = "Now I am connected

with netpie...";

// ตงคา timer ใหท างานทก 1 วนาท (ตวเลข 1000 มหนวยเปน ms หมายถง 1000 ms)

setInterval(function() {

// สงขอความไปยงอปกรณทมชอตามตวแปร ALIAS ซงกคอตวเอง

microgear.chat(ALIAS,"Hello from myself at "+Date.now());

},1000);

});

microgear.connect(APPID); // สรางการเชอมตอไปยง NETPIE

</script>

<div id="data">_____</div>

Microgear ในตวอยางนคอ microgear-html5 ใน GitHub ซงเปน Client Library ของ NETPIE ทจะเปลยน Web Browser ใหเปน Microgear เพอสอสารกบ Microgear อนๆ

2. Save เปนไฟลชอ hellonetpie.html จากนนดบเบลคลกหรอคลกขวาเพอเปดไฟลดวย Browser 3. บนหนา Browser ทเปดขนมา จะปรากฏขอความ

Hello from myself at xxxxxxxxxx

โดย xxxxxxxxx เปน Unix Time ทจะเพมขนเรอยๆ ทกๆ 1000 ms หรอ 1 วนาท

Page 38: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 38

Lab 3.2: HTMLChat

ในการทดลองน จะแสดงตวอยางการสอสารกนระหวาง Web Browser 2 ตว ผาน NETPIE โดยดดแปลงมาจาก Lab 3.1 ดงน

1. สราง Application Key ใหม 2 คา ภายใตแอปพลเคชน AppID เดยวกน

2. สรางไฟล HTML ขนมาใหม 2 ไฟล (alice.html และ bob.html) โดยใชโคดทแสดงขางลาง สงเกตวาความแตกตางของทงสองไฟลอยทเพยงตวแปร MYNAME และ YOURNAME เทานนทสลบทกน

alice.html

<script src="https://cdn.netpie.io/microgear.js"></script>

<script>

const APPID = “YOUR_APPID”;

const KEY = “KEY_1”;

const SECRET = “SECRET_1”;

const MYNAME = "alice"; // ชอของตวเอง

const YOURNAME = "bob"; // ชอของเพอนทจะคยดวย

var microgear = Microgear.create({

key: KEY,

secret: SECRET,

});

microgear.on('message',function(topic,msg) {

document.getElementById("data").innerHTML = msg;

});

microgear.on('connected', function() {

microgear.setAlias(MYNAME); // ตงชอตวเอง

document.getElementById("data").innerHTML = "Now I am connected

with netpie...";

setInterval(function() {

// ใชฟงกชน chat ในการสงขอความหาเพอน

Page 39: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 39

microgear.chat(YOURNAME,"Hello from "+MYNAME+" at

"+Date.now());

},1000);

});

microgear.on('disconnected', function() {

document.getElementById("data").innerHTML = "Now I am

disconnected with netpie...";

});

microgear.connect(APPID);

</script>

<div id="data">_____</div>

bob.html

<script src="https://cdn.netpie.io/microgear.js"></script>

<script>

const APPID = “YOUR_APPID”;

const KEY = “KEY_2”;

const SECRET = “SECRET_2”;

const MYNAME = "bob"; // ตงชอของตวเอง

const YOURNAME = "alice"; // ตงชอของเพอนทจะคยดวย

var microgear = Microgear.create({

key: KEY,

secret: SECRET,

});

microgear.on('message',function(topic,msg) {

document.getElementById("data").innerHTML = msg;

});

microgear.on('connected', function() {

microgear.setAlias(MYNAME); // ตงชอตวเอง

document.getElementById("data").innerHTML = "Now I am connected

with netpie...";

setInterval(function() {

Page 40: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 40

// chat หาเพอน

microgear.chat(YOURNAME,"Hello from "+MYNAME+" at

"+Date.now());

},1000);

});

microgear.on('disconnected', function() {

document.getElementById("data").innerHTML = "Now I am

disconnected with netpie...";

});

microgear.connect(APPID);

</script>

<div id="data">_____</div>

3. ใส APPID (เหมอนกนในทงสองไฟล) และ แตละค KEY กบ SECRET ลงในแตละไฟล 4. Save ไฟลทงสองไฟล แลวดบเบลคลกหรอคลกขวาเพอเปดไฟลทงสองดวย Browser 5. ผลลพธทไดในหนาตางทเปดขนมาจาก alice.html จะเปนดงน

Hello from bob at xxxxxxxxxx

และขอความในหนาตางทเปดขนมาจาก bob.html จะเปนดงน

Hello from alice at yyyyyyyyyyy

โดย xxxxxxxxx และ yyyyyyyyy เปน Unix Time ทจะเพมขนเรอยๆ ทก 1000 ms

Lab 3.3: Room Chat

ในการทดลองนแสดงตวอยางการสอสารกนระหวาง Web Browsers ผาน NETPIE ทมการใชงานทซบซอนกวาเดม เปนการทบทวนการใช Function Call ตางๆ ใน HTML5 Microgear Library (https://github.com/netpieio/microgear-html5/blob/master/README.th.md) เพอเปลยน Web Browser ใหเปน Microgear และท าการสอสารอพเดทขอมลกน มขนตอนดงน

1. ศกษาจากไฟล room_client.html และ room_server.html เพอทบทวน Function Call ตางๆทระบไวใน HTML5 Microgear Library

2. เปดไฟล room_client.html ดวย Text Editor และแกไขทบรรทด var slot = your_number; โดยใหเปลยนเปนหมายเลขทแตละทานไดรบ แลวท าการ Save File

Page 41: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 41

3. คลกเพอเปดไฟล room_client.html และ room_server.html ดวย Browser ศกษาการสอสารกนระหวาง Browser ทงฝง Client และ ฝง Server และดการแสดงผลดงแสดงในรปท 3.1

room_client.html

<script src="https://cdn.netpie.io/microgear.js"></script><!-- Microgear

library -->

<script>

const APPID = "demobillboard" //Application ID ของอปกรณทเชอมตอ NETPIE

const KEY = "M0mqAyedJm1ywVD"; // Key ของอปกรณทเชอมตอ NETPIE

const SECRET = "moHzrlTv1Xu0k286LzxkoTiRn";//Secret ของอปกรณทเชอมตอ NETPIE

const ALIAS = "htmlgear"; // ชออปกรณทเชอมตอ NETPIE

var slot = 30; // slot number

var microgear = Microgear.create({

key: KEY,

secret: SECRET,

alias : ALIAS

});

function getColor(){

return '#' + Math.random().toString(16).slice(2, 8).toUpperCase();

}

microgear.on('message',function(topic,msg) { //ตรวจพบขอความทสงมายงอปกรณ

//ก าหนดขอความใหแสดงผลใน tag id ชอ data

document.getElementById("data").innerHTML = msg;

});

microgear.on('connected', function() { //ตรวจสอบเมอเชอมตออปกรณกบ NETPIE

microgear.setAlias(ALIAS); //ก าหนดชออปกรณทเชอมตอกบ NETPIE

document.getElementById("data").innerHTML = "Now I am connected with

netpie..."; // แสดงขอความเมอเชอมตออปกรณกบ NETPIE

setInterval(function() { // ก าหนดใหท างานตลอดเวลาทกๆ 5000 ms

var color = getColor();

Page 42: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 42

// สงขอความไปยงอปกรณชอ htmlgear ดวย NETPIE

microgear.publish("/billboard/slot/"+slot,color);

document.getElementById("data").innerHTML = "Publish color :

"+color;

document.body.style.backgroundColor=color;

},5000);

});

microgear.on('disconnected', function() { //ตรวจสอบเมอตดการเชอมตออปกรณกบNETPIE

document.getElementById("data").innerHTML = "Now I am disconnected

with netpie..."; // แสดงขอความเมอตดการเชอมตออปกรณกบ NETPIE

});

// ตรวจพบอปกรณทเชอมตอ NETPIE ดวย APPID เดยวกน

microgear.on('present', function(event) {

console.log(event);

});

//ตรวจพบเหตการณทอปกรณเคยเชอมตอ NETPIE ดวย APPID เดยวกนหายไป

microgear.on('absent', function(event) {

console.log(event);

});

microgear.connect(APPID); // เชอมอปกรณกบ NETPIE

</script>

<div id="data">_____</div>

room_server.html

<script src="https://cdn.netpie.io/microgear.js"></script><!-- Microgear

library -->

<style>

#rgb {

width:100%;

font-size: 50px;

vertical-align: middle;

}

.box {

Page 43: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 43

float: left;

border: 1px solid black;

margin-right: 50px;

margin-bottom: 20px;

}

.boxcolor{

width: 250px;

padding: 10px;

display: inline-block;

color: #FFF;

background-color: #FFF;

}

.right {

text-align: center;

width: 150px;

padding: 10px;

display: inline-block;

color: #FFF;

background-color: #000;

}

</style>

<div id="data">_____</div>

<p/>

<div id="rgb"></div>

<script>

var numberbox = 30;

var htmlbox = "";

for(var i=0; i<numberbox; i++){

htmlbox+='<div class="box"><div

class="right">'+(i+1)+'</div><div class="boxcolor"

id="'+(i+1)+'">'+i+'</div></div>';

}

document.getElementById("rgb").innerHTML = htmlbox;

const APPID = "demobillboard"; // Application ID ของอปกรณทเชอมตอ NETPIE

const KEY = "M0mqAyedJm1ywVD"; // Key ของอปกรณทเชอมตอ NETPIE

const SECRET = "moHzrlTv1Xu0k286LzxkoTiRn";//Secret ของอปกรณทเชอมตอ NETPIE

Page 44: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 44

const ALIAS = "billboard"; // ชออปกรณทเชอมตอ NETPIE

var microgear = Microgear.create({

key: KEY,

secret: SECRET,

alias : ALIAS

});

microgear.on('message',function(topic,msg) { // ตรวจพบขอความทสงมายงอปกรณ

console.log(topic+" : "+msg);

if(topic.indexOf("/demobillboard/billboard/slot")!=-1){

if(msg.startsWith('#') || msg.startsWith('rgb(')){

var m = topic.split("/demobillboard/billboard/slot/");

document.getElementById(m[1]).style.color = msg;

document.getElementById(m[1]).style.backgroundColor =msg;

}

}

});

microgear.on('connected', function() { // ตรวจสอบเมอเชอมตออปกรณกบ NETPIE

microgear.setAlias(ALIAS); // ก าหนดชออปกรณทเชอมตอกบ NETPIE

// แสดงขอความเมอเชอมตออปกรณกบ NETPIE

document.getElementById("data").innerHTML = "Now I am connected

with netpie...";

microgear.subscribe("/billboard/slot/+");

});

microgear.on('disconnected', function() { // ตรวจสอบเมอตดการเชอมตออปกรณกบ NETPIE

// แสดงขอความเมอตดการเชอมตออปกรณกบ NETPIE

document.getElementById("data").innerHTML = "Now I am disconnected

with netpie...";

});

//ตรวจพบอปกรณทเชอมตอกบ NETPIE ดวย APPID เดยวกน

microgear.on('present', function(event) {

console.log(event);

});

// ตรวจพบวาอปกรณทเคยเชอมตอกบ NETPIE ดวย APPID เดยวกนหายไป

Page 45: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 45

microgear.on('absent', function(event) {

console.log(event);

});

microgear.connect(APPID); // เชอมอปกรณกบ NETPIE

</script>

รปท 3.1 การแสดงผลท Web Browser ทเปดไฟล room_server.html

แบบฝกหด

1. ในไฟล room_client.html อธบายความหมายของ Function Call น microgear.publish("/billboard/slot/"+slot,color);

2. ในไฟล room_server.html อธบายความหมายของ Function Call น

microgear.subscribe("/billboard/slot/+");

Page 46: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 46

4. ESP8266 MICROGREAR

4.1 รจก ESP8266/NODEMCU

บทนจะเกยวของกบ Thing ประเภท Embedded Board เพอใหเหนภาพวาสามารถสรางอปกรณฮารดแวรใหมาเชอมตอกบ NETPIE ไดอยางไร โดยในการทดลองศกษา เราจะใช NodeMCU รน 12E หรอ NodeMCU V2 หรอ NodeMCU Dev kit v1.0 (https://github.com/nodemcu/nodemcu-devkit-v1.0) ซงใชโมดล ESP8266-SoC (ESP-12E) ซงเปน 32-bit Microcontroller และม Built-in WiFi

Node MCU-12E รวมทงผงค าอธบายขาตอแสดงไวดงรปท 4.1

รปท 4.1 Node MCU-12E และผงค าอธบายขาตอ

Page 47: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 47

ในการเขยนโปรแกรมลงบน NodeMCU เราจะใช Arduino IDE ในการ Compile และ Flash โปรแกรมลงไปผานทางสาย microB-USB ในสวนของโครงสรางโคด จะเหมอนกบการเขยนโปรแกรมบนบอรด Arduino โดยมฟงกชนสองสวนคอ สวนตงคาและสวนท างานหลก ดงแสดงขางลาง

void setup(){

//สวนนท าครงเดยวตอนเรมตนการท างาน

}

void loop(){

//สวนนเปนสวนหลก ท างานวนซ าตลอดไมรจบ

}

ทานสามารถทดสอบการท างานของบอรดเบองตนดงน

1.เชอมตอบอรดกบคอมพมเตอรดวยสาย microB-USB

2. ตรวจสอบ COM Port ทใชงานใหถกตอง

2.1 ส าหรบ Windows ไปท Control panel --> System -->Device Manager และดท Ports (COM & LPT) จะเหนบรรทด Silicon Labs CP210x USB to UART Bridge (COMx) เชน เปน COM3 เปนตน

2.2 เปดโปรแกรม Arduino IDE และไปทเมน Tools -->Board --> NodeMCU 1.0 (ESP-12E Module) จากนนไปทเมน Tools > Port ถามหลาย Port แสดงอย ใหตรวจสอบวาตรงกบ Port ใน 2.1

3. ใน Arduino IDE ไปท File --> New เพอเขยนโปรแกรมดงน

void setup() {

// put your setup code here, to run once:

pinMode(D0, OUTPUT);

}

void loop() {

// put your main code here, to run repeatedly:

digitalWrite(D0,1);

delay(500);

digitalWrite(D0,0);

delay(500);

}

Page 48: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 48

เมอเขยนโคดเรยบรอยแลว ใหกดป มลกศรเพอ Compile และ Upload หากไมมขอผดพลาด โปรแกรมท Compile จะถก Flash ลงไปบน NodeMCU และเรมตนการท างานอตโนมต ตวอยางขางลางเปนโปรแกรมทจะสงใหไฟ LED บนบอรด กระพรบดวยคาบเวลาปดเปด 0.5 วนาท

รปท 4.2 ตวอยางการเขยนโปรแกรมลงใน NodeMCU

Lab 4.1: NETPIE Blink

Lab 4.1 เปนการโปรแกรม NodeMCU ใหตอบสนองตอขอความ (Message) “1” และ “0” โดยถาไดรบขอความ “1” NodeMCU จะเปด LED แตถาเปน “0” จะปด LED

1. เปดไฟล netpie_blink.ino ใน Folder เพอแกไข หรอสรางไฟลขนใหมตามโคดดานลาง

2. สราง AppID และสราง Application Key โดยเลอกชนด Device Key

3. ใส APPID, KEY, และ SECRET ลงในไฟล

4. Save และ Upload ไฟลเขา NodeMCU

5. เปด Console โดยไปท Tools --> Serial Monitor หากโปรแกรมถกตองจะเหนตามแสดงในหนาตาง Console ดงแสดงในรปท 4.3 สงเกตจงหวะการเปดและปดไฟเทยบกบบรรทด Incoming message 0 หรอ 1

ขาพอรต D0 เปนขา Output

คาของเวลา Delay ม

หนวยเปนมลลวนาท

Page 49: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 49

netpie_blink.ino

// #include สองบรรทดดานลางนตองมเสมอ

#include <ESP8266WiFi.h>

#include <MicroGear.h>

const char* ssid = "SSID"; // ใสชอ WiFi SSID แทน SSID

const char* password = "PASSWORD"; // ใสรหสผาน WiFi แทน PASSWORD

#define APPID "YOUR_APPID" // ให YOUR_APPID แทนทดวย AppID

#define KEY "YOUR_KEY" // ให YOUR_KEY แทนทดวย Key

#define SECRET "YOUR_SECRET" // ให YOUR_SECRET แทนทดวย Secret

#define ALIAS "pieblink" // ตงชอเลนให device น เปน pieblink

WiFiClient client;

int timer = 0;

char state = 0;

MicroGear microgear(client); // ประกาศตวแปร microgear

// สรางฟงกชนทจะถกเรยกเมอมขอความเขามา

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {

Serial.print("Incoming message -->");

msg[msglen] = '\0';

Serial.println((char *)msg);

// ถาขอความทเขามาเปน 1 ใหเปด LED ถาเปน 0 ใหปด LED

if(*(char *)msg == '1'){

digitalWrite(LED_BUILTIN, LOW); // LED on

}else{

digitalWrite(LED_BUILTIN, HIGH); // LED off

}

}

// สรางฟงกชนทจะถกเรยกเมอ Microgear เชอมตอกบ NETPIE ส าเรจ

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.println("Connected to NETPIE...");

Page 50: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 50

// เราอาจจะใชโอกาสนตงชอหรอเปลยนชอหรออาจจะท าอะไรบางอยางเชน subscribe

microgear.setAlias(ALIAS);

}

void setup() {

// ประกาศใหเวลามขอความเขามาใหไปท าฟงกชน onMsghandler()

microgear.on(MESSAGE,onMsghandler);

// ประกาศใหเมอเชอมตอส าเรจใหไปท าฟงกชน onConnected()

microgear.on(CONNECTED,onConnected);

Serial.begin(115200);

Serial.println("Starting...");

pinMode(LED_BUILTIN, OUTPUT);

// initiate Wifi

if (WiFi.begin(ssid, password)) {

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

}

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

// initialize ตวแปร microgear

microgear.init(KEY,SECRET,ALIAS);

// เชอมตอไป NETPIE ไปยง AppID ทก าหนด

microgear.connect(APPID); // ฟงกชนเชอมตอ NETPIE

}

void loop() {

// เชควา Microgear ยงเชอมตออยหรอไม

if (microgear.connected()) { // ตรวจสอบการเชอมตอ NETPIE

Serial.println("connected"); // พมพแจงการเชอมตอ NETPIE ส าเรจ

Page 51: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 51

// เราตองเรยก microgear.loop() เปนระยะ เพอรกษาการเชอตอ

microgear.loop();

if (timer >= 1000) {

Serial.println("Publish..."); // พมพแจงการสงขอมล NETPIE

// chat หาตวเองดวย state ทตรงขามกน

if(state==0){

microgear.chat(ALIAS,state);

state=1;

}else{

microgear.chat(ALIAS,state);

state=0;

}

timer = 0;

}

else timer += 100;

}

else {

Serial.println("connection lost, reconnect...");

if (timer >= 5000) {

microgear.connect(APPID);

timer = 0;

}

else timer += 100;

}

delay(100);

}

Page 52: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 52

รปท 4.3 Console ของโปรแกรม netpie_blink

กลาวโดยสรปคอ โปรแกรมนสงให NodeMCU ท าการ Chat หาตวเองทกๆ 1 วนาท ดวยคาทตรงขามกบสถานะปจจบน (ถาเปดอย จะสง “0” แตถาปดอยจะสง “1”) สลบกนไปเรอยๆ ผลทเกดขนคอ LED จะกระพรบทก 1 วนาท เปนตวอยางของการเรยกใช Microgear Function เพอท าอะไรบางอยางเมอมขอความเขามา

Lab 4.2: IoT Switch

Lab 4.2 จะแสดงการสอสารแบบสองทางระหวาง Thing 2 ชนดคอทงฮารดแวรและซอฟตแวร โดยจะให HTML5 สงคา 0 และ 1 ไปยง NodeMCU เมอ NodeMCU ไดรบขอความจะกระท าตามเงอนไขทก าหนด และตอบกลบมายง HTML5 ขนตอนคอ

Page 53: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 53

1.ฝง NodeMCU เขยนไฟล pieled.ino ซงดดแปลงมาจากโคด netpie_blink.ino ใน Lab 4.1 (เพยงแตตดสวนตงเวลาและ Chat หาตวเองออก) และสามารถใช AppID, Key และ Secret เดมทใชใน Lab 4.1 ได

2.ฝง HTML5 Switch ใหเขยนโคด switch.html โดยใช AppID เดยวกบฝง NodeMCU แตใหไปสราง Application Key ใหมชนด Session Key

3. ใส APPID, KEY, และ SECRET ลงในไฟลทงสอง

4. Save และ Upload ไฟล pieled.ino เขาไปยง NodeMCU

5. เปด Console โดยไปท Tools Serial Monitor และใช Browser เปดไฟล switch.html

6. กดป ม Switch บน Browser เพอท าการเปดปดไฟ

pieled.ino

#include <ESP8266WiFi.h>

#include <MicroGear.h>

const char* ssid = "YOUR_SSID";

const char* password = "YOUR_PASSWORD";

#define APPID "YOUR_APPID"

#define KEY "YOUR_KEY"

#define SECRET "YOUR_SECRET"

#define ALIAS "pieled"

WiFiClient client;

int timer = 0;

MicroGear microgear(client);

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {

Serial.print("Incoming message -->");

msg[msglen] = '\0';

Serial.println((char *)msg);

if(*(char *)msg == '1'){

digitalWrite(LED_BUILTIN, LOW); // turn on the LED

microgear.chat("switch","1");

Page 54: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 54

}else{

digitalWrite(LED_BUILTIN, HIGH); //turn off the LED

microgear.chat("switch","0");

}

}

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.println("Connected to NETPIE...");

microgear.setName(ALIAS);

}

void setup() {

microgear.on(MESSAGE,onMsghandler);

microgear.on(CONNECTED,onConnected);

Serial.begin(115200);

Serial.println("Starting...");

pinMode(LED_BUILTIN, OUTPUT);

if (WiFi.begin(ssid, password)) {

while (WiFi.status() != WL_CONNECTED) {

delay(1000);

Serial.print(".");

}

}

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

microgear.init(KEY,SECRET,ALIAS);

microgear.connect(APPID);

}

void loop() {

if (microgear.connected()) {

Serial.println("...");

microgear.loop();

Page 55: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 55

timer = 0;

}

else {

Serial.println("connection lost, reconnect...");

if (timer >= 5000) {

microgear.connect(APPID);

timer = 0;

}

else timer += 100;

}

delay(100);

}

switch.html

<script src="https://cdn.netpie.io/microgear.js"></script>

<script>

const APPID = “YOUR_APPID”;

const KEY = “YOUR_KEY”;

const SECRET = “YOUR_SECRET”;

const ALIAS = "switch";

var microgear = Microgear.create({

key: KEY,

secret: SECRET,

alias : ALIAS

});

function toggle() {

if(document.getElementById("button").innerText=="off"){

microgear.chat('pieled','1');

}

else{

microgear.chat('pieled','0');

}

}

microgear.on('message',function(topic,msg) {

Page 56: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 56

document.getElementById("data").innerHTML = msg;

if(msg=="1"){

document.getElementById("button").innerText="on";

}else if(msg=="0"){

document.getElementById("button").innerText="off";

}

});

microgear.on('connected', function() {

microgear.setAlias(ALIAS);

document.getElementById("data").innerHTML = "Now I am connected with

netpie...";

});

microgear.connect(APPID);

</script>

<div id="data">_____</div>

<center>

<button onclick="toggle()" id="button">off</button>

</center>

Page 57: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 57

5. FREEBOARD

Freeboard เปน Web Application ทสามารถสราง Dashboard เพอแสดงผลส าหรบ IoT แอปพลเคชนโดยสามารถใชเปนกระดานสวนตว สามารถวางป มกดสวตชไวใชส าหรบควบคมอปกรณ หรอวางหนาปดเพอแสดงผลขอมลตางๆ ทไดจากอปกรณ เชน เซนเซอรในระบบ IoT นอกจากนยงสามารถแสดงผลเปนกราฟได สวนหนากระดานหรอ Dashboard นน สามารถปรบแตงไดโดยงาย เพยงแคปอนขอมลเขาหรอก าหนดค าสงกสามารถท างานไดแลว โดยทผใชไมจ าเปนตองเขยน HTML Web Page เองและทส าคญคอขอมลนนมการอพเดทแบบ Real-time มความเสถยรและเชอถอได และเปน Open-Source ซงท าใหนกพฒนาสามารถตอยอดใหดยงขนไดอกดวย

NETPIE Freeboard คอ Freeboard ส าหรบการควบคมและการแสดงผล (Visualization) ขอมลทดงมาจากอปกรณทตอกบ NETPIE ทมงานไดพฒนา Widget Plugins ขนมาใหผใชงานสามารถท าตามความตองการไดหลากหลาย เชน สามารถสรางป มควบคมและใสค าสง Javascript ส าหรบ Action ตางๆ ได การใชงาน NETPIE Freeboard นนสามารถใช Browser เปดไฟล index.html ทไดจากการตดตง NETPIE Freeboard หรอสามารถใช Freeboard ผานทางหนาเวบของ NETPIE

รปท 5.1 Dashboard ของ NETPIE Freeboard

Page 58: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 58

วธท 1 การใช NETPIE Freeboard ทตดตงในเครองแบบ Local

1. ดาวนโหลดและตดตง NETPIE Freeboard จาก Github (https://github.com/netpieio/netpie-freeboard) กดทป ม Clone or download เพอเรมท าการดาวนโหลดไฟลแบบ Download ZIP

2. แตกไฟลใน ZIP Folder แลวใช Browser เปดไฟลทชอ index.html จะปรากฏหนาส าหรบใหใสขอมล

3. ปรบแตงคาใน NETPIE Freeboard ตามรายละเอยดทจะอธบายในล าดบถดไป

วธท 2 การใช NETPIE Freeboard ผานทางหนาเวบ NETPIE

1. เขาสระบบ NETPIE Account แลวไปทเมน RESOURCES FREEBOARDS

2. คลกเครองหมาย + เพอสราง Freeboard ขนมาใหม

3. ตงชอ Freeboard แลวกดป ม CREATE

4. ปรบแตงคาใน NETPIE Freeboard ตามรายละเอยดทอธบายในล าดบถดไป

ตวอยางการปรบแตงเบองตน

Main Menu

IMPORT เปนเมนส าหรบอพโหลดไฟล Configuration ของหนา Freeboard ทบนทกเกบไว

EXPORT เปนเมนส าหรบน าไฟล Configuration ออก (Export)

RESET เปนเมนส าหรบลาง Datasource และ Widget ทสรางไว

ADD PANE เปนเมนส าหรบเพม Panel ในการจดวาง Widget

Datasources Menu

Page 59: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 59

ADD เปนเมนส าหรบเพม Datasource ทเปนแหลงขอมลทจะเชอมตอเพอดงออกมาแสดง

รปท 5.2 การเพม Datasource

1. ดานลาง DATASOURCES คลกท ADD จะปรากฏ Datasource Type ชนดตางๆ ใหเลอกเปน NETPIE Microgear

รปท 5.3 การเลอกประเภทของ Datasource

2. ใสขอมลส าหรบ Datasource ซงประกอบดวย

NAME คอ ชอเรยก Datasource ทใชอางอง (ไมเกน 16 ตวอกษร) ในตวอยางในภาพดานลางคอ dashboardMonitor

APP ID คอ App ID ทไดสรางผานหนาเวบ https://netpie.io/app ในตวอยางในภาพดานลางคอ PieSmartHome

KEY คอ Key ทไดจากการสราง App Key บนเวบ NETPIE

SECRET คอ Secret ของ Key บนเวบ NETPIE

Page 60: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 60

SUBSCRIBED TOPIC คอ Topic ทใชส าหรบการรบสงขอมลทอยภายใน APPID นนๆ กรณนใชเปน /# มความหมายวา รบขอความจากทก Topic

เมอกรอกขอมลเสรจกด SAVE

รปท 5.4 การระบขอมลของ Datasource

3. เพม Panel ส าหรบสราง Widget ดวยการคลกท ADD PANE จะปรากฏ Panel เพมขนมาดานลาง

Page 61: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 61

รปท 5.5 การเพม Panel ส าหรบสราง Widget

4. เพม Widget บน Panel ทสรางขนใหมโดย คลกทเครองหมาย + และเลอกชนดของ Widget เชน Gauge ตามตวอยางในรป

รปท 5.6 การเลอกประเภทของ Widget

5. กรอกขอความลงไปดงน แลวกด Save

TITLE ตงชอให Widget น

VALUE ใหคลกท + DATASOURCE จะขนรายชอของ Datasource ทไดสรางไว และสามารถเลอกชอทมอย และพมพเพมเตมตาม Format เบองตนดงน

datasources["YourDatasourceName"]["/YourAppID/YourSubscribeTopic"]

UNITS สามารถใสหนวยวดทตองการ หรอเวนวางไวกได

Page 62: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 62

ขนตอนทงหมดคอ การสรางโครงของมาตรวดหรอ Gauge เบองตน ทยงไมไดแสดงผล เนองจากยงไมมการระบใหเชอมตอกบอปกรณหรอเซนเซอรเพอรบขอมลเขามาเปน Datasource ซงจะเราจะแสดงรายละเอยดใน Lab 5.1 ตอไป

Lab 5.1: การแสดงผลขอมลจากอปกรณเซนเซอรบน NETPIE Freeboard

Lab 5.1 เปนการสรางแอปพลเคชนเซนเซอรวดอณหภมและความชนดวย NodeMCU และเซนเซอรโมดล DHT11 (อปกรณ ZX-DHT11 ใน IoT Kit) ในขนแรกผใชตองตดตง Library ทเกยวของกบเซนเซอรกอน ซงในทนคอ DHT.h ซงสามารถดาวนโหลดไดท https://github.com/adafruit/DHT-sensor-library ใหผใชงานคดลอกไปวางไวใน Folder Arduino\libraries

ในภาพดานลางแสดงการเชอมตอ เซนเซอร DHT11 กบ NodeMCU

รปท 5.7 วธการเชอมตอ DHT-11 เขากบ NodeMCU

หลงจากเชอมตอเสรจ ใหท าตามขนตอนดงน

Page 63: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 63

1. ฝง NodeMCU สามารถเขยนโคดสรางไฟล piedht.ino ตามขางลางและ Upload ไฟลเขา NodeMCU

piedht.ino

#include <DHT.h>

#include <ESP8266WiFi.h>

#include <MicroGear.h>

const char* ssid = "SSID";

const char* password = "PASSWORD";

#define APPID "YOUR_APPID"

#define KEY "YOUR_KEY"

#define SECRET "YOUR_SECRET"

#define ALIAS "piedht"

WiFiClient client;

int timer = 0;

char str[32];

#define DHTTYPE DHT11 // Define sensor type

#define DHTPIN D4 // Define sensor pin

DHT dht(DHTPIN, DHTTYPE, 15); //Initialize DHT sensor

int humid;

int temp;

MicroGear microgear(client);

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {

Serial.print("Incoming message -->");

msg[msglen] = '\0';

Serial.println((char *)msg);

}

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.println("Connected to NETPIE...");

Page 64: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 64

microgear.setAlias(ALIAS);

}

void setup(){

dht.begin();

microgear.on(MESSAGE,onMsghandler);

microgear.on(CONNECTED,onConnected);

Serial.begin(115200);

Serial.println("Starting...");

if (WiFi.begin(ssid, password)) {

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

}

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

microgear.init(KEY,SECRET,ALIAS);

microgear.connect(APPID);

}

void loop(){

if (microgear.connected()) {

Serial.println("connected");

microgear.loop();

if (timer >= 1000) {

humid = dht.readHumidity();

temp = dht.readTemperature();

sprintf(str,"%d,%d",humid,temp);

Serial.println(str);

Serial.print("Sending -->");

microgear.publish("/dht",str);

Page 65: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 65

timer = 0;

}

else timer += 100;

}

else {

Serial.println("connection lost, reconnect...");

if (timer >= 5000) {

microgear.connect(APPID);

timer = 0;

}

else timer += 100;

}

delay(100);

}

ในตวอยางน ค าสง microgear.publish(“/dht”,str) คอการ Publish ขอความ (ในทนเปน Message String str) ไปยง Topic ทระบคอ /dht ซงขอความคอคาของอณหภมและความชนทวดไดจากเซนเซอร DHT

2. เปด Console โดยไปท Tools ->Serial Monitor เพอตรวจสอบวาเซนเซอรท างานไดปกตหรอไม

รปท 5.8 คอนโซลตรวจสอบการท างานของเซนเซอร

3. ฝง NETPIE Freeboard คลกท Datasource ทสรางขนกอนหนาน และแกไขในชอง SUBSCRIBED TOPICS ใหเปน /dht

Page 66: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 66

4. กด + (ADD PANE) เพอสราง Widget ชนด Gauge ใหม 2 Widget เพอแยกแสดงอณหภมและความชน โดยกรอกตงคาแตละ Widget ดงน

Widget 1:

TITLE : Humidity

VALUE : datasources["YourDatasourceName"]["/YourAppID/dht"].split(",")[0]

UNIT : %

MINIMUM : 0

MAXIMUM : 100

Widget 2:

TITLE : Temperature

VALUE : datasources["YourDatasourceName"]["/YourAppID/dht"].split(",")[1]

UNIT : C

MINIMUM : 0

MAXIMUM : 50

ภาพดานลางแสดงตวอยางการกรอกขอมลเพอสราง Widget แสดงคาความชน (Humidity)

Page 67: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 67

รปท 5.9 ตวอยางหนาจอตงคา Widget แสดงคาความชน

Widget แสดงผลอณหภมและความชนทสรางขนจะมลกษณะตามแสดงในรป

รปท 5.10 Widget แสดงคาอณหภมและความชนทวดไดจากเซนเซอร

Page 68: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 68

ค าอธบายเพมเตม

เนองจาก DHT สงคามาในรปแบบ "Humidity,Temperature" เชน "40,24" เวลาเรารบคาเขามา จงตองท าการแยกออกเปน Array โดยใชเครองหมาย Comma “,” เปนตวแบง จากนนกอางองถงชองใน Array ของ Message String ท Publish ใน Topic /dht เชน Index [0] หมายถงคาแรก และ Index [1] หมายถงคาถดมา

Lab 5.2: การควบคมอปกรณดวย NETPIE Freeboard

Lab 5.2 แสดงการประยกต NETPIE Freeboard ในการควบคมอปกรณ โดยในเบองตนน เราจะควบคมไฟ LED บนบอรด NodeMCU ซงใชหลกการท างานบนพนฐานของการ Subscribe ขอความจาก Topic หรอหวขอทระบ และการก าหนดตรรกะของการควบคมทงในสวนของ Datasource และสวนของ Widget ทใชควบคม โดยมขนตอนดงตอไปน

1. แกไขไฟล pieled2.ino โดยระบขอมลการเขาถงเครอขาย Wifi ขอมล APPID, KEY และ SECRET ตามโคดขางลาง และท าการ Upload ไฟลเขา NodeMCUใหเชอมตอกบ NETPIE

pieled2.ino

#include <ESP8266WiFi.h>

#include <MicroGear.h>

const char* ssid = "SSID";

const char* password = "PASSWORD";

#define APPID "YOUR_APPID"

#define KEY "YOUR_KEY"

#define SECRET "YOUR_SECRET"

#define ALIAS "pieled"

WiFiClient client;

char state = 0;

char stateOutdated = 0;

Page 69: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 69

char buff[16];

MicroGear microgear(client);

void sendState(){

if (state==0)

microgear.publish("/pieled/state","0");

else

microgear.publish("/pieled/state","1");

Serial.println("send state..");

stateOutdated = 0;

}

void updateIO(){

if (state >= 1) {

digitalWrite(LED_BUILTIN, LOW);

}

else {

state = 0;

digitalWrite(LED_BUILTIN, HIGH);

}

}

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {

char m = *(char *)msg;

Serial.print("Incoming message -->");

msg[msglen] = '\0';

Serial.println((char *)msg);

if (m == '0' || m == '1') {

state = m=='0'?0:1;

updateIO();

}

if (m == '0' || m == '1' || m == '?') stateOutdated = 1;

}

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.println("Connected to NETPIE...");

Microgear.setAlias(ALIAS);

Page 70: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 70

stateOutdated = 1;

}

void setup(){

Serial.begin(115200);

Serial.println("Starting...");

pinMode(LED_BUILTIN, OUTPUT);

if (WiFi.begin(ssid, password)) {

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

}

microgear.on(MESSAGE,onMsghandler);

microgear.on(CONNECTED,onConnected);

microgear.init(KEY,SECRET,ALIAS);

microgear.connect(APPID);

}

void loop(){

if (microgear.connected()) {

if (stateOutdated) sendState();

microgear.loop();

}

else {

Serial.println("connection lost, reconnect...");

microgear.connect(APPID);

}

}

2. ในหนา NETPIE Freeboard คลกเพม Datasource ทสรางขนกอนหนานเพอแกไข ตงชอ Datasource ใสคา KEY และ SECRET และในชอง SUBSCRIBED TOPICS ใหใส /pieled/state หรอ Topic ททานระบไวส าหรบการ publish ในไฟล pieled2.ino ดงแสดงในภาพดานลาง และกด Save

Page 71: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 71

รปท 5.11 หนาตางตงคา Datasource ใน NETPIE Freeboard ส าหรบควบคม LED

3. สราง Widget ขนมาใหมโดยกด + (ADD PANE) และเลอกชนดใน Drop Down Box เปนแบบ Toggle

รปท 5.12 หนาจอเลอกชนด Widget ใหเปนแบบ Toggle

จากนนตงคา Widget ดงนโดยหนาจอการตงคาแสดงดงรป

TOGGLE CAPTION : ตงชอป ม Toggle (ในตวอยางตงเปน PIE_LED)

Page 72: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 72

TOGGLE STATE : ใสขอมลตามชอของ Datasource และ Topic เชน datasources["netpie_control"]["/PieSmartHome/pieled/state"]==1

ON TEXT : ON

OFF TEXT : OFF

ONTOGGLEON ACTION : microgear['netpie_control'].chat('pieled','1')

ONTOGGLEOFF ACTION : microgear['netpie_control'].chat('pieled','0')

รปท 5.13 หนาจอการตงคา Widget ชนด Toggle

แลวกด Save จะได Widget ทมป มควบคมดงแสดงในภาพ เพอทดสอบเปดปด LED บน NodeMCU

รปท 5.14 Widget ใชเปดปด LED บน NodeMCU

Page 73: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 73

ค าอธบายเพมเตม

TOGGLE STATE เปนสถานะ On/Off ซงสามารถผกกบตรรกะของ Datasource ในทนเราตงคาให Toggle เปลยนสถานะตามคาทสงมาใน Topic ชอ /pieled/state

ONTOGGLEON และ ONTOGGLEOFF เปนค าสงทจะถกเรยก เมอ Toggle เปลยนสถานะไปเปน ON และ OFF ตามล าดบ

ในหนา Datasources ตรงชอง SUBSCRIBED TOPICS นน นอกจากจะสามารถระบคาแบบเจาะจงเปน topic /pieled/state แลว ยงสามารถระบคาเปน /pieled/+ กได โดยใชเครองหมาย (+) ซงเปน Single-Level Wildcard เพอรบคาของ State

เราสามารถใช Wildcard เพอชวยในการ Subscribe Topic ตางๆ เชน หากตองการ

Subscribe Topic ตามทระบแบบเจาะจงดงน: "/home/kitchen/temp", "/home/bedroom/temp", และ "/home/livingroom/temp" กสามารถยบเหลอ 1 Topic คอ "/home/+/temp"

นอกจาก + แลวยงใชเครองหมาย # ไดดวย โดยทเครองหมาย + จะแทนค าอะไรกไดระดบชนเดยว สวน # จะแทนค าอะไรกไดในระดบชนยาวตอไปเทาไหรกได เชนจะให match 3 Topic ขางตน กอาจจะเขยนระบเปน Topic คอ "/home/#"

Page 74: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 74

6. NETPIE FEED

ขอมลทเกดจากการอานคาของอปกรณเซนเซอรในบททแลว สามารถน ามาใชใหเกดประโยชนไดอยางหลากหลาย เชน ใชส าหรบการตรวจสอบ (Monitoring) หรอการแสดงผลของขอมล (Data Visualization) โดยเฉพาะอยางยงขอมลแบบทนเวลา (Real-time Data) ซงจะตองเกบรวบรวมดวยอตราความถทเหมาะสมเพอใหการตรวจสอบหรอการแสดงผลตรงตามความตองการ ในปจจบนแพลตฟอรม NETPIE มบรการทสามารถเกบขอมลและแสดงผลทเรยกวา Feed ซงท าหนาทเสมอนถงเกบขอมล ประเภท Time-Series กลาวคอ เปนชดขอมลหรอคาตวแปร ณ เวลาตางๆ เชนอณหภมอากาศในชวงเวลาตางๆ ของวน เปนตน ขอมลเหลานจะถกเกบแบบตอเนองสะสมกนไปตลอด และสามารถเรยกออกมาดในชวงเวลาใดกได ในบทนจะอธบายรายละเอยดการใชงาน NETPIE Feed ตงแตการตงคาการเกบขอมลจาก Datasource ไปจนถงการแสดงผล

6.1 การสราง FEED

1. เลอก FEEDS จากเมน RESOURCES

รปท 6.1 การเขาใชงาน Feed จากเมน Resources

2. สราง Feed ใหม หรอเพม Feed ดวยการคลกทเครองหมาย + ทมมบนของ Feed

รปท 6.2 การสรางหรอเพม Feed ใหม

Page 75: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 75

3. ตงชอ Feed โดยทชอนจะตองไมซ ากบทเคยมมากอน และหามซ ากบของผใชอน เมอตงชอแลวให

คลก CREATE เพอสราง Feed

รปท 6.3 การตงชอ Feed

4. เมอสราง Feed ส าเรจ จะเขาสหนาตงคา Feed ตามภาพขางลาง ในตวอยางน ไดสรางสราง

Feed ทมชอวา “mysensor” ซงจะไปปรากฏในหนารวม Feed เมอเราเขามาในครงตอไปเราสามารถกลบมาทหนาตงคานไดอกจากหนารวมของ Feed โดยคลกทเครองหมายรปประแจดานขวามอหลงชอ Feed ทตองการ

รปท 6.4 หนาตงคา Feed

5. เนองจาก Feed ทสรางขนใหมนยงไมสามารถรบคาใดๆ เขามาได จงตองสราง Field ขนมารบ

ขอมล ใหกดป ม + ADD จะปรากฏหนาตางใหตงคาตางๆ ในตวอยางน เปนการสราง Field จ านวน 2 Field ทมชอวา temp และ humid (หรอจะตงเปนชออะไรกได) หากมหนวยกระบไวเพอการแสดงผลตอไป โดย ณ ขณะนยงรองรบเฉพาะขอมลชนดตวเลข (Number) เทานน โดยในอนาคตมอาจมการพฒนาเพมเตมใหรองรบขอมลชนดอนๆ

Page 76: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 76

รปท 6.5 การสราง Field เพอรบขอมล Feed

6. คลก SAVE จะได Feed ทพรอมรบคารายละเอยดการปรบแตงอยในล าดบถดไป

รปท 6.6 ตวอยาง Feed ทสรางขนดวย 2 Field

6.2 การก าหนดสทธในการเขาถง FEED

เนองจาก Feed แตละอนทสรางขนมานน เปน Resource อสระทไมขนกบ AppID ดงนนในการน าไปใชงานจ าเปนตองมเรองของการก าหนดสทธ การใหสทธกบอปกรณทจะเขามาอานหรอเขยน Feed มดวยกน 2 วธ ไดแก

1. การใช API Key ทปรากฎอยในแทบ Permission วธนจะอนญาตให Client ทม API key

สามารถอานเขยน Feed นได วธการน า API key ไปใชจะกลาวถงในตอไป

Page 77: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 77

2. การใหสทธกบ AppID ใชไดกบเฉพาะ AppID ของเจาของ Feed เทานนวธนมไวเพออ านวย

ความสะดวกในขนตอนการพฒนาเนองจากเปนการใหสทธกนผานเวบ จงไมตองเขาไปแกโคด

โปรแกรมการใหสทธกบ AppID จะท าใหทกอปกรณใน AppID นนมสทธอานหรอเขยน Feed น

เหมอนกนหมด การตงคาท าไดโดยคลกทแทบ Permission และคลกท EDIT ตามภาพ

รปท 6.7 การตงคาสทธในการเขาถง

จากนนพมพ AppID ทตองการใหสทธ หรอเลอกจากเมน Drop-Down และคลก SAVE ในตวอยาง

ขางลาง เปนการใหสทธกบ AppID ทชอ “iotdemo” ดงนนทกอปกรณภายใต AppID น จะสามารถอาน

เขยน Feed ไดโดยอตโนมต การอนญาตแบบนจะเปนการแจกสทธในรปแบบเดยวกบการน า Default API

key ของ Feed ไปใช

เราสามารถใหสทธกบ AppID ทเราเปนเจาของเทานน

Page 78: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 78

รปท 6.8 การใหสทธการเขาถง Feed กบ AppID

6.3 การเขยนขอมลลงใน FEED

การเขยนขอมลเพอเกบใน Feed ม 2 วธ ดงน

วธท 1 ใช REST API (ขอมลและการใชงานโดยละเอยดของ REST API อยในบทท 7)

REST API สามารถเรยกผาน Command Line ไดโดยใชโปรแกรม curl ซงเปน HTTP Client แบบ Command Line ทนกพฒนานยมใชกนมาก ในระบบปฏบตการ Mac OSX และ Linux โปรแกรมนจะถกตดตงมาแบบพรอมใชงานอยแลว เพยงแคเปด Terminal กสามารถพมพค าสงไดเลย แตส าหรบ Windows อาจตองตดตงโปรแกรมเพม โดยสามารถดาวนโหลดไดจาก https://curl.haxx.se/download.html

การเขยน Feed ผาน REST API จะตองกระท าโดยใช API Key ควบคกนไปดวยเสมอ และมรปแบบค าสงทเรยกผาน curl บน Terminal ดงน (เครองหมาย$ ไมตองพมพลงไป ใสไวเพอสอวาเปน Command Line)

$ curl -X PUT

"https://api.netpie.io/feed/<FEEDID>?apikey=<APIKEY>&data=<DATA>"

ตวอยางการสงคา temp = 25.2 และ humid = 62.5 ไปเขยนท Feed ชอ mysensor จะใชค าสงดงน

$ curl -X PUT

"https://api.netpie.io/feed/mysensor?apikey=5DunZ38nKP5dGC0h4Bj7mXyeMURdoXO

o&data=temp:25.2,humid:62.5"

เมอพมพเสรจใหกด Enter หากไมมขอผดพลาด จะมขอความขนมาดงน {“code”:200,”message”:”Update OK”}

Page 79: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 79

เมอกลบไปดทหนา Feed เราจะเหนจดขอมลปรากฏขนมาแบบนขอทควรระวงคอ ชอ Field ขอมลในค าสง (temp และ humid) จะตองตรงกบชอ Field ทไดสรางรอเอาไวบน Feed เพอใหขอมลถกจดเกบส าเรจ

รปท 6.9 การสรางขอมลไปเกบใน Feed ดวย command curl

วธท 2 ใช Microgear Function

ส าหรบอปกรณทตอ NETPIE ผาน Microgear Library อยแลว สามารถสงคาเขาไปใน Feed ผาน Real-time Message ไดเลยโดยใชฟงกชน microgear.writeFeed() ซงจะมใน Library ปจจบนทกภาษาของ NETPIE อยแลว (หากไมมโปรดอพเดทใหเปนเวอรชนลาสด) การเขยน Feed ดวย Microgear น ในกรณทเราไดใหสทธกบ AppID ไวแลว กไมจ าเปนตองใส API Key ลงไปรปแบบการใชฟงกชนมดงน

microgear.writeFeed("<FEEDID>","<DATA>")

โดยท DATA เปน String ทมลกษณะเดยวกบ REST API ดงตวอยางน

microgear.writeFeed("mysensor","temp:25.2,humid:62.5")

สวนของ DATA นอกจากรองรบ String รปแบบดงกลาวแลว เรายงสามารถสง String ทแปลงมาจาก json ไดดวย เชน “{\”temp\”:25.2,\”humid\”:62.5}” หรอหากเปน Node.js หรอ Javascript เรายงสามารถสงตวแปรทม Type เปน Object ไดเลยโดยไมตองแปลงเปน String กอน

Page 80: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 80

ในกรณทเรายงไมไดใหสทธกบ AppID ฟงกชนขางตนจะไดรบขอความ Error วาไมมสทธเขยน Feed จงตองใส API Key ลงไปในฟงกชนดวยซงจะเหมาะกบกรณทตองการใหมเฉพาะอปกรณเพยงบางตวเทานนทสามารถเขยน Feed ได รปแบบการเรยกจะเปนตามน

microgear.writeFeed("<FEEDID>","<DATA>","<APIKEY>")

ซงตวอยางการใชจรงจะอยในรปแบบดงน

microgear.writeFeed("mysensor","temp:25.2,humid:62.5","5DunZ38nKP5dGC0h4Bj7

mXyeMURdoXOo")

และทกครงทเราสงคาเขาไปท Feed ไมวาส าเรจหรอไม จะม Message ตอบกลบมาทาง Event Info หรอ Error เสมอ เราสามารถเชคสถานะการเขยน Feed ไดจากการรบ Event info และ Error ซงลกษณะการเรยกใชจะแตกตางกนเลกนอยตามรปแบบภาษาของ Library ทใชงาน รายละเอยดเพมเตมสามารถศกษาไดในสวนอธบาย Events ของเอกสาร readme ใน Microgear Library แตละภาษา

6.4 การดงขอมลจาก FEED มาใชงาน

NETPIE มวธใชงานขอมลจาก Feed อย 3 แบบดงน

วธท 1 การแสดงผลผานหนาการจดการของ Feed

เราสามารถใชหนา Feed ของ NETPIE.io ในการดคายอนหลงไดในลกษณะเสนกราฟและสามารถตงคาการแสดงผลไดจากแทบ Data Display ดงน

GRANULARITY คอความละเอยดของจดขอมล ตวอยางนตงไวท 12 นาท หมายความวาจดขอมลตางๆ ทเกบมาในชวงเวลาหนาตางละ 12 นาทจะถกน ามาเฉลยเปนจดเดยว

SINCE เปนเวลาตงตนยอนหลงทจะเรยกดขอมล BEGIN AT 0 ตงเปน TRUE จะเปนการตงคาแกน Y เรมตนท 0 MARKER แสดงวงกลมทจด AUTO GAP แทรกชองวางอตโนมต (ในกรณไมมขอมลในชวงเวลาทตงไว)

Page 81: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 81

รปท 6.10 หนาจอแสดงผลเสนกราฟของ Feed

วธท 2 การแสดงผลผานหนา Freeboard

นอกจากดคาผานหนาการจดการ Feed แลวเรายงสามารถดงคาของ Feed ไปแสดงผลบน NETPIE Freeboard รวมกบ Widget ตางๆ ไดอกดวย วธการใชงาน Freeboard สามารถดรายละเอยดไดจากบททแลว โดยในบทน เพอให Freeboard แสดง Feed ใหเลอกชนด Datasource ของ Freeboard เปน NETPIE Feed

รปท 6.11 การเลอกชนดของDatasource เพอใชงาน Feed

Page 82: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 82

เมอเสรจแลวจะเขาสหนาตงคา Datasource ใหกรอกขอมลดงน

NAME ตงชอเปนอะไรกได ในตวอยางน ตงชอวา “sensor feed” FEED ID ใส Feed ID ใหตรงกบชอ Feed ทสรางไวตามตวอยางในบทท 5 คอ “mysensor” AKI KEY ใส Default API key ทไดจากหนาตอนทสราง Feed

สวนตวเลอกทเหลอสามารถตงไดตามความเหมาะสม เมอเสรจแลวกดป ม SAVE

รปท 6.12 การตงคา Feed ใน Datasource

เมอตงคา Datasource บน Freeboard ส าเรจ Datasource จะเรมท างาน ขนตอไปคอการสราง

Widget ทดงขอมลจาก Datasource ของ Feed มาแสดงผล ซง NETPIE ม Widget ชอวา Feed View ไวส าหรบใชงานคกบ Feed Datasource การเพม Widget ใหมใหเลอกเพมหนาตางกอนดวยการกดป ม ADD PANE และใหกดป ม + ทหนาตางเพอเพม Widget และเลอกชนด Feed View ดงแสดงในภาพ

Page 83: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 83

รปท 6.13 การสราง Widget เพอดคาของ Feed

รปท 6.14 การเลอกชนดของ Widget เปน FeedView

ในการตงคา FeedView ตามภาพดานลาง ชองทส าคญทสดคอชอง DATASOURCE เราจะตอง

เลอก Datasource ทมชนดเปน NETPIE Feed โดยอางถง Field ทมชอวา data ของ Datasource นน สรปคอใหใสคาในลกษณะน

datasources[“<Feed Datasource Name>“][“data”]

Page 84: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 84

โดยท Feed Datasource Name ใหแทนทดวยชอของ Datasource ของ Feed ทเราตงไวกอนหนาน (ในตวอยางใชชอ “sensor feed”) หากไมสะดวกจะพมพ เราสามารถคลกตรงป ม +DATASOURCE ขางหลงชองจะมตวชวยเลอกในการกรอกคา ดงนนในตวอยางนตองใสวา

datasources[“sensor feed“][“data”]

รปท 6.15 การตงคา Widget ส าหรบ Feed

ตวเลอกทอนๆ สามารถปรบเปลยนไดตามความเหมาะสม

TITLE ขอความทจะขนบนกราฟ DATA SOURCE แหลงขอมลทจะดงมาแสดงผล FILTER เปนตวกรอง สมมตวาขอมลจาก data source ม 3 เสน ไดแก temp, humid และ light

หากเราอยากใหกราฟแสดงเฉพาะ temp และ humid กใสเฉพาะค าวา temp,humid ลงในชอง filter

TYPE OF CHART มสองตวเลอก ไดแก LINE กบ STEP X AXIS TITLE ขอความก ากบบนแกน X

Page 85: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 85

Y AXIS TITLE ขอความก ากบบนแกน Y BEGIN AT 0 ตงใหคา Y เรมตนท 0 หรอไม LINE COLORS หากตองการ สามารถเลอกสเสนกราฟได เคยใสเปนคาส HTML ตวอยางเชน

#ff0000,#00ff00,#0000ff หมายถง ก าหนดใหเสนแรกเปนสแดง เสนทสองเปนสเขยวและเสนทสามเปนสน าเงน กราฟมากกวาสามเสนน จะวนกลบไปเรมใชสแดงใหมในเสนถดไป

MARKER แสดงวงกลมทต าแหนงจดขอมล MULTIPLE AXIS แสดงแกน Y แยกส าหรบแตละคาควแปร ซงอาจจ าเปนตองใช ในกรณทคา

ขอมลแตละชดมสเกลทแตกตางกนมาก ถาจบมาพลอตบนแกนเดยวกน จะแสดงรายละเอยดไดไมดนก

AUTO GAP ตงใหตรวจสอบและแทรกชองวางอตโนมต หากขอมลหายไปนานผดปกต เสนกราฟจะปรากฎการขาดชวงใหเหน

คลก Save กจะได Widget ส าหรบแสดงผลกราฟทดงขอมลจาก Feed เราสามารถขยายขนาดความกวางของ Widget ได โดยการคลกไอคอนเครองมอดงแสดงในรปภาพ

รปท 6.16 การปรบแตงกราฟของ Feed

Page 86: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 86

รปท 6.17 การปรบแตงขยายความกวางของกราฟของ Feed

วธท 3 การแสดงผลผานหนา REST API

ส าหรบนกพฒนาทตองการน าคาจาก Feed ไปใชแบบอนๆ เชน แสดงผลใน Visualization Tool ของตนเอง หรอน าไปค านวณตอ กยงสามารถดงคาของ Feed จาก API ผาน Method GET ได ในรปแบบดงน

https://api.netpie.io/feed/<FEEDID>?apikey=<APIKEY>&granularity=<GRANULARIT

Y>&since=<SINCE>&filter=<FILTER>

FEEDID คอ Feed ID APIKEY คอ API Key GRANULARITY คอ ระดบความละเอยดของจดขอมล หนวยทสามารถเปนได ไดแก second,

minute, hour, day, month, year และใสตวเลขระบปรมาณน าหนาไดสวนหนวยเวลาจะเตม s หรอไมกได ไมมความแตกตาง เชน 15seconds หรอ 15second, 10minutes, 3hour ฯลฯ การตง Granularity เปน 5 minutes จะท าใหทกจดขอมลทเกบไดในชวง 5 นาท จะถกน ามาเฉลยเปนจดจดเดยวทใชเปนตวแทนของชวงดงกลาว

SINCE คอ ระยะเวลายอนหลงทจะดงขอมลออกมา รปแบบการเขยนเหมอนกบ Granularity ทกอยาง

Page 87: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 87

FILTER คอ ตวกรอง จะใสหรอไมใสกได ถาไมใสแปลวาไมมตวกรอง คอดงมาทกคา ถาใสใหใสเปนชอ Field ของขอมลทจะดงออกมาแสดง หากมหลาย Field ใหคนดวยเครองหมายคอมมา (,) เชน

https://api.netpie.io/feed/mysensor?apikey=5DunZ38nKP5dGC0h4Bj7mXyeMURdoXOo

&granularity=10minutes&since=24hours&filter=temp,humid

ผลลพธทไดจะเปน JSON ลกษณะตามดานลางน สวนของ Timestamp จะเปน Unix Timestamp แบบ Millisecond ของโซนเวลา GMT ดงนนหากจะน ามาใช ตองบวกเพม 7 ชวโมงใหเปนเวลาประเทศไทยดวย

{

"feedid": "mysensor",

"description": "",

"from": null,

"to": null,

"since": [

24,

"hours"

],

"granularity": [

1,

"minutes"

],

"data": [

{

"attr": "humid",

"unit": "%",

"values": [

[

1484031488709,

62.5

],

[

1484031500861,

62.6

]

]

},

{

"attr": "temp",

Page 88: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 88

"unit": "C",

"values": [

[

1484031488709,

25.2

],

[

1484031500861,

25.1

]

]

}

],

"lastest_data": [

{

"attr": "humid",

"values": [

[

1484031500861,

62.6

]

]

},

{

"attr": "temp",

"values": [

[

1484031500861,

25.1

]

]

}

]

}

Page 89: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 89

6.5 ขอจ ากดการใชงาน

บรการ NETPIE Feed เปดใหใชฟรส าหรบผใชทวไป ดงนนเพอแบงปนทรพยากรกนอยางเหมาะสม จะจ ากดอตราการเขยน Feed ตอ API Key ไวท 4 ครงในเวลาประมาณ 60 วนาท หรอเฉลยใหเขยนได 15 วนาท ตอ 1 จด และในเบองตนจะใหระยะเวลาเกบขอมลหนงป การเขยนขอมลลงใน Feed อาจจะเขยนผานทาง Microgear หรอ Client หลายตวเพยงแต Quota ของการเขยนกจะแบงกนไประหวาง Client ทใช API key เดยวกน ในสวนของการอานคานน จะจ ากดการเรยก API ไวท 5 ครงใน 5 วนาท การเรยก API แตละครง ถาอานหรอเขยนส าเรจจะมสถานะตอบกลบ ตามตวอยางน

{“code”:200,”message”:”Update OK”} หมายความวา ท างานส าเรจ

{“code”:401,”message”:”Unauthorized”} หมายความวา API Key ทใชไมมสทธเขาถง Feed

ดงกลาว

{“code”:429,”message”:”Rate limit exceeded, wait 2.286758 seconds”} หมายความวา ม

การเรยกใชงานเกนอตราทก าหนด

นอกจากสถานะตอบกลบแลว ในกรณของการเรยกผาน REST API สวนของ Reply กจะม HTTP Header แนบกลบมาดวยเพอบอกสถานะเกยวกบ Rate Limit และ Quota ทยงเหลออย ซงอาจเปนประโยชนตอนกพฒนา ตวอยางเชน หากเรยก API ส าหรบอานขอมลจาก Feed จ านวน 5 ครงตดกน ครงสดทายจะเหน Header ดงน

X-RateLimit-Interval: 5

X-RateLimit-Quota: 5

X-RateLimit-Minimum-Wait: 0

X-RateLimit-ToWait: 1.570335

เปนการบอกวาตองรออกประมาณ 1.57 วนาท จงจะสามารถ เรยก API เดมซ าอกครงได ซงหากผใชไมรอและเรยก API ตอทนท คาท Reply ครงถดไปจะมสถานะเปน 429 Rate limit exceeded

Lab 6.1: การแสดงผลขอมลเซนเซอรดวย NETPIE Feed

Lab นเปนการทบทวนการประยกตใช NETPIE Feed ในการดขอมลอณหภมและความชนทไดรบจากเซนเซอรโมดล DHT11 ผอบรมสามารถฝกการน าขอมลทเกบจาก Feed มาใชแสดงผลในรปแบบตางๆ พรอมทงเขาใจขดจ ากดการใชงานของระบบและบรการ

Page 90: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 90

1. สรางไฟล feed_dht.ino ตามโคดดานลาง โดยระบขอมลการเขาถงเครอขาย Wifi ขอมล APPID, KEY และ SECRET และท าการ Upload ไฟลเขา NodeMCU ใหเชอมตอกบ NETPIE

2. สราง Feed เพอรองรบคาของขอมลอณหภมและความชนทเซนเซอรสงมา ปรบแตงการแสดงผลตามความเหมาะสม (ใน Data Display)

3. เพม Datasource ส าหรบ Feed ในหนา Freeboard 4. เพม Widget เพอแสดงผล Feed ในหนา Freeboard 5. ทดลองเปลยนอตราการสงขอมลของ Feed จาก NodeMCU ใหเรวกวาคาของ INTERVAL ท

ระบ (หรอเรวกวาอตราเฉลยทเขยนไดคอ 15 วนาท ตอ 1 จด) สงเกตการเปลยนแปลงในการแสดงผลของขอมลวาเปนอยางไร มผลตอ Rate Limit หรอไม ในการดระยะหางระหวางจดของขอมลในระดบวนาท ควรปรบแตงชวงเวลาในการแสดงผลใหสนลง เชน อยในระดบ 1 นาท เปนตน

feed_dht.ino

#include <DHT.h>

#include <ESP8266WiFi.h>

#include <MicroGear.h>

const char* ssid = "SSID";

const char* password = "PASSWORD";

#define APPID "YOUR_APPID"

#define KEY "YOUR_KEY"

#define SECRET "YOUR_SECRET"

#define ALIAS "YOUR_MICROGEAR_NAME"

#define FEEDID "YOUR_FEED_ID"

#define INTERVAL 15000

#define T_INCREMENT 200

#define T_RECONNECT 5000

#define BAUD_RATE 115200

#define MAX_TEMP 100

#define MAX_HUMID 100

WiFiClient client;

Page 91: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 91

int timer = 0;

char str[32];

#define DHTTYPE DHT11 //Define sensor type

#define DHTPIN D4 // Define sensor pin

DHT dht(DHTPIN, DHTTYPE); //Initialize DHT sensor

float humid;

float temp;

MicroGear microgear(client);

// when the other thing send a msg to this board

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {

Serial.print("Incoming message --> ");

msg[msglen] = '\0';

Serial.println((char *)msg);

}

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.println("Connected to NETPIE...");

microgear.setAlias(ALIAS);

}

void setup() {

dht.begin();

microgear.on(MESSAGE,onMsghandler);

microgear.on(CONNECTED,onConnected);

Serial.begin(BAUD_RATE);

Serial.println("Starting...");

if (WiFi.begin(ssid, password)) {

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

}

Page 92: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 92

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

microgear.init(KEY,SECRET,ALIAS);

microgear.connect(APPID);

}

void loop() {

if (microgear.connected()) {

Serial.print("*");

microgear.loop();

if (timer >= INTERVAL) {

humid = dht.readHumidity();

temp = dht.readTemperature();

Serial.print("\nHumidity: ");

Serial.print(humid);

Serial.print(" %\t");

Serial.print("Temperature: ");

Serial.print(temp);

Serial.print(" C%\n");

String data = "{\"humid\":";

data += humid ;

data += ", \"temp\":";

data += temp ;

data += "}";

if (isnan(humid) || isnan(temp) || humid >= MAX_HUMID || temp>=

MAX_TEMP) {

Serial.println("Failed to read from DHT sensor!");

}else{

Serial.print("Sending -->");

Serial.println((char*) data.c_str());

microgear.writeFeed(FEEDID,data); //YOUR FEED ID, API KEY

}

timer = 0;

}

else timer += T_INCREMENT;

Page 93: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 93

}

else {

Serial.println("connection lost, reconnect...");

if (timer >= T_RECONNECT) {

microgear.connect(APPID);

timer = 0;

}

else timer += T_INCREMENT;

}

delay(200);

}

หมายเหต: ไฟล feed_dht.ino ไดรบการทดสอบดวยการ compile กบ ESP8266 Microgear Version

1.2.2 และ DHT Sensor Library by Adafruit Version 1.2.3

Page 94: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 94

7. NETPIE REST API

7.1 REST API

REST API (Representational State Transfer Application Programming Interface) หรอบางครงเรยกวา RESTful API หรอ REST Web API หมายถงการสอสารแลกเปลยนขอมลในแบบ Web Service ดวยการใช HTTP Method เชน GET POST PUT DELETE ขอมลทแลกเปลยนกนมกอยในรปแบบ JSON (JavaScript Object Notation) หรอ XML (eXtensible Markup Language) เดมทการสอสารแบบ Web Service จะใชโพรโทคอล SOAP เพอแลกเปลยนขอมล XML ผานทาง HTTP หรอเวบโพรโทคอล แตการสอสารดวย SOAP (Simple Object Access Protocol) นนม Overhead คอนขางสง ในขณะท REST นนเบากวา ขอมลมขนาดเลกกวา ใชแบนดวดทนอยกวา การแลกเปลยนขอมลแบบ REST จงเปนทนยม ปจจบนบรการ API ของ Facebook, Twitter, Google กเลอกใช REST API

คณสมบตของ Web Service ทใช REST API จะใช URI (Universal Resource Identifier) ในการเรยกขอมล เชน http://api.example.com/resources และใช HTTP Method ในการระบการกระท าตอขอมล เชน GET http://api.example.com/resources หมายถงเรยกดขอมล หรอ POST http://api.example.com/resources หมายถงการเขยนขอมล เปนตน

ตวอยางเชน หองสมดอาจจะท า API ใหผดแลระบบดงขอมลของหนงสอ ISBN 0596801688 โดยมรปแบบค ารองขอดงน

GET https://api.example.com/books/0596801688

และในขณะเดยวกน การลบ Record ของหนงสอ กอาจจะท าเปน API งายๆ แบบน

DELETE https://api.example.com/books/0596801688

สวน Operation อนๆ เชน POST กอาจจะเอาไวใชสรางขอมลใหม และ PUT ส าหรบการอพเดตขอมล ฯลฯ การใชงานแบบน ท าให API ดเปนธรรมชาต อธบายกงาย และดวยความท HTTP เปนโพรโทคอลมาตรฐานทมใชกนมานานแลว เราจงพบเจอ HTTP Client อยทกหนทกแหง บนทกภาษาโปรแกรม และในหลากหลายรปแบบการใชงาน แมแตบน Command Line กยงเรยกใชงานได

7.2 NETPIE REST API

NETPIE มบรการ REST API เตรยมไวให ส าหรบอปกรณทไมสามารถใช Microgear ผานโพรโทคอล MQTT ในการสอสารได หรอยงไมม Microgear ในภาษาทตองการใช (เชน IPhone ทใช Objective

Page 95: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 95

C หรอ เวบเซรฟเวอรทใช PHP) ขอเพยงแคอปกรณรองรบโพรโทคอล HTTP ทพอรต 80 กสามารถเรยกใช NETPIE REST API ได อปกรณทใช REST API สามารถแลกเปลยนขอมลกบอปกรณอนทใช REST API หรอกบอปกรณทใช Microgear กได ขอดของการใช NETPIE REST API คอไมยดตดกบ Programming Language ฮารดแวรและระบบปฏบตการ สามารถน าไปประยกตใชกบอปกรณแบบดงเดม (Legacy Device) ได ใชงานผาน TCP พอรต 80 ซงเปนพอรตทเครอขายทวไปอนญาตใหใช (ถาใช Microgear ซงเปนโพรโทคอล MQTT ตองใช TCP พอรต 1883, 8083, และ 8080)

การพฒนา Microgear Library ออกมาใหครอบคลมทก Hardware Platform นนเปนเรองทเปนไปไดยากมาก และเปนงานทใชเวลา NETPIE จงพฒนา REST API ขนมาเปนอกหนงทางเลอก ส าหรบ Hardware Platform ท NETPIE ยงไมม Library ไปรองรบ และรวมไปถงระบบหรอบรการทมมาอยกอนแลว กสามารถเรยก API มาเชอมตอ NETPIE ไดเชนกน

API Endpoint

REST API ของ NETPIE ใหบรการอยท https//:api.netpie.io/

Authentication

ในการเชอมตอ API Client จะตองท าการยนยนตวตน โดยใชหนงในสองวธน

1. สงผาน HTTP Header แบบ Basic Auth โดยใช

Username: KEY

Password: SECRET

ตวอยางการใช Basic Auth ดวย Command Line ค าสง cURL

$ curl -X GET "http//:www.domainname.com/resource" -u key:secret

2. สงผานทาง URL Parameter ในรปแบบ

?auth=KEY:SECRET

ตวอยางการใช URL Parameter ดวย Command Line ค าสง cURL

$ curl- X GET "http//:www.domainname.com/resources?auth=key:secret"

Resource

การใช REST API ของ NETPIE จะเปนการกระท าการบางอยางกบ Resource ซง Resource ทเขาถงไดของ NETPIE มอย 3 แบบดวยกน ไดแก

Page 96: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 96

1. Microgear หมายถงตว อปกรณเอง เราสามารถ Chat ตรงไปหามนได โดยอางองชอ Alias 2. Topic เปนสงเดยวกบ Topic เวลา Publish/Subscribe เราสามารถ Publish ขอความไปท Topic

โดยใช REST API ไดเชนกน โดยอปกรณท Subscribe อยกจะไดรบขอความ Topic นน 3. Postbox คอถงเกบขอมลชวคราว สามารถสงขอความเขาไป หรออานขอความออกมาได

HTTP Method

HTTP Method ท NETPIE REST API รองรบคอ GET (เพอเรยกดขอมล) และ PUT (เพอเขยนขอมล) วธการเรยกใชงาน

PUT

PUT /microgear/{appid}/{alias}

PUT /topic/{appid}/{topicname}

PUT /postbox/{appid}/{postboxname}

Parameter Method PUT รบ Parameter ชอ retain ซงหากก าหนด retain จะมความหมายวาให NETPIE เกบคานไว ซงแพลตฟอรมจะเกบเฉพาะคาลาสดเพยงคาเดยว

Body ในเนอหา (Payload) ของ HTTP PUT จะเปนขอความทตองการสงไปยง topic/microgear/postbox

ตวอยางการเรยกใชงาน PUT ในการสงขอความ ON แบบ retain ไปยง Topic ชอ mytopic ใน AppID ชอ myappid แบบสง Authentication ไปใน URL

$ curl -X PUT

"https//:api.netpie.io/topic/myappid/mytopic?retain&auth=MyKey:MySecret"-d

"ON"

ตวอยางการเรยกใชงาน PUT ในการสงขอความ ON แบบ retain ไปยง Topic ชอ mytopic ใน AppID ชอ myappid แบบสง Authentication ไปใน HTTP Header แบบ Basic Auth

$ curl -X PUT "https//:api.netpie.io/topic/myappid/mytopic?retain" -d "ON"

-u MyKey:MySecret

GET

GET /microgear/{appid}/{alias}

GET /topic/{appid}/{topicname}

Page 97: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 97

GET /postbox/{appid}/{postboxname}

Parameter ไมม

Body ไมม

ตวอยางการเรยกใชงาน GET ในการอานขอความใน Topic หรอ mytopic ใน AppID ชอ myappid แบบสง Authentication ไปใน URL

$ curl -X GET

"https//:api.netpie.io/topic/myappid/mytopic?auth=MyKey:MySecret"

ตวอยางการเรยกใชงาน GET ในการอานขอความใน Topic หรอ mytopic ใน AppID ชอ myappid แบบสง Authentication ไปใน HTTP Header แบบ Basic Auth

$ curl -X GET" https//:api.netpie.io/topic/myappid/mytopic"-u

MyKey:MySecret

เราสามารถทดสอบการเรยก Method Get โดยน า URL ไปใสใน Browser โดยตรงไดเชน

ถาท างานไดถกตองจะไดรบคาทเคย PUT และ retain ไปยง topic/microgear/postbox น ในรปแบบ JSON เชน

[{"topic":"/myappid/mytopic","payload":"ON","lastUpdated":1471760882,"retai

n":true}]

การพมพ URL ลงไปใน Address Bar ของเวบเบราวเซอร จะเปนการเรยก HTTP GET

Method เทานน ไมสามารถใชกบ Method อนๆ ได

Lab 7.1: HTML HTML

ในการทดลองนจะใหเบราวเซอรสองตว (บนเครองเดยวกนหรอตางเครองกได) สอสารกนผาน NETPIE REST API โดยเปนการเขยนโปรแกรมดวย HTML และ Javascript โดยเบราวเซอรตวแรกสงค าสง PUT และเบราวเซอรตวทสองสงค าสง GET

สรางไฟล SetLampStatus.html ดงน

Page 98: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 98

SetLampStatus.html

<html>

<body>

<script>

var APPID= "YOURAPPID"; //enter your appid

var KEY = "YOURKEY"; //enter your key

var SECRET = "YOURSECRET"; //enter your secret

var Topic = "/LampStatus"; //choose any topic name

function PressButtonOn(){

var url =

'https://api.netpie.io/topic/'+APPID+Topic+'?retain&auth=' +KEY+':'+SECRET;

var xmlHttp = new XMLHttpRequest();

xmlHttp.open('PUT',url,true);

xmlHttp.send('ON');

window.alert(url);//for debugging purpose

}

function PressButtonOff(){

var url =

'https://api.netpie.io/topic/'+APPID+Topic+'?retain&auth=' +KEY+':'+SECRET;

var xmlHttp = new XMLHttpRequest();

xmlHttp.open('PUT',url,true);

xmlHttp.send('OFF');

window.alert(url); //for debugging purpose

}

</script>

<center>

<button onclick="PressButtonOn()" id = "ButtonOn">ON</button>

<button onclick="PressButtonOff()" id = "ButtonOff">OFF</button>

</center>

</body>

</html>

Double click ทไฟลSetLampStatus.html เลอกเปดบนเวบเบราวเซอร เชน IE จะเหนหนาตางแบบน

Page 99: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 99

สรางไฟล GetLampStatus.html ดงน

GetLampStatus.html

<html>

<body>

<script>

var APPID= "YOURAPPID"; //enter your appid

var KEY = "YOURKEY"; //enter your key

var SECRET = "YOURSECRET"; //enter your secret

var Topic = "/LampStatus";

function GetButtonStatus(){

var url = 'https://api.netpie.io/topic/'+APPID+Topic+'?auth='

+KEY+':'+SECRET;

var xmlHttp = new XMLHttpRequest();

xmlHttp.onreadystatechange = function() {

if (xmlHttp.status == 200 && xmlHttp.readyState==4){

document.body.className = 'ok';

var result = xmlHttp.responseText;

window.alert(result);

} else {

document.body.className = 'error';

}

}

xmlHttp.open('GET',url,true);

xmlHttp.send(null);

}

</script>

<center>

<button onclick="GetButtonStatus()" id = "Button">Check Lamp

Status</button>

</center>

</body>

</html>

Page 100: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 100

เปดไฟล GetLampStatus.html บนเวบเบราวเซอรอกตว เชน Google Chrome หรอ Firefox หรอ เปดเวบเบราวเซอรบนเครองของเพอน จะเหนหนาตางแบบน

กดป ม Check Lamp Status สงเกตผลลพธทได จะอยในรปแบบ JSON Array ซงประกอบดวย

[ ชอ Resource, ขอความ Payload, Last Update, retain ] เชน

[{"topic":"/YOURAPPID/LampStatus","payload":"ON","lastUpdated":1471760882,"

retain":true}]

KEY ทใสในไฟล SetLampStatus.html และ GetLampStatus.html ควรสรางเปน Session Key

สามารถใช KEY เดยวกนทงสองไฟลหรอจะใช KEY ทแตกตางกนกได

ทดลองเพมเตม

1. พมพ URL ลงใน Address Bar โดยตรง https://api.netpie.io/topic/YOURAPPID/LampStatus?auth=YOURKEY:YOURSECRET สงเกตผลลพธทได

2. แกไขไฟล SetLampStatus.html โดย retain parameter ออกสงเกตผลลพธทไดจากค าสง GET 3. แกไขไฟล SetLampStatus.html และ GetLampStatus.html โดยเปลยนชอ Topic เปน

/LampStatus/bedroom สงเกตผลลพธทไดจากค าสง GET 4. แกไขไฟล SetLampStatus.html และ GetLampStatus.html เปลยนจากการใช Topic เปน

Postbox

Topicname และ Postboxname สามารถตงเปนชอใดๆ ทตองการ สามารถเรยกใชไดภายใน

AppID ทก าหนดเทานน

Page 101: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 101

Lab 7.2: HTML NodeMCU

ในการทดลองนจะใหเบราวเซอรสอสารกบ Microgear บน NodeMCU ผาน REST API

1. ใชไฟล SetLampStatus.html จาก Lab 7.1 แกไข URL ส าหรบ PUT ใหอยในรปแบบ

https://api.netpie.io/microgear/appid/alias?retain&auth=KEY:SECRET

โดย alias คอชอทเราตงใหกบ NodeMCU Microgear ใหใชตามทเราเคยตงให Node MCU ใน Lab 4.2 ในไฟล pieled.ino ใช alias วา pieled

2. เนองจากเราจะใชไฟล pieled.ino จาก Lab 4.2 แตเราตงเงอนไขไวให NodeMCU รอรบขอความ 1 หรอ 0 จงตองแกฟงกชน PressButtonOn และ PressButtonOff ในไฟล SetLampStatus.html ใหสงคา 1 และ 0 แทน ON และ OFF ตามล าดบ

SetLampStatus.html

<html>

<body>

<script>

var APPID= “YOURAPPID.”;// enter your appid

var KEY =“YOURKEY”;// enter your key

var SECRET =“YOURSECRET”;// enter your secret

var ALIAS = “pieled”;// same alias you set on NodeCMU

function PressButtonOn(){

var url =

'https//:api.netpie.io/microgear/'+APPID+ALIAS+'?retain&auth='

+KEY+':'+SECRET;

var xmlHttp =new XMLHttpRequest();

xmlHttp.open('PUT',url,true);

xmlHttp.send('1');

window.alert(url);//for debugging purpose

}

function PressButtonOff(){

var url =

'https//:api.netpie.io/microgear/'+APPID+ALIAS+'?retain&auth='

+KEY+':'+SECRET;

var xmlHttp =new XMLHttpRequest();

xmlHttp.open('PUT',url,true);

xmlHttp.send('0');

window.alert(url);// for debugging purpose

Page 102: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 102

}

</script>

<center>

<button onclick= “PressButtonOn()” id = “ButtonOn”>ON</button>

<button onclick= “PressButtonOff()” id = “ButtonOff”>OFF</button>

</center>

</body>

</html>

3. อพโหลดโคด pieled.ino (เหมอนใน Lab 4.2) ลงใน NodeMCU

pieled.ino

#include <ESP8266WiFi.h>

#include <MicroGear.h>

const char* ssid = "SSID"; //change this to your SSID

const char* password = "PASSWORD"; //change this to your PASSWORD

#define APPID "APPID" //change this to your APPID

#define KEY "KEY" //change this to your KEY

#define SECRET "SECRET" //change this to your SECRET

#define ALIAS "pieled"

WiFiClient client;

int timer = 0;

MicroGear microgear(client);

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) { //

Serial.print("Incoming message -->");

msg[msglen] = '\0';

Serial.println((char *)msg);

if(*(char *)msg == '1'){

digitalWrite(LED_BUILTIN, LOW); // LED on

microgear.chat("switch","1");

}else{

Page 103: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 103

digitalWrite(LED_BUILTIN, HIGH); // LED off

microgear.chat("switch","0");

}

}

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.println("Connected to NETPIE...");

microgear.setName(ALIAS);

}

void setup() {

microgear.on(MESSAGE,onMsghandler);

microgear.on(CONNECTED,onConnected);

Serial.begin(115200);

Serial.println("Starting...");

pinMode(LED_BUILTIN, OUTPUT);

if (WiFi.begin(ssid, password)) {

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

}

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

microgear.init(KEY,SECRET,ALIAS);

microgear.connect(APPID);

}

void loop() {

if (microgear.connected()) {

Serial.println("...");

microgear.loop();

timer = 0;

Page 104: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 104

}

else {

Serial.println("connection lost, reconnect...");

if (timer >= 5000) {

microgear.connect(APPID);

timer = 0;

}

else timer += 100;

}

delay(100);

}

4. สงเกตผลทไดเมอกดป ม ON OFF ทเวบเบราวเซอร จะสามารถควบคมไฟทบอรด NodeMCU เชนเดยวกบการใช Microgear บน HTML5

Page 105: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 105

Lab 7.3: KKMC IoT

แอปพลเคชน KKMC-IoT พฒนาโดยคณคมเดช เผอดผด จากมหาวทยาลยขอนแกนและชมรมขอนแกนเมกเกอรคลบ (KKMC) เปน Android Application ส าหรบสอสารไปยง Microgear หรออปกรณอนๆ ทเชอมตอกบ NETPIE การสอสารท าไดทงการรายงานผลสถานะ และการสงค าสงควบคม รวมถงการตงเวลาเพอสงค าสงควบคม เบองหลงการสอสารของแอปพลเคชนนคอการเรยกใชงาน NETPIE REST API เพอเชอมตอกบอปกรณตางๆ (เนองจาก ณ เวลาทพฒนาแอปพลเคชนน ยงไมม Microgear ส าหรบสราง Native Android Application)

ขอมลรายละเอยดแอปพลเคชนจาก Google Play (https://play.google.com/store/apps/details?id=com.numberx.kkmctimer)

“KKMC IoT สรางขนมาเพอใหผใชงานทตองการจะควบคมอปกรณ IoT กบ NETPIE หรอมอปกรณอยแลว แตยงขาด App ดๆ ซงผใชบางคนจะตองสรางสวนเชอมตอขนมา เชน เวบ หรอ application ตางๆ เพอควบคมโดยเฉพาะ หลายๆทานอาจจะยงไมมความรทางดานโปรแกรมมง จงอาจจะมองวาเปนอะไรทยงยาก KKMC IoT จงไดถอก าเนดขนมาโดยม Concept ทวา "แอพเดยว ท าไดทกอยาง" โดยตวแอพนนเขยนไวใหผใชสามารถกดสราง Widget การควบคมอปกรณไวทงหมดแลวเพยงเขาไปตงคา Topic ส าหรบการเชอมตอ จากนนกสามารถใชงานไดเลย มทงการแสดงผล และควบคมอปกรณอกทงยงเพม Timer ใหอปกรณท างานไดตามเวลาทก าหนดอกดวย

หากใครสนใจรายละเอยดเพมเตม สามารถเขาไปรวมกลมกบ Khon Kaen Maker Club ไดเลยครบ”

Fanpage: https://www.facebook.com/KhonKaenMakerClub/ Group: https://www.facebook.com/groups/KhonKaenMakerClub/ *** Distributed from: https://github.com/carlosperate/LightUpDroid-Alarm

1. ทดลองตดตงแอปพลเคชน KKMC-IoT จาก Google Play Store

Page 106: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 106

รปท 7.1 แอปพลเคชน KMMC IoT ใน Google Play Store

ตงคาขนตอนท 1 ตงคาขนตอนท 2-3 ตงคาขนตอนท 4 ตงคาขนตอนท 5

รปท 7.2 ขนตอนตงคาแอปพลเคชน KMMC IoT

2. เลอกเมน Settings ทมมขวาลาง 3. ใสขอมล NETPIE AppID

Page 107: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 107

4. ใสขอมล NETPIE REST Key ซงอยในรปแบบ KEY: SECRET หรอสามารถกอปป โดยตรงจากหนา Application Management ของ netpie.io ตามภาพ

รปท 7.3 ขอมล REST Key ในหนา Application Management ของเวบไซต netpie.io

5. ตงคา Topic โดยกดทรปโลกในหนาแรกของแอปพลเคชน แลวกดเพม Topic ตามชอ Topic ทเคยตงไวเชน /LampStatus เลอก Widget Type เปน On/Off Switch (เพอสรางป มควบคมไฟ)

6. กลบมาทหนาแรกของแอปพลเคชนจะเหนป มใหทดลองกด เปด/ปด ถาสงค าสงไปส าเรจจะเหนขอความวา “Publish to topic success” ตรวจสอบสถานะทเปลยนไปโดยเปดไฟล GetLampStatus.html (จาก Lab 7.1) หรอแกไขโคด pieled.ino (จาก Lab 7.2) ท NodeMCU โดยเพมค าสง microgear.subscribe(“/LampStatus”); ในฟงกชน onConnected ดงแสดงดานลาง จากนนทดลองกดเปด/ปด เพอควบคม LED บน NodeMCU

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.println("Connected to NETPIE...");

microgear.setName(ALIAS);

microgear.subscribe("/LampStatus");

}

เนองจากแอปพลเคชน KKMC-IoT นรองรบเฉพาะการเรยก REST API บน Topic (ยงไมรองรบ Resource ประเภท Microgear และ Postbox) จงตองสงให Microgear (NodeMCU) รอรบขอความ (Subscribe) ท Topic/LampStatus กอน ซงตางจากใน Lab 7.2 ทใช REST API สงค าสงเปดปดไปยง Resource ประเภท Microgear จงสามารถสงค าสงไปทชอของ Microgear ไดโดยตรงในรปแบบ /microgear/appid/alias

Page 108: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 108

ทดลองเพมเตม

1. เพม Widget ชนด Push Button (ป มแบบกดตดปลอยดบ) ท Topic /LampStatus สงเกตไฟ LED บน NodeMCU เมอกดป ม

2. เพม Widget ชนด Text เพอแสดงผลขอมลอณหภมทตรวจวดจากเซนเซอร DHT11

รายละเอยดเพมเตมเกยวกบ KKMC-IoT

Source Code https://github.com/KhonKaenMakerClub/KKMC-IoT

บทความ http://www.kkmakerclub.com/2016/05/26/

วดโอสอนวธใช https://www.youtube.com/watch?v=VWKrjvDCQQs

Disclaimer NECTEC/NETPIE ไมไดมสวนรวมในการพฒนาแอปพลเคชน KKMC-IoT น ขอผดพลาดใดๆ ทเกดจากการใชแอปพลเคชนน ขอใหแจงไปยงผพฒนาโดยตรง

Page 109: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 109

8. NETPIE SECURE CONNECTION

ในกรณทตองการใหอปกรณสอสารกนอยางปลอดภยไมใหใครดกฟงขอความทแลกเปลยนกนได และไมใหใครมาเปลยนขอความกลางทาง เราจ าเปนตองเขารหสใหชองทางสอสาร โพรโทคอลทนยมใชในการรกษาความปลอดภยใหชองทางสอสารไดแก TLS (Transport Layer Security) และ SSL (Secure Socket Layer) ซงมกจะเรยกรวมๆ กนวา SSL/TLS แอปพลเคชนทนยมใชบน SSL/TLS ไดแกเวบ อเมลโปรแกรมสนทนา ฯลฯ ทตองการความปลอดภยในการสงขอมล ตวอยางเชน โพรโทคอล HTTPS หรอHTTP Secure จะเปนการสงขอมลเวบทเขารหสบน SSL หรอ TLS

การสงขอมลบน SSL/TLS มขอด 3 ดานคอ

1. Privacy ขอมลทรบสงจะถกเขารหส ท าใหมความเปนสวนตวและปลอดภยจากการดกฟงโดยบคคลทสาม

2. Authentication คสนทนาทงสองฝงจะไดรบการยนยนตวตนโดยการใช Public/Private Key ทออกใหโดย Certificate Authority ทไดรบการยอมรบ ท าใหมนใจไดวาคสนทนาเปนคนหรออปกรณทตองการสอสารดวยจรงๆ ไมใชตวปลอมทมาสวมสทธ

3. Reliability ขอมลทรบสงไมสามารถถกเปลยนแปลงกลางทาง เพราะมกลไกการตรวจสอบความถกตองของขอมลโดยใช Message Authentication Code

TLS vs SSL บอยครงทเกดความสบสนระหวาง TLS กบ SSL ทงสองโพรโทคอลท าหนาทเหมอนกนคอ

สรางชองทางการสอสารทปลอดภยดวยการเขารหสขอมล ยนยนความถกตองของขอมล และยนยนตวตนของคสนทนา โพรโทคอล SSL ก าเนดมากอน TLS และไดรบความนยมสงโดยเฉพาะกบการใชงานเวบ (HTTPover SSL) แตในป ค.ศ.2014 มการพบชองโหวทรายแรงทเรยกวา POODLE Attack บน SSL เวอรชน 3.0 ตงแตนนมา SSL จงกลายเปนโพรโทคอลทไมปลอดภยและไมควรใช

โพรโทคอล TLS ถกออกแบบมาทหลงและออกแบบใหรองรบกลไกสมยใหมทเกยวกบการสราง Key การแลกเปลยน Key การเขารหส จงท าให TLS มความปลอดภยมากกวา SSL

การใช TLS กบ NETPIE

NETPIE เลอกใชโพรโทคอล TLS เวอรชน 1.2 ในการสรางความปลอดภยใหกบการสอสารระหวาง Microgear กบ NETPIE

Page 110: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 110

NETPIE Microgear ทรองรบการสอสารบน TLS ไดแก Node.js, HTML5, ESP8266

TCP พอรตทใชสอสาร

HTML5 Microgear ESP8266 และ Node.js Microgear

TLS: 8081 and 8084 (default)

Non-TLS: 8080 and 8083

Non-TLS: 8080 and 1883 (default)

TLS: 8081 and 8883

ฟงกชนเพอเรยกใช TLS

บน Node.js และ ESP8266 Microgear จะมฟงกชน useTLS(tlsmode) เพอระบวาจะเลอกใชหรอไมใชการเขารหสแบบ TLS สวน argument tlsmode เปน Boolean ถาตงคา TRUE แปลวาใช TLS ถาตงคา FALSE แปลวาไมใช TLS หากไมไดเรยกใชฟงกชนน คา default ของ Microgear จะไมใช TLS

บน HTML5 Microgear กมฟงกชน useTLS(tlsmode) เชนกน แตคา default คอใช TLS ดงนนการสอสารกบ HTML5 จะเปนการสอสารแบบปลอดภยเสมอ นอกจากนกพฒนาจะปดการใช TLS ดวยค าสง useTLS (false)

วธสราง Secure Connection บน ESP8266 Microgear แตกตางจากการสราง Connection ปกตสองจด

1. ประกาศตวแปร Client เปนชนด WiFiClientSecure แทน WiFiClient

WiFiClientSecure client;

MicroGear microgear(client);

2. ภายในฟงกชน setup() เรยกใช useTLS(true) กอนการเรยกฟงกชน init(KEY, SECRET, ALIAS)

microgear.useTLS(true);

microgear.init(KEY,SECRET,ALIAS);

microgear.connect(APPID);

วธสราง Secure Connection บน Node.js Microgear แตกตางจากการสราง Connection ปกตจดเดยว คอตองเรยกใช useTLS(true) กอนการเรยกฟงกชน connect(APPID)

Page 111: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 111

microgear.useTLS(true);

microgear.connect(APPID);

ส าหรบการใช TLS บน ESP8266 จะใชไดกบ ESP8266 SDK 2.1.0 แตมปญหากบ SDK

2.2.0 และกลบมาใชไดกบ SDK 2.3.0-rc1

Lab 8.1: สราง Secure Connection ระหวาง NodeMCU และ HTML5

แกไขไฟล pieled.ino จาก Lab 4.2 สองจดคอ

1. ประกาศตวแปร Client เปนชนด WiFiClientSecure แทน WiFiClient กอนสราง Microgear

WiFiClientSecure client;

MicroGear microgear(client);

2. ภายในฟงกชน setup() เรยกใช useTLS(true) กอนการเรยกฟงกชน init(KEY, SECRET, ALIAS)

microgear.useTLS(true);

microgear.init(KEY,SECRET,ALIAS);

microgear.connect(APPID);

บนทกเปนไฟลใหมชอ SecureConnect.ino แลวอพโหลดไฟล SecureConnect.ino ลงบน NodeMCU

SecureConnect.ino

/* NETPIE ESP8266 secure microgear connection sample */

/* It differs from the normal connection by 2 stpes */

/* 1. Declare a client as WiFiClientSecure instead of WiFiClient. */

/* 2. Call microgear.useTLS(true) before initial */

/* More information visit : https://netpie.io */

#include <ESP8266WiFi.h>

#include <MicroGear.h>

const char* ssid = "WIFI_SSID"; //change this to your SSID

Page 112: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 112

const char* password = "WIFI_KEY"; //change this to your WIFI

password

#define APPID "YOURAPPID" //change this to your appid

#define KEY "YOURKEY" //change this to your key

#define SECRET "YOURSECRET" //change this to your secret

#define ALIAS "esp8266tls"

/* 1. Declare a client as WiFiClientSecure instead of WiFiClient. */

WiFiClientSecure client;

int timer = 0;

MicroGear microgear(client);

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {

Serial.print("Incoming message -->");

msg[msglen] = '\0';

Serial.println((char *)msg);

}

void onFoundgear(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.print("Found new member -->");

for (int i=0; i<msglen; i++)

Serial.print((char)msg[i]);

Serial.println();

}

void onLostgear(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.print("Lost member -->");

for (int i=0; i<msglen; i++)

Serial.print((char)msg[i]);

Serial.println();

}

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.println("Securely connected to NETPIE...");

microgear.setAlias(ALIAS);

}

void setup() {

Page 113: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 113

/* Event listener */

microgear.on(MESSAGE,onMsghandler);

microgear.on(PRESENT,onFoundgear);

microgear.on(ABSENT,onLostgear);

microgear.on(CONNECTED,onConnected);

Serial.begin(115200);

Serial.println("Starting...");

if (WiFi.begin(ssid, password)) {

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

}

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

/* 2. Call microgear.useTLS(true) before initial */

microgear.useTLS(true);

microgear.init(KEY,SECRET,ALIAS);

microgear.connect(APPID);

}

void loop() {

if (microgear.connected()) {

Serial.println("connected");

microgear.loop();

if (timer >= 1000) {

Serial.println("Publish...");

microgear.chat(ALIAS,"Hello");

timer = 0;

}

else timer += 100;

}

else {

Serial.println("connection lost, reconnect...");

Page 114: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 114

if (timer >= 5000) {

microgear.connect(APPID);

timer = 0;

}

else timer += 100;

}

delay(100);

}

เปดไฟล switch.html จาก Lab 4.2 เนองจาก HTML5 Microgear จะใช TLS เปนคา default อยแลวดงนนหากเราไมแกไขอะไร HTML5 จะสงคาเปดปดไฟ ผานการเชอมตอแบบเขารหส หากตองการยกเลกการใช TLS สามารถเรยกฟงกชน microgear.useTLS(false) กอนการเรยก microgear.connect(APPID) และบนทกไฟลใหมชอ UnsecureSwitch.html ดงตวอยางดานลาง

UnsecureSwitch.html

<script src="https://cdn.netpie.io/microgear.js"></script>

<script>

const APPID = "YOURAPPID";

const KEY = "YOURKEY";

const SECRET = "YOURSECRET";

const ALIAS = "switch";

var microgear = Microgear.create({

key: KEY,

secret: SECRET,

alias : ALIAS

});

function toggle() {

if(document.getElementById("button").innerText=="off"){

microgear.chat('pieled','1');

}

else{

microgear.chat('pieled','0');

}

}

microgear.on('message',function(topic,msg) {

document.getElementById("data").innerHTML = msg;

Page 115: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 115

if(msg=="1"){

document.getElementById("button").innerText="on";

}else if(msg=="0"){

document.getElementById("button").innerText="off";

}

});

microgear.on('connected', function() {

microgear.setAlias(ALIAS);

document.getElementById("data").innerHTML = "Now I am connected with

netpie...";

});

//add this line if you don’t want a secure connection

microgear.useTLS(false);

microgear.connect(APPID);

</script>

<div id="data">_____</div>

<center>

<button onclick="toggle()" id="button">off</button>

</center>

ตดตงและใชงานโปรแกรม Wireshark (https//:www.wireshark.org/download.html) ซงเปนโปรแกรมดกจบแพกเกตในเครอขาย (ในขนตอนการตดตง Wizard จะถามวาใหตดตงไลบราร libpcap ดวยหรอไม ใหตอบตกลง) เมอเรมใชงานโปรแกรมจะเหนหนาตางในภาพ ใหคลกเลอกท Network Interface ทตองการดกจบขอมล (กรณในภาพคอ Wi-Fi) แลวคลกทไอคอนรปครบฉลาม เพอเรมดกจบขอมล วธสงเกตวาควรเลอก Network Interface ใดใหเลอก Interface ทมเสนกราฟขยบ (หมายถงมขอมลวงเขาออก)

Page 116: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 116

รปท 8.1 หนาจอโปรแกรม Wireshark

เนองจากเราสามารถดกจบไดเฉพาะขอมลทวงเขาออกคอมพวเตอรของเรา ดงนนเราจะทดลองดกจบขอมลทเกดจาก HTML5 Microgear โดยเปดไฟล switch.html ทดลองกดป ม ON OFF จากนนหยดการดกจบขอมลท Wireshark โดยกดทไอคอนสเหลยมจตรสสแดง แลวลองไลด Packet ทเกดจากไฟล switch.html วงผานคอมพวเตอรของเรา

เนองจากม Packet ทเกดจากหลายแอปพลเคชนบนคอมพวเตอร วธเลอกด Packet อาจสงเกตจาก Destination Port ในกรณทใช TLS HTML5 Microgear จะสอสารกบ NETPIE โดยใช Destination Port 8081 และ 8084

วธเลอกดเฉพาะแพกเกตทสนใจ คอการก าหนดตวกรอง ใสลงในชองดานบนทเขยนวา

“Apply a display filter … <Ctrl-/>” ตวอยางเชน tcp.dstport == 8084 || tcp.dstport == 8081 Filter โดยระบ Destination Port ip.src_host==192.168.1.137 Filter โดยระบ Source IP address ip.addr==192.168.1.137 Filter โดยระบ IP address ของคสนทนา

จากภาพจะพบวาเราไมสามารถอานขอมลทวงเขาและออกจาก HTML5 Microgear

Page 117: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 117

รปท 8.2 หนาจอ Wireshark หลงเรยกใช TLS

ทดลองเพมเตม

ใชไฟล UnsecureSwitch.html แลวทดสอบดวาสามารถเหนขอความท Chat ระหวาง Switch และ NodeMCU หรอไม

การใช TLS ในกรณนเปนการเขารหสการสอสารระหวางอปกรณใดๆ ทม Microgear กบ

แพลตฟอรม NETPIE เทานนไมใชการเขารหสแบบ End-to-end โดยตรงระหวางอปกรณสองตว

Page 118: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 118

ภาคผนวก NETPIE MICROGEAR REFERENCE GUIDE

ส าหรบรายละเอยดลาสดของ Microgear ทกตวทานสามารถดไดจากเวบไซต

https://github.com/netpieio

1. ESP8266-ARDUINO MICROGEAR

ESP8266 Arduino Microgear คอ Client Library ทท าหนาทเปนตวกลางในการเชอมตอ ESP8266 เขากบบรการของ NETPIE

1.1 ความเขากนได

ทางทมพฒนาไดท าการทดสอบพบวา Library สามารถใชไดกบอปกรณตอไปน (อาจมมากกวาน)

ESP8266-01, 07, 12E, 12F

NodeMCU v1, v2, V3

Espresso Lite v2.0

1.2 พอรตสอสาร

ESP8266 ใชพอรตสอสารตอไปน หากพบปญหาการใชงาน กรณาตรวจสอบวา Port ตอไปนไดรบอนญาตใหเขาถง NETPIE.

Non-TLS mode : 8080 and 1883 (คา default )

TLS mode : 8081 and 8883 (อยระหวางทดสอบ)

1.3 การตดตง

ดาวนโหลด Arduino IDE 1.6.9 หรอใหมกวา จาก https://www.arduino.cc/en/Main/Software

หลงจากตดตงเสรจ เปด Preferences

Page 119: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 119

ใสขอความ http://arduino.esp8266.com/stable/package_esp8266com_index.json ลงในชอง Additional Board Manager URLs

เปด Boards Manager เมน Tools คนหาค าวา esp8266 และคลก Install

ในเมน Tools จะมบอรด ESP8266 ชนดตางๆเพมขนมา เลอกใหตรงกบชนดของบอรดทใช

ดาวนโหลด Microgear Library จาก https://github.com/netpieio/microgear-esp8266-arduino/archive/master.zip

Unzip ไปวางใน Folder ชอ Libraries ของ Arduino IDE

รายละเอยดเพมเตมเกยวกบ ESP8266 Arduino IDE ศกษาไดจาก https://github.com/esp8266/Arduino

1.4 ขอจ ากดทพบ

ฟเจอร TLS ท างานไดบน ESP8266 SDK 2.1.0 และ 2.3.0-rc1 แตไมท างานบนเวอรชน 2.2.0

1.5 ตวอยางการเรยกใช

/* NETPIE ESP8266 basic sample */

/* More information visit : https://netpie.io */

#include <ESP8266WiFi.h>

#include <MicroGear.h>

const char* ssid = "WIFI_SSID";

const char* password = "WIFI_KEY";

#define APPID "YOUR_APPID"

#define KEY "YOUR_KEY"

#define SECRET "YOUR_SECRET"

#define ALIAS "esp8266"

WiFiClient client;

int timer = 0;

MicroGear microgear(client);

/* If a new message arrives, do this */

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {

Page 120: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 120

Serial.print("Incoming message --> ");

msg[msglen] = '\0';

Serial.println((char *)msg);

}

void onFoundgear(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.print("Found new member --> ");

for (int i=0; i<msglen; i++)

Serial.print((char)msg[i]);

Serial.println();

}

void onLostgear(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.print("Lost member --> ");

for (int i=0; i<msglen; i++)

Serial.print((char)msg[i]);

Serial.println();

}

/* When a microgear is connected, do this */

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.println("Connected to NETPIE...");

/* Set the alias of this microgear ALIAS */

microgear.setAlias(ALIAS);

}

void setup() {

/* Add Event listeners */

/* Call onMsghandler() when new message arraives */

microgear.on(MESSAGE,onMsghandler);

/* Call onFoundgear() when new gear appear */

microgear.on(PRESENT,onFoundgear);

/* Call onLostgear() when some gear goes offline */

microgear.on(ABSENT,onLostgear);

/* Call onConnected() when NETPIE connection is established */

microgear.on(CONNECTED,onConnected);

Page 121: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 121

Serial.begin(115200);

Serial.println("Starting...");

/* Initial WIFI, this is just a basic method to configure WIFI on

ESP8266. */

/* You may want to use other method that is more complicated, but

provide better user experience */

if (WiFi.begin(ssid, password)) {

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

}

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

/* Initial with KEY, SECRET and also set the ALIAS here */

microgear.init(KEY,SECRET,ALIAS);

/* connect to NETPIE to a specific APPID */

microgear.connect(APPID);

}

void loop() {

/* To check if the microgear is still connected */

if (microgear.connected()) {

Serial.println("connected");

/* Call this method regularly otherwise the connection may be lost

*/

microgear.loop();

if (timer >= 1000) {

Serial.println("Publish...");

/* Chat with the microgear named ALIAS which is myself */

microgear.chat(ALIAS,"Hello");

timer = 0;

Page 122: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 122

}

else timer += 100;

}

else {

Serial.println("connection lost, reconnect...");

if (timer >= 5000) {

microgear.connect(APPID);

timer = 0;

}

else timer += 100;

}

delay(100);

}

1.6 การใชงาน LIBRARY

Initial library ดวยค าสง

int MicroGear::init(char* key, char* secret [,char* alias])

arguments

key (string) - ใชในการอางองตวตนของ Microgear secret (string) - เปน Secret ของ Key ซงจะใชประกอบในกระบวนการยนยนตวตน alias (string)– เปนการระบชอเลน (ตามขางหนา) ของอปกรณ

microgear.init("sXfqDcXHzbFXiLk", "DNonzg2ivwS8ceksykGntrfQjxbL98",

"myplant");

void MicroGear::on(unsigned char event, void (* callback)(char, uint8_t,unsigned int))

เพมฟงกชนทตอบสนองตอ Event

arguments

event - ชอ Event ไดแก MESSAGE, CONNECTED, PRESENT, ABSENT

Page 123: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 123

callback - ฟงกชน Callback เมอเกด Event

bool MicroGear::connect(char* appid)

เชอมตอกบ NETPIE Platform ถาเชอมตอส าเรจ จะม Event ชอ CONNECTED เกดขน คาทสงคนมาจากฟงกชน มดงน

NETPIECLIENT_CONNECTED - การเชอมตอส าเรจ

NETPIECLIENT_NOTCONNECTED - การเชอมตอลมเหลว เชนมปญหาเรองเครอขาย

NETPIECLIENT_TOKENERROR - ไมไดรบ Access Token อาจเปนเพราะ Appid, Key หรอ Secret ไมถกตอง

arguments

Appid - AppID

bool MicroGear::connected()

สงคาสถานะการเชอมตอ เปน TRUE หากก าลงเชอมตออย

void MicroGear::useTLS(bool* enabled)

ระบรปแบบของชองทางการสอสารวาตองการสอสารแบบเขารหสโดยใช TLS หรอไม (คา default คอไมใช TLS) เรยกใชฟงกชนนกอนสรางการเชอมตอดวยฟงกชน connect

arguments

Enabled – ตงคา TRUE เพอใช TLS

Page 124: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 124

void MicroGear::setAlias(char* alias)

Microgear สามารถตงนามแฝงของตวเองได ซงสามารถใชเปนชอใหคนอนเรยกในการใชฟงกชน chat() และชอทตงในโคด จะไปปรากฏบนหนาจดการ Key บนเวบ netpie.io อยางอตโนมต

arguments

alias - ชอเลนของ Microgear น

bool MicroGear::chat(char* target, char* message) bool MicroGear::chat(char* target, int message) bool MicroGear::chat(char* target, double message) bool MicroGear::chat(char* target, double, int decimal) bool MicroGear::chat(char* target, String message)

arguments

target - ชอของ Microgear ทตองการจะสงขอความไปถง

decimal - จ านวนต าแหนงหลงจดทศนยม

message - ขอความ

bool MicroGear::publish(char* topic, char* message [, bool retained]) bool MicroGear::publish(char* topic, double message [, bool retained]) bool MicroGear::publish(char* topic, double message, int decimal [, bool retained]) bool MicroGear::publish(char* topic, int message [, bool retained]) bool MicroGear::publish(char* topic, String message [, bool retained])

ในกรณทตองการสงขอความแบบไมเจาะจงผ รบ สามารถใชฟงชน Publish ไปยง Topic ทก าหนดได ซงจะมแต Microgear ท Subscribe Topic นเทานน ทจะไดรบขอความ

arguments

topic - ชอของ Topic ทตองการจะสงขอความไปถง

Page 125: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 125

message - ขอความ

decimal - จ านวนต าแหนงหลงจดทศนยม

retained - ให Retain ขอความไวหรอไมคา Default เปน false (optional)

void MicroGear::subscribe(char* topic)

Microgear อาจจะมความสนใจใน topic ใดเปนการเฉพาะ เราสามารถใชฟงกชน subscribe() ในการบอกรบ Message ของ Topic นนได และหาก Topic นนเคยมการ Retain ขอความไว Microgear จะไดรบขอความนนทกครงท Subscribe

arguments

topic - ชอของ Topic ทตองการจะบอกรบขอความ

void MicroGear::unsubscribe(char* topic)

ยกเลกการ Subscribe

arguments

topic - ชอของ Topic ทตองการจะยกเลก

void microgear.writeFeed(feedid, datajson [, apikey])

เขยนขอมลลง Feed Storage

arguments

feed (string) - ชอของ feed ทตองการจะเขยนขอมล datajson (string) - ขอมลทจะบนทก ในรปแบบ JSON

Page 126: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 126

apikey (string) – API Key ส าหรบตรวจสอบสทธ หากไมก าหนด จะใช Default API Key ของ feed ทใหสทธไวกบ AppID

microgear.writeFeed("homesensor",{temp:25.7,humid:62.8,light:8.5});

void MicroGear::resetToken()

สงค าสง Revoke Token ไปยง NETPIE และลบ Token ออกจาก Cache สงผลให Microgear ตองขอ Token ใหมในการเชอมตอครงตอไป

void MicroGear::loop()

Method นควรถกเรยกใน arduino loop() เปนระยะๆ เพอท Microgear Library สามารถ Keep alive connection alive และจดการกบ Message ทเขามา

2. ARDUINO-ETHERNET MICROGEAR

Arduino Ethernet Microgear คอ Client Library ทท าหนาทเปนตวกลางในการเชอมตอ Arduino Board ทใช Ethernet Shield เขากบบรการของ NETPIE

2.1 ความเขากนได

Library สามารถใชไดกบ Arduino Mega 2560 และ Ethernet Shield

2.2 ตวอยางการเรยกใช

#include <AuthClient.h>

#include <MicroGear.h>

#include <MQTTClient.h>

#include <PubSubClient.h>

#include <SHA1.h>

#include <Arduino.h>

#include <SPI.h>

Page 127: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 127

#include <Ethernet.h>

#include <EEPROM.h>

#include <MicroGear.h>

#define APPID "YOUR_APPID"

#define GEARKEY "YOUR_KEY"

#define GEARSECRET "YOUR_SECRET"

#define SCOPE ""

EthernetClient client;

AuthClient *authclient;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

MicroGear microgear(client);

int timer = 0;

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {

Serial.print("Incoming message --> ");

msg[msglen] = '\0';

Serial.println((char *)msg);

}

void onFoundgear(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.print("Found new member --> ");

for (int i=0; i<msglen; i++)

Serial.print((char)msg[i]);

Serial.println();

}

void onLostgear(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.print("Lost member --> ");

for (int i=0; i<msglen; i++)

Serial.print((char)msg[i]);

Serial.println();

}

void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {

Serial.println("Connected to NETPIE...");

microgear.setAlias("mygear");

}

Page 128: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 128

void setup() {

Serial.begin(9600);

Serial.println("Starting...");

microgear.on(MESSAGE,onMsghandler);

microgear.on(PRESENT,onFoundgear);

microgear.on(ABSENT,onLostgear);

microgear.on(CONNECTED,onConnected);

if (Ethernet.begin(mac)) {

Serial.println(Ethernet.localIP());

microgear.resetToken();

microgear.init(GEARKEY,GEARSECRET,SCOPE);

microgear.connect(APPID);

}

}

void loop() {

if (microgear.connected()) {

Serial.println("connected");

microgear.loop();

if (timer >= 1000) {

microgear.chat("mygear","Hello");

timer = 0;

}

else timer += 100;

}

else {

Serial.println("connection lost, reconnect...");

if (timer >= 5000) {

microgear.connect(APPID);

timer = 0;

}

else timer += 100;

}

delay(100);

}

2.3 การใชงาน LIBRARY

Page 129: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 129

Initial library ดวยค าสง

int MicroGear::init(char* key, char* secret [,char* alias])

arguments

key (string) - ใชในการอางองตวตนของ Microgear

secret (string) - เปน Secret ของ Key ซงจะใชประกอบในกระบวนการยนยนตวตน

alias (string) – เปนการระบชอของอปกรณ

microgear.init("sXfqDcXHzbFXiLk", "DNonzg2ivwS8ceksykGntrfQjxbL98",

"myplant");

void MicroGear::on(unsigned char event, void (* callback)(char, uint8_t,unsigned int))

เพมฟงกชนทตอบสนองตอ Event

arguments

event - ชอ Event ไดแก MESSAGE, CONNECTED, PRESENT, ABSENT

callback - ฟงกชน Callback

bool MicroGear::connect(char* appid)

เชอมตอกบ NETPIE Platform ถาเชอมตอส าเรจ จะม Event ชอ CONNECTED เกดขน

arguments

appid - AppID

bool MicroGear::connected(char* appid)

สงคาสถานะการเชอมตอ เปน true หากก าลงเชอมตออย

arguments

appid - AppID

Page 130: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 130

void MicroGear::setAlias(char* alias)

Microgear สามารถตงนามแฝงของตวเองได ซงสามารถใชเปนชอใหคนอนเรยกในการใชฟงกชน chat() และชอทตงในโคด จะไปปรากฏบนหนาจดการ Key บนเวบ netpie.io อยางอตโนมต

arguments

alias – ชอเลนของ microgear น

bool MicroGear::chat(char* target, char* message) bool MicroGear::chat(char* target, int message) bool MicroGear::chat(char* target, double message) bool MicroGear::chat(char* target, double, int decimal) bool MicroGear::chat(char* target, String message)

arguments

target - ชอของ Microgear ทตองการจะสงขอความไปถง

decimal - จ านวนต าแหนงหลงจดทศนยม

message - ขอความ

bool MicroGear::publish(char* topic, char* message [, bool retained]) bool MicroGear::publish(char* topic, double message [, bool retained]) bool MicroGear::publish(char* topic, double message, int decimal [, bool retained]) bool MicroGear::publish(char* topic, int message [, bool retained]) bool MicroGear::publish(char* topic, String message [, bool retained])

ในกรณทตองการสงขอความแบบไมเจาะจงผ รบ สามารถใชฟงชน Publish ไปยง Topic ทก าหนดได ซงจะมแต Microgear ท Subscribe Topic นเทานน ทจะไดรบขอความ

arguments

topic - ชอของ Topic ทตองการจะสงขอความไปถง

message - ขอความ

decimal - จ านวนต าแหนงหลงจดทศนยม

retained - ให Retain ขอความไวหรอไมคา default เปน false (optional)

Page 131: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 131

void MicroGear::subscribe(char* topic)

microgear อาจจะมความสนใจใน Topic ใดเปนการเฉพาะ เราสามารถใชฟงกชน subscribe() ในการบอกรบ Message ของ Topic นนได และหาก Topic นนเคยมการ Retain ขอความไว Microgear จะไดรบขอความนนทกครงท Subscribe Topic

arguments

topic - ชอของ Topic ทตองการจะบอกรบขอความ

void MicroGear::unsubscribe(char* topic)

ยกเลกการ Subscribe

arguments

topic - ชอของ Topic ทตองการจะยกเลก

void microgear.writeFeed (feedid, datajson [, apikey])

เขยนขอมลลง Feed Storage

arguments

feed (string) - ชอของ feed ทตองการจะเขยนขอมล datajson (string) - ขอมลทจะบนทก ในรปแบบ JSON apikey(string) – API Key ส าหรบตรวจสอบสทธ หากไมก าหนด จะใช Default API Key ของ feed ทใหสทธไวกบ AppID

microgear.writeFeed("homesensor",{temp:25.7,humid:62.8,light:8.5});

void MicroGear::resetToken()

สงค าสง Revoke Token ไปยง NETPIE และลบ Token ออกจาก Cache สงผลให Microgear ตองขอ Token ใหมในการเชอมตอครงตอไป

Page 132: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 132

void MicroGear::loop()

Method นควรถกเรยกใน arduino loop() เปนระยะๆ เพอท Microgear library จะได keep alive connection alive และจดการกบ Message ทเขามา

3. NODE.JS MICROGEAR

microgear-nodejs คอ Client Library ภาษา Node.js ทท าหนาทเปนตวกลางในการเชอมโยง โคดแอปพลเคชนหรอ Hardware เขากบบรการของ NETPIE

3.1 พอรตสอสาร

หากพบปญหาการใชงาน กรณาตรวจสอบวา Port ตอไปนไดรบอนญาตใหเขาถงจาก NETPIE

Non-TLS mode : 8080 and 1883 (คา default )

TLS mode : 8081 and 8883

3.2 การตดตง

npm install microgear

3.3 ตวอยางการเรยกใช

var MicroGear = require('microgear');

const APPID = <APPID>;

const KEY = <KEY>;

const SECRET = <SECRET>;

var microgear = MicroGear.create({

key : KEY,

secret : SECRET

});

Page 133: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 133

microgear.on('connected', function() {

console.log('Connected...');

microgear.setAlias("mygear");

setInterval(function() {

microgear.chat('mygear', 'Hello world.');

},1000);

});

microgear.on('message', function(topic,body) {

console.log('incoming : '+topic+' : '+body);

});

microgear.on('closed', function() {

console.log('Closed...');

});

microgear.connect(APPID);

3.4 การใชงาน LIBRARY

microgear create (config)

arguments

config เปน JSON Object ททม Attribute ดงน o key (string)- ใชในการอางองตวตนของ Microgear o secret (string) - เปน Secret ของ Key ซงจะใชประกอบในกระบวนการยนยนตวตน o alias (string) – เปนการตงชอเลน จะใสทนหรอเรยกฟงกชน setAlias() ทหลงกได

var microgear = MicroGear.create({

gearkey : "sXfqDcXHzbFXiLk",

gearsecret : "DNonzg2ivwS8ceksykGntrfQjxbL98",

alias : "mygear"

});

3.4.1 Microgear

void microgear.connect (appid, callback)

Page 134: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 134

arguments

Appid (string) – คอกลมของแอปพลเคชน Microgear จะท าการเชอมตอ

microgear.connect("happyfarm");

void microgear.setAlias (gearalias)

Microgear สามารถตงนามแฝงของตวเองได ซงสามารถใชเปนชอใหคนอนเรยกในการใชฟงกชน chat() และชอทตงในโคด จะไปปรากฏบนหนาจดการ Key บนเวบ netpie.io อยางอตโนมต

arguments

gearalias (string) - ชอของ Microgear น

microgear.setAlias("plant");

void microgear.chat (gearname, message)

arguments

gearname (string) - ชอของ Microgear ทตองการจะสงขอความไปถง message (string) - ขอความ

microgear.chat("valve","I need water");

void microgear.publish (topic, message, [retained]) ในกรณทตองการสงขอความแบบไมเจาะจงผ รบ สามารถใชฟงชน Publish ไปยง Topic ทก าหนดได ซงจะมแต Microgear ท Subscribe Topoic นเทานน ทจะไดรบขอความ

arguments

topic (string) - ชอของ Topic ทตองการจะสงขอความไปถง message (string) - ขอความ retained (boolean) - ให Retain ขอความไวหรอไม คา Default เปน False

Page 135: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 135

microgear.publish("/outdoor/temp","28.5");

microgear.publish("/outdoor/humid","56",true);

void microgear.subscribe (topic)

Microgear อาจจะมความสนใจใน Topic ใดเปนการเฉพาะ เราสามารถใชฟงกชน Subscribe() ในการบอกรบ Message ของ Topic นนได และหาก Topic นนเคยมการ Retain ขอความไว Microgear จะไดรบขอความนนทกครงท Subscribe Topic

arguments

topic (string) - ชอของ Topic ทตองการจะบอกรบขอความ

microgear.subscribe("/outdoor/temp");

void microgear.unsubscribe (topic) ยกเลกการ Subscribe

arguments

topic (string) - ชอของ Topic ทตองการจะยกเลก

microgear.unsubscribe("/outdoor/temp");

void microgear.setCachePath (path) โดยปกตแลว microgear จะเกบไฟล token cache ใน directory เดยวกบ application โดยตงชอไฟลชอไฟลในรปแบบ microgear-.cache เราสามารถก าหนด path ของ token cache file ใหมดวยฟงกชน setCachePath() ซงอาจจ าเปฯตองใช หากในไฟล Node.js application เดยวกน มการสราง microgear มากกวาหนงตว

arguments

path (string) - path ของไฟล cache

microgear.setCachePath('microgear-g1.cache');

Page 136: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 136

void microgear.writeFeed (feedid, datajson [, apikey])

เขยนขอมลลง Feed Storage

arguments

feed (string) - ชอของ feed ทตองการจะเขยนขอมล datajson (string) - ขอมลทจะบนทก ในรปแบบ JSON apikey (string) – API Key ส าหรบตรวจสอบสทธ หากไมก าหนด จะใช Default API Key ของ feed ทใหสทธไวกบ AppID

microgear.writeFeed("homesensor",{temp:25.7,humid:62.8,light:8.5});

void microgear.resetToken (callback)

สงค าสง Revoke Token ไปยง NETPIE และลบ Token ออกจาก Cache สงผลให Microgear ตองขอ Token ใหมในการเชอมตอครงตอไป

arguments

callback (function) – ฟงกชนทจะถกเรยกเมอการรเซต Token เสรจสน

microgear.resetToken(function(result){

});

เนองจาก resettoken() เปน Asynchronous Function หากตองการ Connect หลงจาก resettoken ตองเขยนโคดในลกษณะน

microgear.resetToken(function(result){

microgear.connect(APPID);

});

void microgear.useTLS (tlsmode)

เลอกใชหรอไมใชการเขารหสแบบ TLS. โดยคาเรมตน microgear-nodejs จะไมใช TLS

arguments

tlsmode (boolean) - true เมอตองการใช TLS

Page 137: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 137

microgear.useTLS(false);

3.4.2 Events

แอปพลเคชนทรนบน Microgear จะมการท างานในแบบ Event Driven คอเปนการท างานตอบสนองตอ Event ตางๆ ดวยการเขยน Callback Function ขนมารองรบในลกษณะน

void microgear.on (event, callback)

arguments

event (string) - ชอ Event

callback (function) - Callback Function

NETPIE Platform เวอรชนปจจบน ม Event ดงตอไปน

Event: 'connected' เกดขนเมอ Microgear Library เชอมตอกบ Platform ส าเรจ

microgear.on("connected", function() {

console.log("connected");

});

Event: 'closed' เกดขนเมอ Microgear Library ตดการเชอมตอกบ Platform

microgear.on("closed", function() {

console.log("closed");

});

Event: 'error' เปน Event ทเกดม Error ขนภายใน Microgear

microgear.on("error", function(err) {

console.log("Error: "+err);

});

Event: 'warning' เปน Event ทเกดมเหตการณบางอยางเกดขน และมการเตอนใหทราบ

microgear.on("warning", function(msg) {

console.log("Connection rejected: "+msg);

});

Event: 'info' เปน Event ทเกดมเหตการณบางอยางเกดขนภายใน Microgear

microgear.on("info", function(msg) {

console.log("Connection rejected: "+msg);

});

Page 138: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 138

Event: 'message' เมอม Message เขามา จะเกด Event นขน พรอมกบสงผานขอมลเกยวกบ Message นนมาทาง Argument ของ Callback Function

microgear.on("message", function(topic,msg) {

console.log("Incoming message: "+mesage);

});

Event: 'present' Event นจะเกดขนเมอม Microgear ใน Appid เดยวกน Online เขามาเชอมตอ NETPIE

microgear.on("present", function(event) {

console.log("New friend found: "+event.gearkey);

});

Event: 'absent' Event นจะเกดขนเมอม Microgear ใน Appid เดยวกน Offline หายไป

microgear.on("absent", function(event) {

console.log("Friend lost: "+event.gearkey);

});

4. HTML5 MICROGEAR

microgear-html5 คอ Client Library ของ NETPIE ทจะเปลยน Web Browser ใหเปน Microgear เพอสอสารกบ Microgear ใน Platform อนๆ เชน Arduino, Raspberry Pi Library นสามารถน าไปพฒนา IoT Console หรอ Mobile Application ไดโดยการเขยนโปรแกรมภาษา HTML/JavaScript

4.1 การรองรบ

Chrome

Firefox

Opera

Safari

Internet Explorer

Edge

Page 139: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 139

4.2 พอรตสอสาร

หากพบปญหาการใชงาน กรณาตรวจสอบวา Port ตอไปนไดรบอนญาตใหเขาถงจาก Network ของคณ

TLS mode : 8081 and 8084 (คา default )

Non-TLS mode : 8080 and 8083

4.3 การตดตง

ดาวนโหลด microgear.js จาก https://raw.githubusercontent.com/netpieio/microgear-html5/master/microgear.js

หรอเรยกใชเวอรชนลาสดจาก cdn โดยใช Tag

<script src="https://cdn.netpie.io/microgear.js"></script>

4.4 ตวอยางการเรยกใช

<script src="https://cdn.netpie.io/microgear.js"></script>

<script>

const APPID = "YOUR_APPID";

const KEY = "YOUR_KEY";

const SECRET = "YOUR_SECRET";

var microgear = Microgear.create({

key: KEY,

secret: SECRET,

alias : "myhtml" /* optional */

});

microgear.on('message',function(topic,msg) {

document.getElementById("data").innerHTML = msg;

});

microgear.on('connected', function() {

microgear.setAlias('htmlgear'); /* alias can be renamed anytime

with this function */

document.getElementById("data").innerHTML = "Now I am connected

with netpie...";

Page 140: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 140

setInterval(function() {

microgear.chat("htmlgear","Hello from myself at "+Date.now());

},5000);

});

microgear.on('present', function(event) {

console.log(event);

});

microgear.on('absent', function(event) {

console.log(event);

});

microgear.connect(APPID);

</script>

<div id="data">_____</div>

4.5 การใชงาน LIBRARY

microgear create (config)

arguments

config เปน JON Obect ทม Attribute ดงน o key (string) - เปน key ส าหรบ device o secret (string) - เปน Secret ของ Key ซงจะใชประกอบในกระบวนการยนยนตวตน o alias (string) – เปนการตงชอเลน จะใสทนหรอเรยกฟงกชน setAlias() ภายหลงกได

var microgear = MicroGear.create({

key : "sXfqDcXHzbFXiLk",

secret : "DNonzg2ivwS8ceksykGntrfQjxbL98",

alias : "myhtml"

});

4.5.1 Microgear

void microgear.connect (appid, callback)

Page 141: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 141

เชอมตอไปท NETPIE โดยระบ Appid เปาหมาย

arguments

appid (string) - คอ Application ท Microgear จะท าการเชอมตอ

microgear.connect("happyfarm");

void microgear.setAlias(gearalias)

Microgear สามารถตงชอตวเองได ซงสามารถใชเปนชอเลนในการใชฟงกชน chat()

arguments

gearalias (string) - ชอของ Microgear น

microgear.setAlias("plant");

void microgear.chat (gearalias, message)

arguments

gearalias(string)- ชอของ Microgear ทตองการจะสงขอความไปถง message(string)- ขอความ

microgear.chat("valve","I need water");

void microgear.publish (topic, message)

ในกรณทตองการสงขอความแบบไมเจาะจงผ รบ สามารถใชฟงชน Publish ไปยง Topic ทก าหนดได ซงจะมแต Microgear ท Subscribe ใน Topic นเทานน ทจะไดรบขอความ

arguments

topic (string) - ชอของ topic ทตองการจะสงขอความไปถง message (string) - ขอความ

microgear.publish("/outdoor/temp","28.5");

Page 142: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 142

void microgear.subscribe (topic)

Microgear อาจจะมความสนใจใน Topic ใดเปนการเฉพาะ เราสามารถใชฟงกชน subscribe() ในการบอกรบ Message ของ Topic นนได

arguments

topic (string) - ชอของ topic ทตองการจะบอกรบขอความ

microgear.subscribe("/outdoor/temp");

void microgear.unsubscribe (topic)

ยกเลกการ Subscribe

arguments

topic (string) - ชอของ Topic ทตองการจะยกเลก

microgear.unsubscribe("/outdoor/temp");

void microgear.writeFeed (feedid, datajson [, apikey])

เขยนขอมลลง Feed Storage

arguments

feed (string) - ชอของ feed ทตองการจะเขยนขอมล datajson (string) - ขอมลทจะบนทก ในรปแบบ JSON apikey (string) – API Key ส าหรบตรวจสอบสทธ หากไมก าหนด จะใช Default API Key ของ feed ทใหสทธไวกบ AppID

microgear.writeFeed("homesensor",{temp:25.7,humid:62.8,light:8.5});

Page 143: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 143

void microgear.resetToken (callback)

ออนไลนสงค าสง Revoke Token และลบ Token ออกจาก Cache สงผลให Microgear ตองขอ Token ใหมในการเชอมตอครงตอไป

arguments

callback (function) – Callback Function ทจะถกเรยกเมอการ Reset Token เสรจสน

microgear.resetToken(function(result){

});

เนองจาก resetToken() เปน Asynchronous Function หากตองการ Connect หลงจาก resetToken ตองเขยนโคดในลกษณะน

microgear.resetToken(function(result){

microgear.connect(APPID);

});

void microgear.useTLS (tlsmode)

Enable หรอ disable TLS โดยใน HTML5 Microgear จะใช TLS เปนคา Default

arguments

tlsmode (boolean) - เปน true หมายถงใช TLS (เปนคา Default), false หมายถงไมใช TLS

microgear.useTLS(false);

4.5.2 Events

Application ทรนบน Microgear จะมการท างานในแบบ Event Driven คอเปนการท างานตอบสนองตอ Event ตางๆ ดวยการเขยน Callback Function ขนมารองรบในลกษณะน

void microgear.on (event, callback)

arguments

event (string) - ชอ Event

Page 144: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 144

callback (function) - Callback Function

NETPIE Platform เวอรชนปจจบน ม Event ดงตอไปน

Event: 'connected' เกดขนเมอ Microgear Library เชอมตอกบ NETPIE ส าเรจ

microgear.on("connected", function() {

console.log("connected");

});

Event: 'closed' เกดขนเมอ Microgear Library เชอมตอกบ NETPIE ส าเรจ

microgear.on("closed", function() {

console.log("closed");

});

Event: 'error' เปน Event ทเกดม Error ขนภายใน Microgear

microgear.on("error", function(err) {

console.log("Error: "+err);

});

Event: 'message' เมอม Message เขามา จะเกด Event นขน พรอมกบสงผานขอมลเกยวกบ Message นนมาทาง Argument ของ Callback Function

microgear.on("message", function(topic,msg) {

console.log("Incoming message: "+msg);

});

Event: 'present' Event นจะเกดขนเมอม Microgear ใน Appid เดยวกน Online เขามาเชอมตอ NETPIE

microgear.on("present", function(event) {

console.log("New friend found: "+event.gearkey);

});

Event: 'absent' Event นจะเกดขนเมอม Microgear ใน Appid เดยวกน Offline หายไป

microgear.on("absent", function(event) {

console.log("Friend lost: "+event.gearkey);

});

Page 145: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 145

5. PYTHON MICROGEAR

microgear - python คอ Client Library ภาษา Python ทท าหนาทเปนตวกลางในการเชอมโยง Application Code หรอ Hardware เขากบบรการของ NETPIE Platform เพอการพฒนา IoT application

5.1 การตดตง

$ pip install microgear

5.2 ตวอยางการเรยกใชงาน

import microgear.client as microgear

import time

appid = <appid>

gearkey = <key>

gearsecret = <secret>

microgear.create(gearkey,gearsecret,appid,{'debugmode': True})

def connection():

print "Now I am connected with netpie"

def subscription(topic,message):

print topic+" "+message

def disconnect():

print "disconnect is work"

microgear.setalias("doraemon")

microgear.on_connect = connection

microgear.on_message = subscription

microgear.on_disconnect = disconnect

microgear.subscribe("/mails")

microgear.connect(True)

5.3 ตวอยางเพมเตม

Page 146: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 146

https://github.com/netpieio/microgear-python/wiki

5.4 การใชงาน LIBRARY

5.4.1 Microgear

client.create(gearkey,gearsecret,appid,args):

arguments

gearkey (string) - ใชในการอางองตวตนของ Microgear gearkey (string) - เปน Secret ของ Key ซงจะใชประกอบในกระบวนการยนยนตวตน appid (string) - กลมของ Application ท Microgear จะท าการเชอมตอ args (dictionary) - เปนการตงคาเพมเตม ส าหรบ Microgear ไดแก

o debugmode (boolean) - แสดงขอความในโหมด ฏebug o scope (string) - ก าหนด Scope ใหกบ Microgear เพอให /จ ากด สทธ บางอยาง โดยมรปแบบดงน

[r][w]:</topic/path> - r และ w คอสทธในการ Publish ละ Subscribe topic ดงทระบตามล าดบ เชน rw:/outdoor/temp

name:<gearname> - คอสทธในการตงชอตวเองวา <gearname>

chat:<gearname> - คอสทธในการ chat กบ <gearname> o alias (string) – ก าหนดชอเลนส าหรบ Microgear น โดยจะปรากฏทหนา Key Management และสามารถเปนชอท Microgear ตวอนใชส าหรบ chat() ได

ในขนตอนของการสราง Key บนเวบ netpie.io นกพฒนาสามารถก าหนดสทธขนพนฐานใหแตละ Key ไดอยแลว หากการสราง Microgear อยภายใตขอบเขตของสทธทม Token จะถกจายอตโนมต และ Microgear จะสามารถเชอมตอ NETPIE Platform ไดทนท แตหาก Scope ทรองขอนนมากเกนกวาสทธทก าหนดไว นกพฒนาจะไดรบ Notification ใหพจารณาอนมต Microgear ทเขามาขอเชอมตอ ขอควรระวงคอ หาก Microgear มการกระท าการเกนกวาสทธทไดรบไป เชน พยายามจะ Publish ไปยง Topic ทตวเองไมมสทธ NETPIE จะตดการเชอมตอของ Microgear โดยอตโนมต

Page 147: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 147

gearkey = <gearkey>

gearsecret = <gearsecret>

appid = <appid>

client.create(gearkey,gearsecret,appid, {'debugmode': True, 'scope':

"r:/outdoor/temp,w:/outdoor/valve,name:logger,chat:plant", 'alias':

"logger"})

client.connect(will_block): การเชอมตอ Microgear

argument

will_block (boolean) - (optional) ระบรปแบบการเชอมตอ วาใหมการ Block หลงจากเรยกฟงกชนหรอไม ซงจะมคา Default เปน False โดยโปรแกรมจะท างานในบรรทดถดไปหลงจากทท าการ Connect แลว ซงจะท าใหผพฒนาสามารถเขยนโปรแกรมในการตดตอกบ NETPIE ตอไปได โดยการเชอมตอจะคงอยตราบเทาการท างานของโปรแกรม เชน

client.connect()

while True:

client.chat("doraemon","Hello world. "+str(int(time.time())))

time.sleep(2)

หากตองการให Library ท าการ Block หลงจาก Connect แลว ท าใหหลงจาก Connect แลวโปรแกรมหยดอยทการท างานรวมกบ Platform โดยจะท างานตามทมเหตการณ callback (on_*) ทถก

พารามเตอรเปนหนา โดยสามารถระบก าหนดไวกอน True ได เชน

client.connect(True)

client.setalias(alias): ก าหนดชอเรยกส าหรบ Microgear น โดยจะปรากฏทหนา Key Management และสามารถเปนชอท Microgear ตวอนใชส าหรบ chat() ได argument

alias (string) - ชอของ Microgear น

client.setalias("python");

Page 148: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 148

client.chat(gearname, message):

การสงขอความโดยระบ gearname และขอความทตองการสง

arguments

gearname (string) - ชอของ Microgear น message (string) – ขอความ

client.chat("html","hello from python");

client.publish(topic, message, retain):

ในกรณทตองการสงขอความแบบไมเจาะจงผ รบ สามารถใชฟงชน Publish ไปยง Topic ทก าหนดได ซงจะมแต Microgear ท Subscribe ใน Topic นเทานน ทจะไดรบขอความ

arguments

topic (string) - ชอของ topic ทตองการจะสงขอความไปถง message (string) – ขอความ retain (boolean) – ระบคา True ถาตองการเกบขอความไว หากมการ Subscribe Topic นกจะไดรบขอความนอก คา Default เปน False หากไมระบ และถาตองการลบขอความทบนทกไวใหสงขอความ ""ซงมความยาวเปน 0 เพอลางคาขอความทไวทกไว

client.publish("/outdoor/temp","28.5");

client.subscribe(topic)

Microgear อาจจะมความสนใจใน Topic ใดเปนการเฉพาะ เราสามารถใชฟงกชน Subscribe() ในการบอกรบ Message ของ Topic นนได

argument

topic (string) - ชอของ Topic ทตองการบอกรบ โดยตองขนตนดวยเครองหมาย "/"

client.subscribe("/temp");

Page 149: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 149

void microgear.writeFeed (feedid, datajson [, apikey])

เขยนขอมลลง Feed Storage

arguments

feed (string) - ชอของ feed ทตองการจะเขยนขอมล datajson (string) - ขอมลทจะบนทก ในรปแบบ JSON apikey (string) – API key ส าหรบตรวจสอบสทธ หากไมก าหนด จะใช Default API Key ของ feed ทใหสทธไวกบ AppID

microgear.writeFeed("homesensor",{temp:25.7,humid:62.8,light:8.5});

client.resettoken()

ใชในการการลบ Token ทมอย จาก Cache และบน Platform เมอลบแลว จ าเปนจะตองขอ Token ใหมทกครง

client.resettoken();

5.4.2 Event

Application ทรนบน Microgear จะมการท างานในแบบ Event Driven คอเปนการท างานตอบสนองตอ Event ตางๆ ดวยการเขยน Callback Function ขนมารองรบในลกษณะๆ ดงตอไปน

client.on_connect เกดขนเมอ Microgear Library เชอมตอกบ Platform ส าเรจ

คาทตง

Callback (function) - ฟงกชนทจะท างาน เมอมการ Connect เกดขน

def callback_connect() :

print "Now I am connected with netpie"

client.on_ connect = callback_connect

Page 150: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 150

client.on_disconnect เกดขนเมอ Microgear Library ตดการเชอมตอกบ Platform

คาทตง

Callback (function) – Callback Function

def callback_disconnect() :

print "Disconnected”

client.on_disconnect = callback_disconnect

client.on_message เกดขนเมอไดรบขอความจากการ Chat หรอ หวขอท Subscribe

คาทตง

Callback (function) - ฟงกชนทจะท างานเมอไดรบขอความ โดยฟงกชนนจะรบพารามเตอร 2 ตวคอ

o topic - ชอ Topic ทไดรบขอความน

o message - ขอความทไดรบ

def callback_message(topic, message) :

print "I got message from ", topic, ": ", message

client.on_message= callback_message

client.on_present Event นจะเกดขนเมอม Microgear ใน Appid เดยวกน Online เขามาเชอมตอ NETPIE

คาทตง

callback (function) - จะท างานเมอเกดเหตการณน โดยจะรบคาพารามเตอร คอ o gearkey - ระบคาของ gearkey ทเกยวของกบเหตการณน

def callback_present(gearkey) :

print gearkey+" become online."

client.on_present = callback_present

Page 151: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 151

client.on_present Event นจะเกดขนเมอม Microgear ใน Appid เดยวกน Offline หายไป

คาทตง

callback (function) - จะท างานเมอเกดเหตการณน โดยจะรบคาพารามเตอร คอ o gearkey - ระบคาของ gearkey ทเกยวของกบเหตการณน

def callback_absent(gearkey) :

print gearkey+" become offline."

client.on_absent = callback_absent

client.on_warning เปน Event ทเกดเมอมเหตการณบางอยางเกดขน และมการเตอนใหทราบ

คาทตง

callback (function) - จะท างานเมอเกดเหตการณน โดยจะรบคาพารามเตอร คอ o msg - ระบขอความทเกยวของกบเหตการณน

def callback_warning(msg) :

print msg

client.on_warning = callback_warning

client.on_info เปน Event ทเกดมเหตการณบางอยางเกดขนขนภายใน Microgear

คาทตง

callback (function) - จะท างานเมอเกดเหตการณน โดยจะรบคาพารามเตอร คอ o msg - ระบขอความทเกยวของกบเหตการณน

def callback_info(msg) :

print msg

client.on_info = callback_info

client.on_error Event นจะเกดขนเมอม Error

คาทตง

Page 152: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 152

callback (function) - จะท างานเมอเกดเหตการณน โดยจะรบคาพารามเตอร คอ o msg - ระบ Error ทเกยวของกบเหตการณน

def callback_error(msg) :

print msg

client.on_error = callback_error

6. REST API

NETPIE Platform ไดจดเตรยม REST API ส าหรบการตดตอสอสารกบ Microgear ชนดอนๆ ผานทาง HTTP Protocol ทเขาถงไดงาย โดยไมยดตดกบ programming Language หรอ Hardware สามารถน าไปประยกตใชกบ Web Server แบบดงเดม หรอเรยกผาน Command Line รวมไปถงการเชอมตอกบ Web Server ตางๆ

6.1 API ENDPOINT

REST API ของ NETPIE ใหบรการอยท https//:api.netpie.io/

6.2 AUTHENTICATION

ในการเชอมตอ API Client จะตองท าการยนยนตวตน โดยใชหนงในสองวธน

1. สงผาน HTTP Header แบบ Basic Auth โดยใช

Username : KEY

Password : SECRET

ตวอยางการใช Basic Auth ดวย cURL

$ curl -X GET "http://www.domainname.com/resources" -u key:secret

2. สงผานทาง URL Parameter ในรปแบบ

?auth=KEY:SECRET

ตวอยางการใช URL Parameter ดวย cURL

$ curl -X GET "http://www.domainname.com/resources?auth=key:secret"

Page 153: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 153

6.3 RESOURCE TYPES

Topic

Topic เปนจดแลกเปลยน Message ระหวาง Microgear ลกษณะการเขยนจะอยในรปของ Path เชน /home/bedroom/temp โดย Microgear สามารถ PUT/publish, GET/subscribe ไปท Topic นได

Microgear

Microgear คอ อปกรณทเชอมตอกบ NETPIE เราสามารถสอสารตรงไปท Microgear โดยอางองชอ alias ทตงใหอปรณนน

Postbox

Postbox เปนพนทส าหรบเกบขอมลแบบ Queue โดย Message ทถกสงเขาไปใน Postbox จะถกเกบสะสมไว จนกวาจะมการอานออกไป Message ทถกอานแลวจะหายไปจาก Postbox ทนทจงเหมาะทจะใชเปนเครองมอสอสารกบ Microgear ทไมสามารถ Online ไดตลอดเวลา เชน PHP Script

6.3.1 Topic

PUT /topic/{appid}/{topic}

เขยนขอความไปยง Topic ของ Appid ตามทระบ

URL parameter

retain สงใหเกบคานไว (เฉพาะคาลาสดเพยงคาเดยว)

Body

เปน Message ทจะสง หากตองการลบคาท Retain ไว ใหสงแบบ Retain และใช Body เปน String เปลา

ตวอยางการเรยก REST API ดวย cURL สมมตวาเราไดสราง App บน NETPIE ชอ myappid และม Key และ Secret ดงน

Page 154: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 154

เราจะใช REST API ในการสง Message แบบ Retain วา ON ไปยง microgear ทบอกรบ Topic

/home/bedroom/light ไดดวย cURL command line น

$ curl -X PUT

"https://api.netpie.io/topic/myappid/home/bedroom/light?retain" -d "ON" -u

jVjzJXaJwdJKHhF:StOAKIZhXB5CaqnIHeb7s1DfiW7mQj

GET /topic/{appid}/{topic}

อาน Message จาก Appid ท Topic ตามทระบโดย Client จะไดรบเฉพาะ Message ลาสดทถก Retain ไวกอนหนาน

URL parameter

ไมม

Body

ไมม

ตวอยาง

$ curl -X GET "https://api.netpie.io/topic/myappid/home/bedroom/light" -u

jVjzJXaJwdJKHhF:StOAKIZhXB5CaqnIHeb7s1DfiW7mQj

6.3.2 Microgear

PUT /microgear/{appid}/{gearalias}

สง Message ไปยง Microgear ทตงชอวา gearalias ของ Appid ชอ appid

Body

Message ทจะสง เปน Plain Text String หากมการเขารหสดวยรปแบบ JSON ทางปลายทางจะตองน า String ไป Parse เอง

Page 155: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 155

6.3.3 Postbox

PUT /postbox/{appid}/{postboxname}

สง Message ไปยง Postbox ชอ postboxname ของ Appid ชอ appid

URL parameter

tag ผสงสามารถตด Tag ให Message ได เพอความสะดวกในการเลอกอานเฉพาะ Message ทสนใจ

Body

message ทจะสง เปน Plain Text String หากมการเขารหสดวยรปแบบ JSON ทางปลายทางจะตองน า String ไป Parse เอง

$ curl -X PUT "https://api.netpie.io/postbox/myappid/webbox?tag=error" -d

"ON" -u jVjzJXaJwdJKHhF:StOAKIZhXB5CaqnIHeb7s1DfiW7mQj

GET /postbox/{appid}/{postboxname}

อาน Message ครงละหนงขอความจาก Postbox ชอ postboxname ของ Appid ชอ appid โดยจะเรยงตามล าดบเวลา Message ทเขามากอน จะถกอานกอน

URL parameter

tag ไมจ าเปนตองระบ แตjหากมการระบ Tag จะเปนการเจาะจงอานเฉพาะ Message ทตด Tag นเทานน

Body

ไมม

$ curl -X GET "https://api.netpie.io/postbox/myappid/webbox?tag=error" -u

jVjzJXaJwdJKHhF:StOAKIZhXB5CaqnIHeb7s1DfiW7mQj

Page 156: คู่มือการใช้งาน NETPIE An Official Guide to NETPIE203.159.154.241/innogoth/wp-content/uploads/2017/... · คู่มือการใช้งาน

คมอการใชงาน NETPIE - 156

ผเขยน

1. พนตา พงษไพบลย 2. ชาวร อสรยภทร 3. กลชาต มทรพยหลาก 4. เอมอชนา นรนตสขรตน 5. เปรมฤด เอยมสภคกล 6. อนนท ปญญา 7. ชยวทย แสนทวสข

ศนยเทคโนโลยอเลกทรอนกสและคอมพวเตอรแหงชาต

ส านกงานพฒนาวทยาศาสตรและเทคโนโลยแหงชาต

112 อทยานวทยาศาสตประเทศไทย ถนนพหลโยธน

ต าบลคลองหนง อ าเภอคลองหลวง จงหวดปทมธาน 12120

โทร 02-564-6900

อเมล [email protected]

Website https://netpie.io

Facebook Group “NETPIE” https://www.facebook.com/groups/netpie/

Github “netpieio” https://github.com/netpieio