มาเล่น Telegraf กับ MQTT Broker กัน

Telegraf มี plugin ให้ใช้งานได้หลายรูปแบบทั้ง input, output, process และ service ขึ้นอยู่กับเราต้องการใช้งานแบบไหน ครั้งนี้เราจะใช้ MQTT Consumer สำหรับเชื่อมต่อไปยัง MQTT Broker เพื่อ Subscribe ใน Topic ที่เราต้องการเอาข้อมูลมาใช้ แล้วให้ Telegraf ส่งข้อมูลไปเก็บใน InfluxDB และใช้ Grafana ในการแสดงผลต่อไป

มาสร้าง config กันก่อน ใช้ docker เหมือนเดิมดังนี้

docker run --rm telegraf --input-filter mqtt_consumer --output-filter influxdb config > mqtt-telegraf.conf

แก้ไข MQTT Broker, Topic, InfluxDB Database, Data Type

Continue reading

มาเล่น High Availability MQTT Cluster ด้วย Docker Compose กัน

ครั้งที่แล้วแนะนำ High Availability MQTT Cluster แบบ Back to Basic ไว้เนื่องจากจะได้เข้าใจว่าหลักการเป็นอย่างไร ได้ลองติดตั้ง Ponte ตั้งค่า HA Proxy ฯลฯ ครั้งนี้เราจะใช้ Docker Compose ในการสร้าง Container ในส่วน MQTT Broker, HAProxy และ MongoDB สั่งงานครั้งเดียวจบ ตัวอย่างนี้เหมาะสำหรับศึกษาเท่านั้น หากต้องการเอาไปใช้งานควรแยก data volume ของ mongodb ออกมาด้วยครับ

จากภาพเดิมเราจะใช้ Docker Compose สร้าง Container ทั้งหมดขึ้นมาซึ่งประกอบไปด้วย

  • HA Proxy
  • MQTT Broker 1
  • MQTT Broker 2
  • MongoDB

Continue reading

มาเล่น Auto Scaling MQTT Cluster บน AWS Cloud

ครั้งที่แล้วพาเล่น MQTT Cluster กันไปบ้างแล้ว ครั้งนี้เรามาลองวิธีง่ายๆ โดยใช้บริการของ AWS กันบ้าง AWS เครื่องมือพร้อมสำหรับการทำ Load Balance และการทำ Auto Scaling มาให้ด้วย เพราะฉนั้นการทำ Horizontal Scaling จะทำได้ง่ายมากๆ เพียงแค่คลิกเท่านั้นเอง จากภาพเดิมเราจะ Scale MQTT Broker โดยใช้ Elastic Scaling ของ AWS กัน

เนื้อหาไม่รวม Authentication, Secure Connection สำหรับ Persistance Storage คุณอาจเลือกใช้ DynamoDB หรือ RDS ได้ หากต้องการใช้ MongoDB Cluster อ่าน Reference Guide เพิ่มเติมได้ที่ MongoDB บน AWS Cloud

ขั้นตอนมีดังนี้

  • สร้าง instance พร้อม private network 2 เครื่อง
  • ติดตั้ง MongoDB ไปยังเครื่องที่ 1 เพื่อใช้เป็น Persistent Storage
  • ติดตั้ง Ponte ไปยังเครื่องที่ 2 ตั้งค่าเก็บข้อมูลมายังเครื่องที่ 1
  • สร้าง Snapshot ของเครื่องที่ 2
  • สร้าง Scaling Groups กำหนดขนาดของและเงื่อนไขในการ Scale
  • สร้าง Load Balancer และเพิ่ม instance ที่ Scaling Groups สร้างมาให้
  • กำหนด Load Balancer ให้ Scaling Groups ใช้เป็น Elastic Scaling

Continue reading

มาลองเล่น High Availability MQTT Cluster กัน

เนื่องจากจำไม่ได้ว่าใครถามเรื่อง High Availability MQTT Cluster แต่ที่จำได้ผมบอกไปว่า Mosca + Haproxy น่าจะจบก็ไม่ได้ทำอะไรต่อเพราะน่าจะเข้าใจแล้ว แต่ก็คิดไปคิดมาก็เลยลองดูสักหน่อยว่าใช้ได้หรือเปล่า T_T จาก Blog ของ Lelylan อธิบายเรื่อง High Availability MQTT Cluster ไว้ได้ดีในเรื่องของการประยุกต์ใช้ Docker และ MQTT Broker ซึ่งถือว่าเป็น Micro Service ถ้าสนใจก็ลองไปอ่านได้ครับ

กลับมา Back to Basic เราจะไม่ใช้ Docker เพื่อให้เกิดความเข้าใจเรื่อง HA กับ MQTT Broker ในเบื้องต้นก่อนครั้งหน้า (ถ้าไม่ลืม) เราจะมาเล่น Docker Machine + Swarm + Compose ทำ High Availability MQTT Cluster กันอีกรอบ
Continue reading

มาเล่น CloudMQTT กัน

CloudMQTT เป็นบริการ MQTT Service บน Cloud Service อีกทีซึ่งใช้ AWS เป็น infra ข้างหลังบ้าน คุณสามารถเลือก plan การใช้งานได้ ซึ่งจะแบ่งตามคุณสมบัติต่างๆ เช่น จำนวน connection แบนด์วิทในการส่งข้อมูลเป็นต้น CloudMQTT แตกต่างจาก IoT Platform ตัวอื่นอีกอย่างก็คือ ผู้ใช้จะต้องกำหนด Plan ที่ต้องการใช้จากนั้น ระบบจะไปสร้าง EC2 Instance พร้อม MQTT Service ซึ่งแยกตามผู้ใช้อย่างชัดเจน สำหรับ Free Plan คงใช้งาน Instance ร่วมกัน

