2019年7月26日星期五

IoT 第一步!Wifi 開關電燈,理論及實踐,為何選用 MQTT ( 二 )

【上一回】IoT 第一步!Wifi 開關電燈,天馬行空的吹水時間 ( 一 )

MQTT 特色︰



MQTT 全名是 Message Queuing Telemetry Transport,歷史及誕生,上網隨便搜都一大把資料,這裡就不說了,重點在於它用甚麼機制解決甚麼問題。

  1. Publish Subscribe Pattern

  2. 由發布者 ( publisher )、代理人 ( broker ) 及訂閱者 ( subscriber )三部份組成,這樣的結構可以伸延出各種玩法,例如 broker 可限制各種 publisher 資源存取,管理服務品質等等。

  3. 輕量、可靠的二進制通訊協定

  4. MQTT 格式主要分為標頭、主題及訊息,標頭是一些定義訊息,例如怎樣的傳輸品質,有無 username、password 之類,主題設定給 subscriber 訂閱用,訊息又可稱為 payload,可以看成 binary,所以它是甚麼都可以,定義為 XML、JSON、字串等等。

    XML 分支當中有個 SOAP,可以用 BASE64 編碼,把 Binary data 寫進去,例如圖片、音樂,不過在 MQTT 「輕量」的限制下,不能寫太多資料進去,詳細限制,請參考下面連結。

  1. 主題階層式訂閱

  2. 如果要訂閱多個主題,而那些主題又是同一組別,要把多個主題逐個訂閱嗎?可以用 wildcard 方法,一次訂閱,如果主題定義得好,還可以跟據主題,做點有趣的事,這部份去到寫程式碼 callback 部份才說。

很虛無縹緲……再看下去,下面有更多使用 MQTT 好處及想像,基於以上三點才能實現。


MQTT 教學(一):認識MQTT
https://swf.com.tw/?p=1002

MQTT 簡介
https://www.ibm.com/support/knowledgecenter/zh-tw/SSFKSJ_7.5.0/com.ibm.mm.tc.doc/tc00000_.htm

Introduction to MQTT Security Mechanisms
http://www.steves-internet-guide.com/mqtt-security-mechanisms/

當 ESP8266 遇上中華電信 IoT 智慧聯網大平台 { 入門 - 04 } - 了解 MQTT 協議,學習如何發佈 MQTT 消息
http://ruten-proteus.blogspot.com/2018/09/esp8266AT-meets-CHT-IoT-SP-introduction-04.html

———————————簡易的分隔線————————————

為何選用 MQTT︰



回顧之前目標,想用手機控制開關燈,需要找出連接它們的方法︰

  1. 在手機上操控,第一時間想到 Apps,然後是網頁瀏覽器,剛好有支援 MQTT 的 Apps 能用,不用自己動手寫,降低技術難度。

  2. AC 燈那邊控制器 ( MCU ),由於 Raspberry Pi 塞不入 86 型暗盒,由 Linkit 7697 頂上,剛好它支援 Arduino IDE,可用 PubSubClient 第三方程式庫實現 MQTT。

  3. 由於 MQTT 是 publish subscribe 模式運作,需要一個伺服器角色,Raspberry Pi 可以裝 Mosquitto 做 MQTT Broker,解決手機與控制器 ( MCU ) 連接問題。

理論上可行,實際動手做又怎樣?已經動手塞過 Raspberry Pi 及找過資料才有第二點出現。一邊計算尺寸,設想用怎樣的技術,用甚麼物料堆砌才能實現,不斷反覆這個過桯,得出以上三點行動方向。

LinkIt 7697 for Arduino 環境設定
https://docs.labs.mediatek.com/resource/linkit7697-arduino/zh_tw/environment-setup

樹莓派安裝 Mosquitto 輕量級 MQTT Broker 教學,連接各種物聯網設備
https://blog.gtwang.org/iot/raspberry-pi/raspberry-pi-mosquitto-mqtt-broker-iot-integration/

———————————簡易的分隔線————————————

選用 MQTT 有更多好處︰


