1. 了解
物聯網最基礎的就是通信了。通信協議,物聯網協議好像有那么幾個,以前各個協議都有優劣,最近一段時間,好像各大廠商都采用MQTT協議,所以我也不例外,不搞特殊,采用MQTT協議,選定了協議,接下來就是選一個MQTT服務器(Broker),項目初期肯定是使用開源的解決方案會好一點,一方面是有人為之填坑,一方面可以快速搭建原型。等以后有人、有資源、有用戶,在自己定制開發一套系統。基於各種考慮(更多的是領導的要求)選擇了國人開發的MQTTBroker EMQ框架 (http://emqtt.com/),目前最新版本是2.3.1 接下來大部分環境都是基於此版本的。
2. Erlang語言
一開始叫我學習這個語言我還是拒絕的,當然現在也是。其實我還是比較傾向於Java實現的MQTTBroker - Moquette 這個的。沒辦法,需要就學咯。
學習Erlang,我是在http://www.erlang-cn.com/這里找個快速入門的,簡單了解一下語法和語言特性。沒有怎么深入理解,這個在目前不是重點,在后面開發插件時,邊寫邊學才是最快的。總結幾個與以往有所區別的特性吧:
(1)非面向對象,面向函數(並發)編程
(2)無循環結構,只能通過遞歸實現,盡量采用尾遞歸
(3)變量不可變
(4)無數組概念,不能通過下標訪問
(5)Erlang消息傳遞機制
3. EMQ框架
這個http://emqtt.com/ 是中文的官網,這個http://emqtt.io/ 是英文的官網。由於是國人自己開發的,加上我自己英文不好,其實看中文文檔就可以了。文檔 http://emqtt.com/docs/v2/index.html 在 http://emqtt.com/downloads 這里下載個可以用的版本,然后跟着文檔一步一步就可以搭建起來了。沒有什么可以說的,我說的還沒有官方文檔好。里面的一些知識點和商業吹捧也可以了解一下。
4. EMQ編譯、安裝
好了,這部分才是重點,由於官網提供的是二進制可運行版本,但是每個公司對應的業務需求都不同,所有就需要進行二次開發。EMQ提供的二次開發機制是,建議使用插件方式進行擴展。所以這里就需要下載源碼了。
安裝Erlang/OTP 框架
安裝 emq-relx EMQ編譯環境
1 git clone https://github.com/emqtt/emq-relx 2 cd emq-relx 3 make
這個make過程會比較久,會下載一大堆依賴,依賴存放在 deps 目錄,然后把編譯結果存放在 _rel 目錄下,實際生產過程中,就是拷貝這個 _rel 目錄下的所有文件就可以了。
我在當前(2017-12-21)版本下,編譯的時候遇到以下這個問題
1 src/emq_sn_gateway.erl:592: undefined macro 'SN_RC_MQTT_FAILURE'
我臨時解決的辦法是在./emq-relx/deps/emq_sn/include/emq_sn.hrl:56 行增加一個宏定義
1 -define(SN_RC_MQTT_FAILURE, 16#04).
臨時解決編譯問題。
這個依賴下載過程會比較久,大部分是依賴與Github,下載編譯后,目錄有136M大小
下圖就是編譯好了
編譯后,產生一個_rel 目錄,這個目錄下的文件,就是我們在官網上 http://emqtt.com/downloads 下載后解壓的結果了。兩者基本是一樣的。
運行
1 ./bin/emqttd start 2 ./bin/emqttd_ctl status 3 ./bin/emqttd stop
控制台地址: http://127.0.0.1:18083 默認用戶密碼 admin/public
更多內核調優,請參考官方文檔。
幾個常用端口,也可以看一下
5. EMQ運行
運行后,可以打開 http://host:18083 登錄到后台管理界面。沒什么說的,就在上面玩一會。