Continue reading

มาเล่น Mosca กัน

Mosca เป็น MQTT Broker ที่พัฒนาโดยใช้ Node.js และเก็บข้อมูลบน LevelDB ทำให้ Mosca สามารถทำความเร็วในการอ่านและเขียนข้อมูลได้อย่างรวดเร็ว นอกจากนี้ยังสามารถเชื่อมต่อกับ ฐานข้อมูลอื่นเพื่อเก็บข้อมูลแบบ persistance ได้อีกด้วย การใช้งาน Mosca สามารถใช้งานผ่าน CLI และผ่าน Node.js App ได้อีกด้วย

มาลองเล่น Mosca กัน ก่อนอื่นติดตั้ง Mosca ผ่าน npm กันก่อนดังนี้

npm install -g mosca bunyan

เมื่อติดตั้งเสร็จ ก็สามารถใช้งานได้เลยดังนี้

mosca --db ./db -v | bunyan

Mosca จะบอกเราว่า MQTT Broker ทำงานอยู่บน port 1883 ให้ลองทดสอบจาก MQTT Spy ดู Continue reading

มาเล่น Ponte กัน

Ponte เป็นโครงการที่พัฒนาเพิ่มเติมจาก Mosca โดยเน้นให้นักพัฒนาสามารถเชื่อมต่อได้ง่ายผ่าน Protocal ที่ใช้งานได้หลากหลายมากขึ้น เช่น MQTT, CoAP และ REST ซึ่งคุณสามารถเลือกใช้งานได้อย่างอิสระ นอกจากนี้ยังสามารถเชื่อมต่อกับ Persistance storage อย่าง MongoDB, Redis, LevelDB หรือเชื่อมต่อกับ Pub/Sub อย่าง RabbitMQ, MongoDB, MQTT, Redis ได้อีกด้วย Ponte เป็นโครงการภายใต้การดูแลของ Eclipse ครับ

มาลองกันเลยดีกว่า สั่งติดตั้ง Ponte ง่ายๆ ดังนี้

npm install -g ponte bunyan

จากนั้นก็เริ่ม service ได้เลยทันทีดังนี้

ponte -v | bunyan

Continue reading

มาเล่น Ubuntu Core บน Google Compute Engine กัน

มาเล่น Ubuntu Core บน Google Compute Engine กันบ้าง ตามที่ Canonical ประกาศว่า Ubuntu Core ทำงานบน Cloud ได้ บน IoT Devices ก็ได้ แต่ Snappy เหมือนจะไม่มีอะไรให้เล่นเลย ครั้งนี้มาลองใช้งาน Ubuntu Core บน Google Compute Engine และติดตั้ง MQTT Broker เพื่อรองรับงาน Internet of Thing กันดูบ้าง จะได้รู้กันไปเลยว่า Ubuntu Core ทำได้ ตัวอย่างอาจจะแปลกไปสักหน่อย ครั้งหน้าจะแนะนำบน Raspberry Pi 2 B+ ก็แล้วกันครับ ครั้งนี้มาลองเล่นบน GCE กันก่อน สร้าง project บน Google Developer Console ให้เรียบร้อย

สำหรับท่านที่ยังไม่มี command line tools แนะนำให้ติดตั้งให้เรียบร้อย สำหรับ Ubuntu 14.04 ติดตั้งตามนี้ได้เลย

Continue reading

ติดตั้งและใช้งาน MQTT Broker กัน

MQTT (Message Queue Telemetry Transport) เป็นโปรโตคอลสำหรับ Internet of Things โปรโตคอลนี้ใช้วิธีการเหมือนกับ Message Queue ปกติแต่พัฒนาให้รองรับงานด้าน Internet of Things นอกจากจะรอรับและอ่านค่าแล้ว ยังสามารถสั่งงานอุปกรณ์ที่ใช้ MQTT ได้ด้วย การใช้งานโปรโตคอลนี้ต้องจะต้องมีอุปกรณ์ที่ฝัง MQTT Broker มาเพื่อทำหน้าที่รับส่งข้อมูลไปยังอุปกรณ์อื่นที่ใช้ MQTT เหมือนกัน เนื่องจากไม่มีอุปกรณ์ที่เล่นกับ MQTT ได้ก็ต้องจำลองกันสักหน่อย

MQTT Broker มีหลายค่ายให้ใช้งาน เราเลือกใช้ของง่ายๆ กันก่อน คือ Mosquitto เจ้ายุงนี้เป็น OpenSource MQTT Broker สนับสนุน MQTT Broker v3.1/3.1.1 วิธีการติดตั้งก็ง่ายมาก ติดตั้งผ่าน PPA ได้เลยดังนี้

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa

sudo apt-get update

sudo apt-get install mosquitto python-software-properties

เท่านี้ก็ใช้งานได้แล้ว อ้อเกือบลืม mosquitto ทำงานบน port 1883 ครับ ได้ Broker แล้วจะทดลองเล่นยังไง มี 2 ทางเลือกคือ ใช้ MQTT Client หรือเขียนโปรแกรมเชื่อมต่อ ทางเลือกที่ดีที่สุดคือใช้ Client ครับ :) ผมเลือก Client ที่คิดว่าน่าจะใช้ง่ายที่สุดคือ MQTT Spy ครับ ดาวน์โหลดมาแล้วเรียกใช้งาน เราจะได้หน้าตาแบบนี้ Continue reading