以上目標完滿達到,不過知道 MQTT 及其他支援産品後,可以想像出更多項目,起碼理論上可行,並不是純粹幻想。

有更多 MQTT broker 選擇︰



Brokers
https://github.com/mqtt/mqtt.github.io/wiki/brokers

Amazon MQ
https://aws.amazon.com/tw/amazon-mq/

Cloud IoT Core
https://cloud.google.com/iot/docs/concepts/overview#components

如何透過 QIoT Suite Lite 連接 LinkIt 7697 與 QNAP NAS。
https://www.qnap.com/zh-tw/how-to/tutorial/article/%E5%A6%82%E4%BD%95%E9%80%8F%E9%81%8E-qiot-suite-lite-%E9%80%A3%E6%8E%A5-linkit-7697-%E8%88%87-qnap-nas/

不會寫程式?沒關係,用視覺化開發工具︰



【IOT視覺化開發工具】快速上手 Node-RED
https://makerpro.cc/2017/04/use-node-red-for-iot-development/

Node-RED Cookbook
https://cookbook.nodered.org/#mqtt

Node-RED 支援 MQTT 視覺化
https://oranwind.org/-aws-she-ding-node-red-lai-shi-jue-hua-xian-shi-gan-ce-zi-liao-jiao-xue/

手機 Apps 不會寫?用現成 Android Apps,IOS 應該都有︰



Android Apps Store
https://play.google.com/store/search?q=MQTT&c=apps

有方法簡易實現目標,亦有進階方法做複雜項目,給開發者更多發𡱒空間︰


open-source client implementations of MQTT and MQTT-SN messaging protocols
https://www.eclipse.org/paho/

在 Android 上開始使用適用於 Java 的 MQTT 用戶端
https://www.ibm.com/support/knowledgecenter/zh-tw/SSFKSJ_7.5.0/com.ibm.mm.tc.doc/tc10130_.htm

———————————簡易的分隔線————————————

基於 MQTT 技術聯想日常生活︰


例如有一個大藥倉,温度會影響藥品儲存,假設有十個支援 MQTT 的温度計,一個 Dashboard 看所有温度變化,假如知道「主題階層式訂閱」特色,應該在增加温度計數量同時,Dashboard 也會自動增加温度計顯示,而不用改動系統……

又例如回家開冷氣,要以人手開冷氣,因為温度不會一秒由 30 度跌到 25 度,需要時間冷卻,假如用 Google Map 知道 GPS 位置,計算回到家中的時間,再由 Cloud IoT Core 控制家中 MQTT 設備去開冷氣,回到家中享受透心涼的感覺,不是很好嗎?

落雨自動收衣服及關窗、管理雪櫃食材、motion detect 的家居鏡頭等等,所有想像都是技術上可行,只是取決於做不做出來……

MQTT 是一個可用的共同標準,不會因廠商不同而困住 ( Vendor Lock-in )。

MQTT proposed as an OASIS standard
https://www.oasis-open.org/standards#mqtt-v5.0-os

———————————簡易的分隔線————————————

結論︰


「選對技術好比賭贏了人生」,技術過於專門而狹窄,做事很有限,過度消費時間去學一個偏門,等於浪費了人生,尤其科技這方面。本人主張技術可以一層一層往上疊,不需要任何事都由零做起,這樣對自己及公司都不利,感覺有點浪費資源。

常常說 Reusable 及 Maintainability,無論寫桯式及管理伺服器,甚至感性與思考方向都改造成這樣。

半隻腳踏進編程的職業人仕,回頭是岸,別再執迷不悟,最少香港不適合做這種事,玩具就是玩具,玩具不有趣就不會繼續玩,要玩得盡興,不能被人事、政治、合約條件、公司政策、公司財產等限制困住。

【下一回】IoT 第一步!Wifi 開關電燈,動手做,設定及編寫程式 ( 三 )

沒有留言:

發佈留言

設有留言驗證及審查,檢閱後,才會顯示留言。
本人惰性很高,留言或許會石沉大海。