บทความ IoT
ไม่ว่าจะ ข่าวสาร บทสัมภาษณ์ และ Digital Skill บนสื่อ
มีให้คุณได้อ่านบทความดี ๆ มากมายแล้วที่นี่
โดย: Laris
| IoT
Yet Another Home Automation (2)
Mozilla’s WebThingsบทความก่อนหน้านี้ เราได้ทำการติดตั้ง WebThings Gateway ไปแล้ว เราค้างกันไว้ที่หน้า Things ว่างๆ (No devices yet)ที่ยังไม่มี devices หรือ things ขึ้นมาโชว์นะคะThings pageเราจะกลับเข้าไปที่หน้า Things ได้ยังไง?…. มี 2 options ค่ะ …..gateway.local —ถ้าหากเราเชื่อมต่อ network เดียวกันกับ gateway นะคะ 2. [your_subdomain].mozilla-iot.org — ถ้าหากจะเข้าผ่านมือถือ คอมพิวเตอร์ ที่เชื่อมต่อ network อื่นค่ะ โดยที่ [your_subdomain]คือชื่อที่เราตั้งไว้ตอนติดตั้ง gateway ค่ะถึงตรงนี้…. ถ้าใครไม่สามารถเข้าไปหน้า Things แบบข้างบนได้ ….ให้หันไปเชคที่ Pi ก่อนนะคะ ว่าลืมเสียบปลั๊กไฟรึป่าว หรือ รอให้ Pi บูธสักแปบ และ เชค network ที่เชื่อมต่อบนคอมพิวเตอร์ หรือ มือถือ ค่ะ แล้วเลือก option 1 หรือ 2 ให้ตรงกับเงื่อนไขของ network ที่เราเชื่อมต่ออยู่ค่ะ แล้วลองเข้าใหม่ค่ะเริ่ม scan หา device ด้วยการกดปุ่ม (+) ล่างขวาได้เลยค่ะตัว gateway จะเริ่มค้นหา device ค่ะ จะเห็น Scanning for new devices…สักพัก จะเห็น No new things found และมี option ให้ ว่าจะเลือก โดยผ่าน add-ons หรือว่า URLถึงตรงนี้เราไม่ได้ทำผิดตรงไหนนะคะ ที่มันไม่เจอ เพราะเรายังไม่มี thing เพิ่มเข้าไปนั่นเองค่ะ…และในเมื่อเค้าเคลมแล้วว่า platform เค้าเชื่อม things ได้ ด้วย URL เราก็จะเลือกใช้วิธีเพิ่ม thingsโดยผ่าน URL กันค่ะ…สิ่งที่ต้องเตรียม สำหรับการทำ Thing ก็คือ…บอร์ด ESP32 Arduino IDE ….เริ่ม Installation กันก่อนนะค่ะ….เพิ่ม ArduinoJson และ webthings-arduino libraries ก่อนค่ะSketch > Include Library > Manage Libraries2. เปิด LED example เลยค่ะ File > Examples > webthings-arduino > LED/** * Simple server compliant with Mozilla's proposed WoT API * Originally based on the HelloServer example * Tested on ESP8266, ESP32, Arduino boards with WINC1500 modules (shields or * MKR1000) * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */#include <Arduino.h>#include "Thing.h"#include "WebThingAdapter.h"//TODO: Hardcode your wifi credentials here (and keep it private)const char* ssid = "public";const char* password = "";#if defined(LED_BUILTIN)const int ledPin = LED_BUILTIN;#elseconst int ledPin = 13; // manually configure LED pin#endifWebThingAdapter* adapter;const char* ledTypes[] = {"OnOffSwitch", "Light", nullptr};ThingDevice led("led", "Built-in LED", ledTypes);ThingProperty ledOn("on", "", BOOLEAN, "OnOffProperty");bool lastOn = false;void setup(void){ pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH); Serial.begin(115200); Serial.println(""); Serial.print("Connecting to \""); Serial.print(ssid); Serial.println("\"");#if defined(ESP8266) || defined(ESP32) WiFi.mode(WIFI_STA);#endif WiFi.begin(ssid, password); Serial.println("");// Wait for connection bool blink = true; while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); digitalWrite(ledPin, blink ? LOW : HIGH); // active low led blink = !blink; } digitalWrite(ledPin, HIGH); // active low ledSerial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); adapter = new WebThingAdapter("w25", WiFi.localIP());led.addProperty(&ledOn); adapter->addDevice(&led); adapter->begin(); Serial.println("HTTP server started"); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.print("/things/"); Serial.println(led.id);}void loop(void){ adapter->update(); bool on = ledOn.getValue().boolean; digitalWrite(ledPin, on ? LOW : HIGH); // active low led if (on != lastOn) { Serial.print(led.id); Serial.print(": "); Serial.println(on); } lastOn = on;}เปลี่ยน ssid และ password ให้ตรงกับ wifi network ของเราก่อนนะคะLED pinใส่หมายเลย led pin ให้ตรงกับของบอร์ด เราด้วยนะคะ … จากนั้น ก็ upload ลงบอร์ดได้เลยค่ะThingDeviceเราจะกำหนด ThingDevice ด้วยชื่อ ‘Built-in LED’ ThingPropertyled เราที่ชื่อ Built-in LED จะมี property — ‘on’ 3. กลับมาที่หน้า Things แล้ว scan ใหม่ จะเจอ led ที่เราทำไว้บนบอร์ด esp32 มีชื่อว่า Built-in LED….. Hit save และ done เลยค่ะ…..newly added thing — Built-in LEDLED — OFFจะเห็นว่า led ของเราโผล่ขึ้นมาบนหน้า Things แล้วค่ะ LED — ONลองคลิกที่ led เราได้เลยค่ะ จะ toggle สถานะ ON — OFF ซึ่งจากโค้ดตัวอย่าง จะเป็น active low นะคะ เวลา ON ไฟ LED จะดับ และ เวลา OFF ไฟ LED จะ ติดค่ะTroubleshoot : ถ้าไฟ LED ไม่ติดนะคะ ลองกลับไปเช็คค่า ledPin อีกทีนะคะ ว่าตรงตามสเปคของบอร์ดเราที่ใช้รึป่าวเพื่อให้สมกับที่เป็น Smart Home Automation Platform นะคะ จะมาคอยเลื่อนเปิดปิดด้วยมือไม่ได้แล้ว ต่อไปเราจะสั่งงาน led ของเราด้วยการใช้ Rules ค่ะRulesตัว Rules ก็จะตาม logic ที่เป็น if (A) then (B) ค่ะ หรือจะเปลี่ยน if เป็น while ก็ได้ค่ะ ซึ่งหน้านี้ก็จะใช้งานง่ายค่ะ แค่ drag แล้วก็ dropเรามาลองตั้ง Rules ด้วยเวลาให้กับ led เราดูค่ะ ลาก Clock ให้เป็น input ค่ะ แล้ว ลาก led ให้เป็น outputตั้งเวลาที่ต้องการได้เลยค่ะ และ เลือก property (on/off) ค่ะ เพียงเท่านี้เราก็จะได้ระบบเปิดปิด led อัตโนมัติแล้วค่ะRules by time of the dayนอกจากนี้ยัง WebThing ยังสามารถเพิ่ม thing ด้วย add-ons ลองเล่นกันได้ค่ะ เผื่อใครจะมี device ที่อยู่ใน list ของ add-ons ก็สามารถเพิ่มเข้าไปโดยที่ไม่ต้องโค้ดได้เลยค่ะ รวมไปถึงอีก feature นึง ที่น่าสนใจ นั่นก็คือ FloorPlan ค่ะ เราสามารถอัพรูป svg ที่เป็น floor plan ของบ้านเราได้เลย แล้วเราก็สามารถที่จะลาก thing แต่ละตัวมาวางไว้ตามห้องได้เลยคะ สมกับที่เป็น Smar home automation นะคะ…FloorPlanFloorPlanอ้างอิงจากBuild Your Own Web ThingsWebThings Gateway for Raspberry Pi User Guide
โดย: Laris
| IoT
Yet Another Home Automation (1)
Mozilla’s WebThingsจากบทความ รู้จัก Home Assistant (1) - (4)เราได้ลองใช้หนึ่งใน Home Automation platform ที่ชื่อ ว่า Home Assistant ในการควบคุมเปิดปิดไฟกันไปแล้วนะคะในบทความนี้เราจะมาทำความรู้จักกับอีกหนึ่ง open platform ค่ะ ซึ่งก็คือ mozilla’s WebThings ค่ะmozilla เริ่มพัฒนา WebThings (เดิมใช้ชื่อว่า Project Things) ในปี 2017 ซึ่งเป็น platform สำหรับเชื่อมต่อ device ต่างๆเข้าด้วยกัน ด้วยการกำหนด url ให้แต่ละdevice เพื่อให้สามารถ monitor และ control ได้ผ่าน web และใช้ Web of Things หรือ WoT ( by W3C )การกำหนด url ให้แต่ละ device ก็จะช่วยให้ IoT ข้ามข้อจำกัดขึ้นมาอีกเลเวลนึงคะ ด้วยที่ว่าตอนนี้มี device มาจากหลากหลาย manufacturers หลากหลาย protocols หากการจะใช้ web technology ที่เป็น standard และใช้กันทั่วโลกอยู่แล้ว มาเป็นตัวเชื่อมต่อ device เหล่านี้ ก็คงจะช่วยประหยัดเวลาในการสร้าง platform ได้มากเลยค่ะThe Web of Things connects real-world objects to the World Wide Web.WoT ต้องการที่จะเป็น single platform ที่จะรวม device ต่างๆ หลากหลายยี่ห้อ ให้เป็นส่วนหนึ่งของ World Wide Web และให้สามารถเชื่อมต่อเข้าถึงกันได้ด้วย web technology ที่ใช้อยู่ และ เป็น standard ในปัจจุบัน เช่น HTML5, JavaScript WebThings ประกอบด้วย 2 ส่วนค่ะ WebThings Gateway เป็น web-based user interface ที่ใช้สำหรับ monitor/control smart home devices ค่ะ มี rules ที่สามารถทำ automation ได้ แนว ‘it this , then that…’ และมี add-ons สำหรับ smart home devices ที่มีในขายอยู่แล้วWebThings Framework สำหรับ developers ที่ต้องการพัฒนา web things เองในบทความนี้ เราจะทำ WebThings Gateway โดยใช้ Raspberry Pi 3 ค่ะ ไหนๆเราก็ใช้ใน บทความ สิ่งเล็กๆที่เรียกว่า beacon (1)-(7)กันแล้วนะคะ และ บทความถัดไป เราจะทำ web thing โดยใช้บอร์ด esp32 หรือถ้าใครจะสะดวกใช้ Smart home device อื่นๆ ก็สามารถใช้ได้นะคะ สามารถจาก ที่นี่ ได้เลยค่ะว่าตัวไหน นำมาใช้ได้บ้าง …..สิ่งที่ต้องมีนะคะ….Raspberry Pi 3Note : ถ้าใครอยากจะทำโดยใช้ smart home device ที่ใช้ zigbee หรือ z-wave จำเป็นต้องมี usb dongle แต่เราจะไม่พูดถึงวิธีการใช้สอง protocols ในบทความนี้และบทความถัดไปนะคะ เราจะใช้ WIFI ค่ะ)zigbee และ z-wave เป็นอีก protocols ที่ใช้ใน home automation ค่ะ… มาเข้าสู่ขั้นตอนวิธีทำ WebThings Gateway กันเลยค่ะ…Download image สำหรับ WebThings Gateway กันก่อนค่ะ2. ได้ไฟล์ image มาแล้ว ก็ flash ลง sd card ได้เลยคะ โดยเราจะใช้ Etcher เช่นเคยค่ะ3. ใส่ sd card และ เสียบปลั๊กให้ Pi เลยคะ โดย Pi จะทำตัวเหมือนเป็น WiFi hotspot ค่ะ และ ใช้ชื่อว่า WebThing Gateway xxxx ( xxxx เป็น digits สี่ตัวที่ได้มาจาก Pi’s MAC address ค่ะ เช่น 16D1)ใ ห้เราเชื่อมต่อ กับ network นี้ก่อนนะคะ หรือหากใครจะต่อ Pi โดย ใช้สาย ethernet ก็ได้ค่ะ แล้วไปที่ gateway.local เพื่อเข้าหน้า setup ค่ะwelcome pageจะเจอหน้า Welcome เพื่อให้เลือกเชื่อมต่อกับ wifi network ของเราค่ะ หลังจากจากนั้นก็ทำการเชื่อมต่อกับ network ที่เลือกไว้นะคะถึงตรงนี้ จะให้เราตั้งชื่อ subdomain ค่ะสร้าง subdomain เสร็จ ก็จะ redirect เราไปที่หน้าถัดไปเพื่อสร้าง account ค่ะ Things pageสร้าง account เสร็จแล้วก็จะ login เราเข้าหน้า Things ค่ะ ซึ่งเป็น Progressive Web App นั่นหมายความว่า เราสามารถเพิ่มหน้านี้ไปที่หน้า homescreen บนมือถือเราได้เลยค่ะ.. สะดวกดีนะคะเสร็จแล้วค่ะ สำหรับการทำ WebThings Gateway……บน Raspberry Pi แต่จะเห็นว่า ยังไม่มี devices หรือ things บนหน้าเวปนะคะ บทความถัดไปเราจะมาเพิ่ม things ด้วย WebThings Framework กันค่ะ…..อ้างอิงจากHow to build your own private smart home with a Raspberry Pi and Mozilla’s Things Gateway
โดย: Laris
| IoT
IoT Connectivity
LPWAN — Low-Powered Wide Area Networkถ้าจะพูดถึงคำว่า IoT หรือ Internet of Things นะคะ หรือ การเอา Things มาเชื่อมต่อกัน เพื่อให้มีการแลกเปลี่ยนข้อมูลกัน จะเห็นว่าคำว่า IoT ไม่ได้หมายถึงแค่ device /sensor หรือ application เพียงอย่างเดียวนะคะ IoT Connectivity ก็เป็นส่วนผสมหลักในการทำให้ Things เหล่านี้ สามารถพูดคุยสื่อสารกันได้ด้วย Data Protocol อย่างเช่น MQTT ที่เราได้พูดถึงกันค่อยข้างละเอียดกันไปแต่ต้นแล้วนะคะ ซึ่งในปัจจุบัน มีการนำ IoT เข้ามาใช้งานจริงจัง ในหลายๆภาคอุตสาหกรรม ที่เห็นเป็นตัวอย่างได้ชัดเจนก็พวก IoT Application ต่างๆ ที่ขึ้นต้นด้วยคำว่า Smart นี่แหละค่ะ ไม่ว่าจะเป็น Smart City, Smart home, หรือ Smat Farmงาน IoT Application ส่วนใหญ่ก็จะมีลักษณะการใช้งานที่คล้ายกันค่ะ คือ ต้องตอบโจทย์หลักสำคัญๆเลยที่ว่า….ต้องใช้ พลังงานน้อยๆ (low enery consumption) ต้องส่งข้อมูลน้อยๆ (low data rate) ต้องสามารถส่งได้ในระยะทางที่ไกลๆ (long range) และที่สำคัญอีกอย่างนะคะ ต้องใช้งบน้อยๆค่ะ (cost effectiveness) และด้วยลักษณะเฉพาะตัวในการใช้งานของ IoT Application ข้างต้นนี้ Network Technology ที่มีอยู่ อาจจะไม่ตอบโจทย์ความต้องการของ IoT Application ได้ซะทั้งหมดทีเดียว เช่น Bluetooth ก็จะมีข้อเสียตรงที่ไม่ครอบคลุมพื้นที่ระยะไกลค่ะ (< 5km ) หรือ Cellular Communication เช่น 3G/4G สามารถให้การเชื่อมต่อครอบคลุมพื้นที่ได้ไกลกว่า 5 กิโลเมตร แต่ไม่ค่อยเป็นมิตรกับแบตเตอรี่ค่ะ (ไม่ตอบโจทย์เรื่อง battery consumption) และนี่ก็เป็นที่มาของ Wireless Technology อีกรูปแบบนึงค่ะ ที่เรียกว่า LPWAN หรือ Low-Powered Wide Area Network ค่ะ เพื่อให้เหมาะสมกับ IoT Application ค่ะ Figure -1 Network Technologies and Distancesที่จะได้ยินชื่อกันบ่อยๆ และค่อนข้างจะเป็น Standard หน่อย ก็จะมี Sigfox , LoRa, และ NB-IoT ค่ะ …ลองมาอ่านประวัติกันคร่าวๆค่ะ…SigfoxSigfox ถูกพัฒนาขึ้นมาโดยเน้นไปทาง LPWAN โดยบริษัท Sigfox ในฝรั่งเศสค่ะ ใช้ Standard และ Technology ของตัวเองค่ะ เช่น ใช้ modulation ที่ทำให้สามารถเพิ่มระยะในการรับส่งมากขึ้นLoRaแรกเริ่มเดิมทีถูกพัฒนาโดยบริษัท startup ในฝรั่งเศษ ชื่อ Cycleo ค่ะ หลังจากนั้นก็ถูกเปลี่ยนมือไปอยู่ภายใต้การดูแลโดย บริษัท Semtech ค่ะ LoRa ถูกกำหนดและควบคุมด้วย Standard ของ LoRa Alliance ค่ะNB-IoTหลังจากที่มี Sigfox และ LoRa บริษัทที่ทำเกี่ยวกับ cellular และ 3GPP เองก็อยากมีส่วนร่วมในตลาดของ LPWAN จึงได้เปิดตัว NB-IoT ขึ้นมาค่ะ และถูกควบคุมดูแล โดย 3GPP นั่นเองค่ะจากรูป Figure -1 Network Technologies and Distances จะเห็นว่า LPWAN มีทั้งแบบที่เป็น Licensed (NB-IoT) และ Unlicensed (Sigfox และ LoRa) ซึ่ง unlicensed band ก็จะมีข้อดีที่ว่าไม่ยุ่งยากค่ะ ไม่จำเป็น ต้องมี Service provider ช่วยลดต้นทุน แต่ก็จะมีปัญหาเรื่องสัญญาณรบกวนถ้าหากว่ามีการใช้คลื่นความถี่เดียวกัน ในพื้นที่เดียวกันค่ะ ด้วยความที่ว่าเป็น unlicensed band นะคะ ใครอยากจะใช้ก็ได้และในบทความถัดไป เราจะมาทำความเข้าใจ โดยละเอียดกับ LoRa กันค่ะอ้างอิงจากWhat is LPWAN and the LoRaWAN Open Standard?
โดย: Laris
| IoT
LPWAN Technologies
LoRa — LoRaWANจากบทความที่แล้ว เรื่อง IoT Connectivity ซึ่งก็จะพูดถึงซะเยอะในเรื่องของ LPWAN Technology นะคะ ทั้ง Sigfox, LoRa, และ NB-IoT เพราะความที่ LPWAN ค่อยข้างจะตอบโจทย์ความต้องการของ IoT application ได้ค่อนข้างดีเลยทีเดียวค่ะ ประหยัดพลังงานได้มากถึงขั้นที่ว่าใช้กันได้เป็นปีๆโดยไม่ต้องชาร์จหรือเปลี่ยนแบตเตอรีเลยค่ะ และใช้งานได้ในพื้นที่ห่างไกล(remote area)ในบทความนี้จะขออธิบายเพิ่มเติมเกี่ยวกับ LoRa ค่ะ ก่อนที่เราจะได้ลงมือทำกันค่ะLoRa หรือ LoRaWAN มักจะถูกเรียกแทนกันนะคะ(ผู้เขียนเองก็เคยสงสัยค่ะ ว่าต้องเรียกว่ายังไงกันแน่) แต่ความจริงแล้วในเชิงคำนิยามเค้ามีความหมายแตกต่างกันค่ะLoRaWAN Protocol (sources : Smart Makers, OpenIoT, )LoRa คือ Physical Layer Modulation ที่ถูกพัฒนาโดย Semtech ใน LoRaWAN protocol ซึ่งมีวิธีการ modulation มาจาก Chirp Spread Spectrum (CSS) modulation ที่ใช้ใน radar application ใน military และ space communication ค่ะ เพราะว่าสามารถใช้งานได้ในระยะทางไกล ใช้พลังงานน้อย และคลื่นถูกรบกวนได้น้อยค่ะ เพราะใช้คลื่น Sub 1GHZ ในแต่ละที่ก็จะใช้คลื่นความถี่ที่แตกต่างกันค่ะ เช่น ในอเมริกา ก็จะใช้ความถี่ที่ 915 MHZ ยุโรปก็จะใช้ความถี่ที่ 868 MHZ ในเอเชียว ก็จะใช้ความถี่ที่ 430 MHZ เป็นต้นค่ะmodulation คือการ modify คลื่นวิทยุ (radio signal)ธรรมดา ๆให้สามารถ carry ข้อมูลได้ค่ะส่วน LoRaWAN จัดว่าเป็น wireless communication standard เหมือนพวก Bluetooth, GSM, 4G, หรือ LTE และเพื่อให้เกิดความแตกต่างจาก LoRa , LoRa Alliance เลยใช้คำว่า LoRaWAN ในการอ้างอิงถึง architecture และ specification เวลาพูดถึง end-to-end LoRaWAN communications และ protocols ค่ะLoRaWAN ArchitectureLoRaWAN ประกอบด้วย End node (end device)Gateway (concentrator)Network serverApplication serverข้อมูลที่ถูกส่งจาก node มักจะถูกส่งไปยัง gateway หลายๆตัวค่ะ และ gateway เองก็จะส่งข้อมูลไปให้ network server ผ่าน cellular, Ethernet, Wi-Fi, หรือ satellite ข้อมูลที่ duplicate จะถูก de-duplicate ที่ network server และสุดท้ายแล้ว ข้อมูลจะถูกส่งไปที่ application server ซึ่งเป็น ข้อมูลที่ใช้ใน payload ของ LoRaWAN message ค่ะLoRaWAN TopologyLoRaWAN Star TopologyLoRaWAN topology จะเป็นแบบ “star of stars” topology ซึ่ง end node จะมีการแลกเปลี่ยนข้อมูลผ่าน gateway ที่ทำตัวคล้าย bridge และมี central LoRaWAN network serverLoRaWAN SecurityLoRaWAN Securityจากรูป LoRaWAN Security ค่ะ ในชั้นแรกที่เรียกว่า Network security ที่ MAC layer ค่ะ การันตี authentication ของ end node โดย network server และมีการ encrypt ข้อมูล โดยใช้ AES ค่ะแต่ละ end node ก็จะใช้ network session key (NwkSKey) ที่จะถูกใช้โดย ตัว end node เอง และ network server ค่ะ เพื่อให้มั่นใจเรื่อง data integrity ค่ะถัดไปในชั้นที่สองนะคะ application session key (AppSKey) จะถูกใช้ในการ encrypt/decrypt ระหว่าง end node และ application server ค่ะ เพื่อป้องกัน LoRaWAN service provider เข้าถึงตัว application payload หากไม่ได้รับอนุญาตค่ะอ้างจิงจากLoRaWAN simply explainedGonzalo Salgueiro; David Hanes; Rob Barton , IoT Fundamentals: Networking Technologies, Protocols, and Use Cases for the Internet of Things, 2017Pradeeka Seneviratne, Beginning LoRa Radio Networks with Arduino, 2019Perry Lea, Internet of Things for Architects, 2018
โดย: Laris
| IoT
MQTT Security (3)
Payload EncryptionMQTT Payload Encryptionนอกจาก authentication แล้ว ใน Applicaiton level ยังสามารถทำการ encryption ได้ค่ะ โดยทำการ encrypte ตัว payload ค่ะ ซึ่งส่วนใหญ่ก็จะใช้กับ message ประเภท PUBLISH และ LWT ค่ะMQTT Payload Encryptionจะเห็นว่าในส่วนอื่นๆ (นอกจาก payload แล้ว ) จะไม่มีการ encrypt ค่ะ เช่น topic หรือ QoS ทั้งนี้ก็เพื่อเป็นการลดภาระที่ไม่จำเป็นให้กับ broker ค่ะ เพราะไม่ต้อง decrypt ข้อมูล meta พวกนี้Encryption Scenariosรูปแบบของ encryption ก็จะมีอยู่ด้วยกัน 2 แบบ นะคะEnd-to-end (E2E) encryption ( publisher — subscriber )Encrypted message จาก publisher จะไม่ถูก decrypt โดย broker ค่ะ เพราะ broker ใช้ข้อมูลจาก meta เท่านั้น สำหรับ routing /QoS และจะมีแต่ subscriber ที่มี decryption key เท่านั้น ที่สามารถ decrypt message ได้ค่ะ ถึงแม้ว่า attacker จะสามารถเข้าถึง message นี้ได้ อาจจะเพราะ ข้อผิดพลาด เรื่อง authentication/authorization หรือ TLS แต่ก็จะไม่สามารถ decrypt message ได้ค่ะEnd-to-end (E2E) encryption2. Client-to- Broker encryption ( publisher — broker )message จะถูก encrypt ระหว่าง publisher กับ broker เท่านั้นค่ะ broker จะทำการ decrypt (ซึ่งต้องอาศัย plugin สำหรับ decryption เพิ่มนะคะ) และ เฉพาะ trusted subscriber ที่เชื่อมต่อ กับ broker ด้วย TLS เท่านั้นที่จะได้รับ message ที่ decrypt แล้วจาก broker ค่ะถือเป็นอีกตัวเลือกนึง หากว่าไม่สามารถนำ TLS มาใช้ได้กับการเชื่อมต่อ ของ publisher และ broker ค่ะClient-to- Broker encryptionEncryption mechanismsที่นิยมใช้กันก็มีอยู่ 2 แบบค่ะ Asymmetric encryption (public/private key encryption)แบบนี้จะเหมาะกับระบบ ที่มี trusted subscriber ไม่เยอะมากค่ะ แต่มี untrusted publisher เยอะ และควรใช้ public/private key หนึ่งคู่ ต่อ topic ค่ะSymmetric encryptionแบบนี้ key ที่ใช้จะมีอันเดียวค่ะ และส่วนใหญ่ก็จะใช้ในรูปแบบของ password ซึ่งเป็นวิธีที่ง่ายกว่า Asymetric encryption เพราะไม่ต้องยุ่งยากกับการจัดสรร private key ให้ subscriber และแต่ละ topic ควรใช้ key (password) ของใครของมันนะคะ เผื่อหากว่ามีการขโมย password ไป topic อื่นๆจะได้ไม่ถูก decrypt ได้ค่ะการใช้ Payload encryption สามารถมั่นใจได้ว่า message ถูก encrypt ตั้งแต่ผู้ส่ง ถึง ผู้รับค่ะ แม้จะผ่าน broker ระหว่างทาง ก็ไม่มีการ decrypt ใดๆเกิดขึ้น ช่วยเพิ่มความปลอดภัยอีกระดับนึงถ้าหาก topic นั้นๆมีการส่งข้อมูลที่ค่อนข้างเป็น confidental information ค่ะ แต่จะมีความยุ่งยากในการจัดการเรื่อง key ให้กับ subscriber ค่ะ และ วิธีการ encrtypion ก็ไม่สามารถป้องกัน man-in-the-middle attack หรือว่า replay attack ได้ค่ะPayload encryption จะช่วยแก้ปัญหาการถูกดัก message ได้ค่ะ (หากไม่มีการใช้ authentication ใดๆ) แต่จะเห็นว่ามีเฉพาะ payload เท่านั้นที่จะถูก encrypt นั่นหมายความว่า ข้อมูล meta สามารถถูกเห็น และ แก้ไขได้ (เช่น topic) ซึ่งเราสามารถใช้ TLS เข้ามาช่วยเพิ่มความปลอดภัยให้ข้อมูลของเราตรงนี้ได้ค่ะ ถึงแม้ว่า TLS และ Payload encryption ถูกนำมาใช้คนละ level แต่เราสามารถใช้ควบคู่ เพื่อเสริมพลังกันได้ค่ะPayload encryption เป็นตัวเลือกที่ดีค่ะ ถ้าเราไม่ต้องการส่งข้อมูลแบบ plain text (unencrypted data)และระบบของเรามีข้อจำกัด ไม่สามารถที่จะใช้ TLS ได้ (ไม่ว่าจะด้วยข้อจำกัดของ bandwidth ของระบบ network หรือว่าข้อจำกัดของอุปกรณ์เอง) แต่ถึงยังไง encryption/decryption ก็ยังต้องใช้ processing power อยู่ดีนะคะ ต้องลองพิจารณาค่ะ ว่าจะใช้ algorithm แบบไหนเพิ่มความปลอดภัยให้กับระบบของเรา แต่ก็ไม่ได้ทำให้ประสิทธิภาพ และความเร็ว ของระบบ IoT เราลดลงค่ะอ้างอิงจาก MQTT Security Fundamentals: MQTT Payload Encryption
โดย: Laris
| IoT
MQTT Security (2)
Authentication & AuthorizationAuthenticationAuthentication ถือว่าเป็นส่วนหนึ่งของ MQTT Security ทั้งใน Transport level และ Application level ค่ะ ใน TLS (Transport Layer Security) ใช้ client certificate ในการยืนตัวตนของ client ต่อ server ส่วนใน Application level นั้น MQTT protocol จะมี built-in authentication ซึ่ง ใช้ username/password ในการยืนยันตัวตนซึ่ง username/password จะอยู่ใน CONNECT message เป็น optional ค่ะ ไม่ใส่ก็ได้ (สามารถใส่แต่ username โดยไม่มี password ยังได้ค่ะ แต่ไม่สามารถใส่ password โดยไม่มี username นะคะ)CONNECT Messageusername/password ใน CONNECT message จะถูกตรวจสอบโดย broker และ ส่ง return code กลับไปให้กับ client ตามนี้ค่ะ0 — Connection Accepted4 — Connection Refused, bad user name or password5 — Connection Refused, not authorizedCONNACK Messageถ้าหากว่าเราจะใช้ MQTT built-in authentication เราอาจจะต้องใช้ TLS เข้ามาเพิ่มนะคะ เพราะว่า username/password ไม่ถูก encrypt ให้ อาจจะถูก eavesdropping ได้ง่ายๆค่ะนอกจาก username/password แล้ว client สามารถใช้ข้อมูลอื่นสำหรับ authentication ได้ด้วยนะคะ อย่างเช่น Client IdMQTT client แต่ละตัวจะมี client Id ที่ไม่ซ้ำกันอยู่แล้วนะคะ ส่วนใหญ่ก็จะใช้ UUID ค่ะ เป็นตัวกำหนด id ให้กับ client ซึ่งจะถูกกำหนดไว้ใน CONNECT message นี่แหละค่ะ อาจจะใช้ id ร่วมกับ username/password ในการ authentication ได้ หรือจะใช้เพียง id ตัวเดียวก็ได้ค่ะX.509 Certificateclient สามารถใช้ X.509 client certificate เพื่อ authenticate กับ broker ระหว่าง TLS handshake ได้ค่ะ ซึ่ง broker ก็จะใช้ข้อมูลใน client certificate นี้ใน application level authentication ค่ะAuthorization in MQTTหลังจากที่ MQTT client ทำการเชื่อมต่อกับ broker เรียบร้อยแล้ว จะมีอยู่ 2 สิ่ง ที่ client สามารถทำได้ค่ะ คือ publish message และ subscribe กับ topic ที่สนใจ ถึงตรงนี้ authorization จะเข้ามามีส่วนในการดูแล ว่า client ไหน สามารถ publish message ไปที่ topic ไหนได้บ้าง หรือ subscribe กับ topic ไหนได้บ้าง ซึ่งสามารถทำได้ โดย กำหนด topic permission ที่ broker ค่ะ และ จะ มีค่า config ดังนี้ค่ะAllowed topic (exact topic or wild card topic)Allowed operation (publish, subscribe, both)Allowed quality of service level (0, 1, 2, all)แล้ว client จะรู้ได้อย่างไร ว่าไม่มีสิทธิ์ที่จะ publish /subscribe กับ topic ไหน สำหรับ publisher หากว่าไม่มีสิทธิ์ ในการ publish นะคะ broker จะทำการ disconnect การเชื่อมต่อไปเลยค่ะ (ตามที่ MQTT 3.1.1 version กำหนดไว้นะคะ) และ ถ้าหาก subscriber ไม่มีสิทธิ์ที่จะ subscribe ใน topic ไหน broker จะแจ้งด้วย return code ค่ะใน Application level นี้นอกจากจะมีการ authentication แล้ว เรายังสามารถเพิ่มระดับความปลอดภัยเข้าไปได้อีกด้วย การ encryption ค่ะ ตามมาอ่านกันได้ ในบทความถัดไปค่ะอ้างอิงจาก MQTT Security Fundamentals: AuthorizationMQTT Security Fundamentals: Authentication with Username and Password
โดย: Laris
| IoT
MQTT Security (1)
Is MQTT Secure?IoT ที่มีการเชื่อมต่ออุปกรณ์ที่หลากหลายเข้าด้วยกัน เพื่ออำนวยความสะดวกสบายให้เรา ไม่ว่าจะใน รถยนต์ หรือ บ้านทั้งหลัง เพียงแค่มีอุปกรณ์ที่สามารถตรวจจับความเคลื่อนไหว และ ระบุตำแหน่ง เราสามารถรู้ได้ทันทีว่าสมาชิกในบ้านอยู่ที่ตำแหน่งไหนของบ้าน แต่ถ้าหากไม่ได้มีเพียงแค่เรา ที่สามารถเข้าถึงข้อมูลเหล่านี้ หากข้อมูลนี้สามารถเข้าถึงได้ง่ายๆ โดยผู้ประสงค์ร้าย ข้อมูลเหล่านี้ก็อาจจะย้อนกลับมาทำความเสียหายให้เราได้ค่ะ อาจจะเล็กน้อยเพียงแค่ทรัพย์สินในบ้าน หรืออาจจะร้ายแรงถึงชีวิตของคนในบ้านดังนั้นเราจำเป็นต้องให้ความสำคัญกับเรื่องความปลอดภัยของข้อมูลเหล่านี้ค่ะ บางคนอาจจะคิดว่าแค่โดน Hack พวกอุปกรณ์ไม่ได้ร้ายแรงอะไรมั้ง ก็แค่สั่ง ON/OFF ไม่ได้เข้าถึงข้อมูลส่วนตัว หรือ ข้อมูลทางการเงิน แต่ถ้าอุปกรณ์เชื่อมต่อเหล่านี้มีผลกับความปลอดภัยของเรา ยังไง๊ ยังไง มันก็ต้องมีผลกระทบค่ะ ไม่ทางใดก็ทางหนึ่งค่ะ…. กันไว้ดีกว่าแก้นะคะ Better safe than sorry ค่ะในบทความนี้ ก็ไม่พลาดที่จะต้องพูดถึง Security ใน MQTT ค่ะ สำหรับนักพัฒนาแบบเราๆแล้ว เรื่องนี้สำคัญมาก จำเป็นต้องทำความเข้าใจและนำมาพิจารณา ตั้งแต่เริ่มดีไซน์ระบบ IoT กันเลยทีเดียวค่ะ มองข้ามไม่ได้นะคะ….. ซึ่งสามารถทำได้ตั้งแต่ protocol level ไปถึง application levelเดิมที MQTT ถูกออกแบบเพื่อให้ใช้งานง่าย และ lightweight เพื่อให้มีความเหมาะสมกับ IoT ดังนั้นตัว protocol จึงไม่ได้มีระบบ security ที่ดีนัก ก็จะใช้วิธีพึ่งพา security standards อื่นๆ เช่น ใช้ SSL/TLS ในการเพิ่มความปลอดภัยให้กับการเชื่อมต่อ ของ MQTT ค่ะ Security ใน MQTT จึงถูกแบ่งออกเป็นหลาย Layer ค่ะ ทั้งนี้ก็เพื่อเพิ่มความปลอดภัยจากผู้ประสงค์ร้ายที่มีมาหลากหลายรูปแบบ ได้มากขึ้น ซึ่งก็จะแบ่งตามนี้ค่ะ Network levelวิธีที่จะเพิ่มความปลอดภัยให้การเชื่อมต่อระหว่าง client และ broker ก็คือใช้ network ที่มีความปลอดภัยสูง หรือ VPN ค่ะ ซึ่งมีความเหมาะสมกับระบบที่ใช้ gateway โดยที่ gateway ฝั่งหนึ่งเชื่อมต่อกับเหล่าอุปกรณ์ และ อีกฝั่งนึงเชื่อมกับ broker ผ่าน VPN ค่ะTransport levelMQTT ใช้ Transport layer ใน TCP/IP ในการรับส่งข้อมูล ซึ่งปกติแล้วการเชื่อมต่อของ TCP จะไม่ใช่แบบที่มีการ encryption ใดๆค่ะ ดังนั้นถ้าอยากเพิ่มความปลอดภัย ให้กับการเชื่อมต่อ (encrypted communication) การใช้ TLS หรือ Transport Layer Security เป็นวิธีที่ค่อนข้างมั่นใจได้ว่าข้อมูล จะไม่ถูกอ่าน หรือ ถูกแก้ไข ระหว่างทางค่ะTLS เป็น cryptographic protocol ที่ใช้วิธี handshake ก่อนทำการเชื่อมต่อระหว่าง client และ broker ค่ะ ซึ่งการเชื่อมต่อแบบนี้สามารถรับประกันได้ว่าจะไม่มีการ eavesdropping เกิดขึ้น ใช้ x.509 certicate สำหรับยืนยันตัวตน ระหว่าง client กับ broker ข้อดีของการใช้ทั้ง server certicate และ client certificate ก็คือ สามารถทำ authentication ได้ในขั้นตอน handshake เลย ถ้า authenticate ไม่ผ่าน ก็ไม่จำเป็นต้องมีการเชื่อมต่อเกิดขึ้น (ไม่ต้องส่ง MQTT CONNECT message มาให้ broker ) เพื่อเป็นการลดภาระให้กับ broker อีกทางนึงค่ะ เพราะ broker ไม่ต้องทำการ authenticate ไม่ต้องไปเปิดหาใน database ว่ามี client นี้อยู่มั้ยแต่ทว่าการใช้ TLS ใน MQTT ต้องใช้ CPU ของอุปกรณ์ และ bandwidth ของ network ซึ่งก็ถือว่าเป็นข้อเสียนึงของ TLS เลยก็ว่าได้ ถ้าเกิดว่า อุปกรณ์ หรือ network ของเรามีข้อจำกัดในการใช้งาน ซึ่งอาจจะหันไปใช้วิธี authentication แทนได้ค่ะ (สามารถอ่านเนื้อหาเพิ่มเติมเกี่ยวกับ authentication ในบทความถัดไปค่ะ)Application LevelMQTT มี built-in authentication ที่ใช้ username/password สำหรับ authenticate อุปกรณ์ต่างๆ ส่วนเรื่องของ authorization จะถูกกำหนดขึ้นโดยเฉพาะ โดย broker ค่ะ นอกจากนี้ยังมี payload encryption เข้ามาช่วย หากว่าเราไม่สามารถใช้ TLS ใน Trasport level ได้ (สามารถอ่านเนื้อหาเพิ่มเติมเกี่ยวกับ payload encryption ในบทความถัดไปค่ะ)นอกจากการ secure ให้กับตัว protocol แล้ว ควรให้ความสำคัญ​กับ MQTT system ด้วยค่ะ ซึ่งก็รวมไปถึง infrastructure, OS, และ MQTT broker ค่ะในส่วนของ infrastructure ระบบ network ถือว่ามีความสำคัญกับเรื่อง security อย่างมาก การกำหนด rules บน. firewall มีส่วนช่วยอย่างมาก ในการเพิ่มความปลอดภัย เราสามารถกำหนดให้ firewall จำกัดการใช้แค่ port ที่จำเป็นสำหรับ MQTT เช่น 1883 (MQTT over TCP) และ 8883 (Secure MQTT) หรือ block ข้อมูลที่เป็น UDP datagram packet ออกให้หมด ( MQTT ใช้ TCP ) หรือหากเป็นไปได้ ถ้าเรารู้ IP ของ client ทุกตัว เราก็สามารถ กำหนด IP range ที่สามารถผ่าน firewall ได้ เพื่อเพิ่มความปลอดภัยให้กับ networkอ้างอิง: Introducing the MQTT Security Fundamentals
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (7)
Simple Scanner Monitor by IFTTT x Line Notifyจากหลายๆบทความก่อนหน้านี้ในซีรีย์ของ “สิ่งเล็กๆที่เรียกว่า Beacon” เราได้ทำการติดตั้ง Scanner และ Server สำหรับระบบ Tracking ของเราเรียบร้อยแล้วนะคะ ผ่านขั้นตอนติดตั้งแล้ว เริ่มใช้งานและเก็บข้อมูลแล้ว ก็มาถึงขั้นตอนดูแลระบบให้เก็บข้อมูลอย่างต่อเนื่องไม่ขาดหาย หรือ ให้สูญหายน้อยที่สุดค่ะ… ยุคนี้ข้อมูลมีค่าค่ะ สิ่งที่ต้องใส่ใจให้ความสำคัญเลยก็ตัว scanner นี่แหละค่ะ ถ้า offline ไป ข้อมูลหายทันทีค่ะ ถ้าหากเราต้องการเก็บข้อมูลไว้เชิงสถิติแล้วเนี่ย ข้อมูลพลาดหายไปเพียงวันเดียว อาจจะมีผลคลาดเคลื่อนต่อการวิเคราะห์ได้ค่ะด้วยเหตุนี้…..เราจะใช้ Line Notify ช่วยส่งข้อความแจ้งเตือนผ่านทาง Line เมื่อมี Scanner เกิด offline ไม่ว่าจะด้วยปัญหาทาง Network หรือ Hardware หรือ อะไรก็ตามนะคะ เราจะทราบได้ทันที และแก้ไขปัญหาได้เร็วขึ้น นั่นก็หมายความว่า จะช่วยลดจำนวนข้อมูลที่อาจจะสูญหายไปได้ค่ะสิ่งที่ต้องทำในบทความนี้นะคะ ….เพิ่ม Line Notify เป็นเพื่อนใน Lineเพิ่ม Applet สำหรับเชื่อม Webhooks และ Line ที่ IFTTTcode เชื่อมต่อ NETPIE สำหรับ monitor ค่ะ 1. เริ่มจากการเพิ่ม Line Notify เป็นเพื่อนใน Line กันก่อนนะคะหากเลือกที่จะรับข้อความ แบบ 1-on-1 chat with Line Notify สามารถข้ามไป ข้อ 2. ได้เลยค่ะ หรือหากอยากจะสร้างกลุ่มขึ้นมาแล้วเพิ่ม Line Notify เข้าไปในกลุ่ม ก็ไม่ผิดกติกานะคะ แต่แนะนำแบบหลังนะคะ เผื่อใช้งาน Line Notify หลาย services เดี๋ยวเราจะ งง… ได้ค่ะ ว่าได้รับ Notification มาจาก service ไหนกันแน่หมายเหตุ : อ่านรายละเอียดเพิ่มเติม Line Notify2. Sign up กับ IFTTT กันก่อนนะคะ ถ้าใครยังไม่มี account3. Connnect กับ Line ค่ะ IFTTTConnect LINE to and more.ifttt.com4. เพิ่ม Applet ค่ะ My Applets > New Appletเพิ่ม this เป็น Webhooks และ ตั้งชื่อ Event Name สำหรับ Trigger ค่ะจากนั้นก็เพิ่ม that ด้วย Line และเลือก Action เป็น Send message ตั้งค่า สำหรับ Action ค่ะAction — Send message Recipient สามารถเลือกเปน 1-on-1 หรือว่า กลุ่มที่เราสร้างไว้จาก ข้อ 1. ค่ะMessage เก็บค่า Default ไว้ก่อนค่ะ ยังไม่ต้องเปลี่ยนอะไร5. code สำหรับเอาไว้ monitor ค่ะในบทความนี้เราจะใช้ Microgear-python ซึ่งเป็น libray สำหรับ pythonในการส่งข้อมูลไปที่ NETPIE ค่ะnetpieio/microgear-pythonNETPIE client library for Python. Contribute to netpieio/microgear-python development by creating an account on GitHub.github.comซึ่งจะมี code example ไว้ให้ลองเทสกันค่ะก่อนจะเริ่มโค้ดสำหรับ monitor ….. ไปเพิ่ม Application key สำหรับ ตัว MonitorApp ที่ NETPIE ก่อนนะคะ เพราะเราจะ monitor จากการ publish ของ scanner ค่ะ เราก็ต้องไป subscribe topic เดียวกับที่ scanner ได้ publish ไว้ค่ะIFTTT Webhooks API Key จาก ifttt.com/maker_webhooks และ คลิกที่ Documentationได้ appid, gearkey, gearsecret, IFTT Webhooks API Key นำมาใส่ในโค้ดข้างล่างได้เลยค่ะ monitor.py….จากนั้นลองรันโค้ดได้เลยค่ะ หมายเหตุ ต้องใช้ python 2.7.xละคอยรอรับ notification ในไลน์ได้เลยค่ะ อาจจะต้องปิดตัว scanner ไปบางตัวเพื่อลองเทสดูนะคะแค่นี้ก็ไม่ต้องห่วงแล้วค่ะ ว่าจะพลาดการเก็บข้อมูลอันสำคัญของเรา มี notification แจ้งเตือนมาเมื่อไหร่ สามารถไปตรวจเชค scanner ได้ทันทีเลยค่ะ
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (6)
Asset/People Tracking using BLE Beacons — Server SetupAsset/People Tracking using BLE Beaconsจากบทความที่แล้ว….. เสร็จเรียบร้อยกันไปแล้วนะคะในส่วน ของ Scanner ซึ่งสามารถมีได้มากกว่าหนึ่งตัวนะคะ จากในรูปจะเห็นว่ามี Scanner อยู่ 3 ตัว และจะเห็นว่ามีส่วนที่ overlap กันอยู่ ซึ่งถ้าหาก มี beacon อยู่ในพื้นที่ overlap ตรงนี้ เราจะมีวิธีแยกได้ยังงัยว่า beacon อยู่ใกล้ Scanner ตัวไหนมากที่สุด เราจะใช้วิธีคำนวณจาก RSSI distance = 10 ^ ((Measured Power - RSSI) / 10 * 2)ซึ่งอ้างอิงจากบทความนี้ค่ะHow to Calculate Distance from the RSSI value of the BLE BeaconI am sure many people are working on the BLE technology and even on the projects like Indoor Location Positioning…iotandelectronics.wordpress.comในบทความนี้เราจะ setup ส่วนของ Server เพื่อเก็บข้อมูล เข้า Database — sqlite แล้วทำการคำนวณให้เราค่ะ รวมไปถึงการทำหน้า Report ส่งที่ต้องเตรียมนะคะ…….. 1. Code ค่ะ2. Application Key สำหรับ Server จาก netpie ค่ะ3. Server สำหรับ run Code (จากข้อ 1.)1. Codeตามไป clone ได้จากที่นี่เลยค่ะes08/serverContribute to es08/server development by creating an account on GitHub.github.com2. Application Key สำหรับ Serverเราจะทำการสร้าง Application Key ใหม่ สำหรับ Server เราค่ะ เราเคยทำกันไปแล้วนะคะ สำหรับการสร้าง Application Key สำหรับ Scanner ของเรา จากบทความ สิ่งเล็กๆที่เรียกว่า Beacon (4) สามารถย้อนกลับไปดูวิธีทำได้จากบทความนี้เลยค่ะเมื่อได้ clientId, username, password จาก netpie-auth มาแล้ว นำมาใส่ที่ config > local.json ได้เลยค่ะ"mqtt":{"url": "mqtt://gb.netpie.io","username": "<your username>","password": "<your username>","clientId": "<your clientId>"}จากนั้นทำการ run ไฟล์ server.js ได้เลยค่ะซึ่งเมื่อทำการเชื่อมต่อ (connected)กับ mqtt server เรียบร้อยแล้ว จะเห็น ข้อความแบบนี้ค่ะconnectedsubscribe to topic /Beacon/gearname/scaner/beacon/exitsubscribe to topic /Beacon/gearname/scaner/beacon/updateนั่นหมายความว่า ตัว server เราทำการ subscribe กับ topic ที่ชื่อว่า/Beacon/gearname/scaner/beacon/exit/Beacon/gearname/scaner/beacon/updateซึ่งจะเป็น topic ที่ตรงกับที่ scanner ได้ publish ไว้นะคะและถ้าสังเกตุ log ไปเรื่อยๆนะค่ะ จะเห็นว่า เริ่มมีการบันทึกข้อมูลของ beacon ที่เจอลง beacon.db ซึ่งเป็น sqlite แล้วค่ะtopic /Beacon/gearname/scaner/beacon/update----------------Location: Node AUUID: 60106EC7-790F-4D9B-9E86-468D2950D9D5Distance: 0.0042805510914958045Last Find Date: 2019-05-17T09:33:56.331Z----------------AddNewBeacon 0cf3eeb80576UpdateDistanceBeaconTotal beacon(s) found from all scanners = 1--------------------Send data to databasebeacon 0cf3eeb80576 Node AOpen databaseSave to sqlite3ข้อมูลทุกอย่างพร้อมแล้ว ทีนี้มาดู หน้าเวป summary ของเรากันค่ะ ด้วยการ run ไฟล์ summary.js ได้เลยค่ะจากรูป จะเป็นการโชว์ว่า beacon ที่ scanner A เจอ ในแต่ละช่วงเวลามีกี่ตัวนะคะ ในตัวอย่าง จะเจอ 1 ตัว ที่เวลา 16:00–17:00 ค่ะถ้าคลิกไปที่ตัวเลข (1) จะเปิด modal เพื่อโชว์ว่ามี beacon ที่เจอคือid ไหน และมีจำนวนที่เจอกี่ครั้ง ในช่วงเวลานั้นๆค่ะ ซึ่ง id ของ beacon สามารถเข้าไปเปลี่ยนได้ที่ beacon_list.json คะจากรูป จะบอกว่า beacon ที่เจอ มี id คือ 0cf3eeb80576 และมี name ว่า E (ตรงนี้สามารถเปลี่ยนเป็นชื่อคน หรือ สิ่อของที่เราต้องการ track ได้นะคะที่ beacon-list.json ค่ะ) และ เจอโดย scanner A ในช่วงเวลา 16:00–17:00 จำนวน 15 ครั้งค่ะข้อมูลที่เรามีตรงนี้สามารถนำไปทำ visualiazation เช่น graph ได้นะคะ ซึ่งสามาถนำมาเป็นข้อมูลเชิงสถิติ มีประโยชน์มากเลยทีเดียวค่ะ …จากการใช้งานจริงๆของผู้เขียน พบปัญหาบ่อยครั้งว่า ข้อมูลขาดหายไปค่ะ ซึ่งค่อนข้างจะเป็นปัญหาสำหรับผู้เขียนในการเก็บข้อมูล หากจะต้องคอยมาเชคข้อมูลผ่าน balena cloud dashboad ตลอดเวลาก็ไม่ค่อยจะสะดวกค่ะ ผู้เขียนจึงได้ทำตัว monitor ขึ้นมาค่ะ โดยใช้ตัวช่วยอย่าง IFTTT และ Line Nofity ค่ะ ซึ่งง่าย ไม่ซับซ้อน แต่ใช้งานได้ดี เหมาะกับงาน monitor ดีทีเดียวค่ะ ติดตามอ่านวิธีทำในบทความต่อไปนะคะ สวัสดีค่ะ…
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (5)
Asset/People Tracking using BLE Beacons — Scanner Setup IIIมาถึงขั้นตอนสุดท้ายของการ Setup Scanner กันแล้วค่า หลังจากที่เราได้ทำไปแล้ว 5 ขั้นตอน :1. Sign up and login2. Create an application3. Add a device and download the OS4. Flash your SD card and boot the device5. Add application environment variablesถึงตรงนี้ เราได้ทำการเชื่อมต่อ RPi เข้ากับ balena แล้วนะคะขั้นตอนสุดท้าย เราจะ Deploy Code ค่ะ…เริ่มต้นด้วยการเตรียม code สำหรับ Scanner รอไว้ก่อนเลยค่ะes08/scannerContribute to es08/scanner development by creating an account on GitHub.github.comซึ่งก็จะมีไฟล์ตามนี้นะคะScanner Folderจากนั้นไปเพิ่ม SSH Key ของเราบน balena ก่อนค่ะ เพราะเราจะ push code ของเรา ผ่าน git ค่ะ อ่านรายละเอียดเพิ่มเติมวิธีเพิ่ม SSH Key ได้ที่นี่ค่ะ Generating a new SSH key and adding it to the ssh-agent - GitHub HelpBefore adding a new SSH key to the ssh-agent to manage your keys, you should have When adding your SSH key to the…help.github.comได้ SSH Key มาแล้วก็นำไปใส่ไว้ที่นี่ค่ะ Preference > SSH Keysbalena — Adding an SSH Keyเพิ่ม key กันเสร็จเรียบร้อย กลับมาหน้า Application ของเรากันก่อนค่ะApplication — Scannerลองสังเกตุตามรูปนะคะ ตรงมุมขวาบน ถ้าคลิก (?) จะเห็นรายละเอียดเกี่ยวกับการ push code คล้ายๆรูปข้างล่างนี้ค่ะ ซึ่งจะบอกend point ของ repository ของ Application เราค่ะ เริ่ม add remote และ push code ได้เลยค่ะ $ git remote add balena <USERNAME>@git.balena-cloud.com:<USERNAME>/<APPNAME>.git$ git push balena masterจะสังเกตุเห็น Unicorn นะคะ ถ้า code ถูก complie / build เสร็จ แล้วค่ะbalenaกลับมาที่ balena cloud dashboad ค่า…..ลองคลิกดูที่ พาย (Device)ของเรานะคะ จะเห็นว่า Status เค้าเริ่มมีการ Update ค่ะ หลังจากเรา push code ไปเสร็จเรียบร้อย รอจนครบ 100%ตอนนี้ Scanner ของเราพร้อมใช้งานแล้วค่ะ หยิบ beacon ของเรา (ในบทความนี้เราใช้ ibeacon นะคะ) มาเช็คกันเลยค่ะเปิด Log ขึ้นมา (สามารถเปิดได้จากบน balena cloud dashboard ได้เลยนะคะ) ขยายให้เห็นเต็มๆจอ) จะเห็นว่าน้องพายเรา เจอ beacon แล้วค่ะ Scanner Logเสร็จกันไปแล้ว ในส่วน ของ Scanner ค่ะ ในการใช้งานจริงๆ beacon ตัวนึงเนี่ย สามารถถูกแสกนเจอโดย Scanner หลายๆตัวในพื้นที่ใกล้เคียงกันได้ค่ะ ละเราจะมีวิธีรู้ได้ยังไงว่า beacon ตัวนี้ใกล้ Scanner ตัวไหนหรืออยู่ใน area ไหนกันแน่ เรามีวิธีคำนวณ พร้อมทำ Server ไว้เก็บข้อมูล และทำหน้าReport ให้เราค่ะ… มาติดตามวิธีทำ Server กันต่อใน สิ่งเล็กๆที่เรียกว่า Beacon ตอนต่อไปค่ะ….

พบบทสัมภาษณ์ได้ที่นี่เร็ว ๆ นี้

พบDigital Skill บนสื่อ ได้ที่นี่เร็ว ๆ นี้