謝作如



SIoT是一款簡單易用的MQTT服務器軟件,也是“虛谷物聯”項目的核心軟件之一。SIoT不用安裝,也不用注冊、設置,一鍵運行后,其他物聯網設備(如掌控板)按照一定的規范接入即可正常使用。正因為這一點,SIoT得到創客教師們的熱捧,成為中小學物聯網教學的重要支撐軟件。
但是,能不能用SIoT做一個真實的物聯網項目,如智慧農場、校園氣象站、門禁系統等?我們會發現,功能實現并不難,但管理設備不太方便。SIoT畢竟是通用的MQTT服務器,在線設備管理之類的功能,只能自行開發,這樣難度就有點大。因而,我冒出一個大膽的想法:能不能為SIoT編寫一個插件,讓這個通用的MQTT服務器變成可以商用的物聯網系統管理平臺?
為SIoT編寫網頁插件的可行性分析
作為SIoT開發團隊的成員,我對SIoT的原理還是比較清楚的。SIoT運行后,會啟動兩種網絡服務:一是MQTT服務,作用是處理MQTT消息;二是Web服務,用來運行Web管理頁面,實現在線管理。具體工作流程如圖1所示。
SIoT是一款綠色軟件,主目錄下文件夾“static”中存放的是SIoT的Web管理頁面,如下頁圖2所示。需要強調的是,SIoT的Web管理頁面和SIoT服務器之間是利用WebAPI的方式交互數據的。也就是說,和我們傳統的動態網站開發方式不同,Web管理頁面并不是去讀數據庫,而是發送特定的Web請求,SIoT再返回相應的數據,實現頁面管理功能。這種軟件設計能夠將不同的網絡服務隔離,開發效率更高。
用記事本打開“static”中的HTML文件,如“devices.html”,在源代碼中可以看到其使用了目前最熱門的Web前端框架vue.js技術,如下頁圖3所示。前端頁面設計和后端數據隔離,是現在最主流的Web開發模式。那么,思路就呼之欲出了:只要在SIoT的管理頁面上,按照既定的API規范,就能實現我們預設的功能了。如果同樣采用Vue.js編寫,那和現有的Web頁面結合更加緊密。對于曾經開發過多個網站的資深網管來說,編寫這樣的頁面,技術上不算太難。
SIoT的API功能簡介
我曾經在SIoT的文檔中,提供過一個有趣的范例,即在PPT和Doc中插入超鏈接,就能通過SIoT控制掌控板的開燈、關燈,甚至可以和Mind+中的角色互動。這一功能的實現,其實就是利用了SIoT提供的WebAPI。只要通過瀏覽器訪問特定的地址即可。
地址:http://SIoT的IP:8080/publish?topic=xzr/001&msg=on&iname=siot&ipwd=dfrobot。
這里的“SIoT的IP”指運行SIoT的電腦IP地址,iname和ipwd要替換為SIoT的用戶名和密碼。
那么,SIoT究竟提供了哪些API?打開SIoT的使用文檔,在“高級操作技巧”的“3. WebAPI”部分,可以看到具體的WebAPI清單,如右表所示。
SIoT文檔地址:https://siot.readthedocs.io/
“智慧農場”管理插件的編寫
我準備利用SIoT來開發一個學校智慧農場的項目。這個項目事先定義了物聯網協議MQTT的各種細節,如每個物聯網終端節點的名稱為“sf”加局域網IP地址的尾號,終端上的傳感器或執行器模塊,用連接的引腳編號來命名,如a0、d2。這樣一來,每一個模塊都有唯一的TopicID,如“sf88/a0”表示名稱為“sf88”的終端上的設備“a0”。
其中,“a0”接光線傳感器,“a1”接土壤濕度傳感器,“d2”接電磁閥。這個插件的作用是,將所有的終端信息顯示在一個頁面上,并能夠用網頁按鈕的方式進行澆水,也就是給“sf88/d2”的TopicID發送特定的消息。
第一步:新建網頁
復制“devices.html”文件,重命名為“sfarm.html”。然后在“modules”文件夾中,也將“devices.js”文件復制一份,改名為“sfarm.js”。當然,每一個頁面上都要做好超級鏈接,這些都是最基礎的工作,不再贅述。
接下來,需要修改“sfarm.html”文件。核心工作是修改“
第二步:編寫js代碼
設計好網頁后,最難的工作肯定是編寫js代碼。因為需要寫的內容有點多,這里重點介紹“sendMsg_af”的函數。這是供“sfarm.html”上的按鈕來使用的。如何實現“澆水”?其實就是發送一個內容為“1”的消息(如圖5)。
第三步:效果測試
運行SIoT,打開Web管理端,即可看到多了一個名為“智慧農場”的欄目。點擊后,就會看到所有的設備都列出來了,在一個表格中顯示了最新的光照和土壤濕度數據。點擊“澆水”按鈕,就能給相應的TopicID發送消息。
插件編寫給“虛谷物聯”帶來了新玩法
這個“智慧農場”插件一經展示,就贏得了很多教師的好評和關注,有希望提供開發教程的,也有提出新的需求的。毫無疑問,這種開發插件的形式,給“虛谷物聯”帶來了新拓展思路。例如:編寫一個校園氣象站的插件,在一個頁面上呈現最新的溫度、濕度、光照、風向、風速等信息;編寫一個會議室門禁管理插件,可以遠程開門,可以遙控空調,還可以顯示攝像頭畫面;等等。
我始終認為,只有在真實的情境中應用,創客作品的制作、STEM項目的研究才顯得更有價值。給SIoT編寫插件的最重要意義在于,將技術門檻降低了,物聯網技術的應用顯得越來越簡單,開發真實應用不再困難。目前,SIoT的開發人員已經準備在下一版優化代碼,讓編寫插件的技術難度變得更低。到那個時候,相信會有更多的中小學智慧校園系統中,運行著中小學生自主編寫的各種智能應用。