jollen / blog

Jollen's Blog
http://www.jollen.org/blog
66 stars 4 forks source link

Fullstack IoT 2017 專欄, #1: IoT over the web #22

Open jollen opened 7 years ago

jollen commented 7 years ago

這篇文章是我在 2015 年,發表在 Mokoversity 上的修訂版本。以這篇文章做為 Fullstack IoT 2017 的 100 則寫作計畫導文。

IoT over the web

2015 年是 IoT 倍速發展的一年,而且也是 IoT 與 Web 技術開始產生交集的歷史時刻。在距今約十五年前,所提出的 IoT 技發發展藍圖裡,描述了 IoT 的 4 個發展階段,而其中第 4 個階段,就是近幾年被熱烈討的 WoT(Web of Things)。WoT 或許是 Smart Phone 之後,下一個最重要的市場機會。

目前,正好處於第 4 個 IoT 發展階段。Google 在 2013 年底發起的 Physical Web 計畫,是一個非常先期的研究計,就是為了 IoT 的新階段預做準備。IoT 的第 4 個階段,將聚焦在 Advanced Sensor Fusion 與 Physical-World Web 層面,這二個層面簡單來說,就是 WoT。

從 M2M 的情境到 WoT 的情境

根據維期百科上的定義,WoT 是 IoT 的 Application Layer,並且是使用 Web 技術來打造 application。也就是說,IoT + Web-enabled technologies 就是 WoT。對 WoT 來說,最重要的觀念,就是以 URL 來表示 IoT 裝置;為 IoT 加入 URL 的觀念,就是 Google 提出的 Physical Web 計畫。

Web of Things 將是 IoT 技術趨勢

所以說,WoT 與 Physical Web 是一體兩面的觀念,都是 IoT 正進入的新發展階段。雖然 WoT 都是使用目前已經存在的軟體技術,但許多觀念都要重新思考,例如:Software Architecture、Application Framework 與 Composition Layer。

一個重新定義的 Application Framework,或是 Application Frontend 的 Composition Layer 設計,將會是 2015 年的 WoT 關鍵技術。因此,筆者利用這次帶領 Mokoversity 農場計畫團隊,到深圳與 Seeed Studio 交流的機會,開始了相關的研究工作。

目前已經完成的實驗性質開發,就是利用 Virtual DOM 技術,來進行 UI 的 Boundary Composition,這個專案叫做 AutomationJS。AutomationJS 只是一個實驗性質的試作,它展示的是輕量級的 Boundary Composition 實作,並且使用 Backbone 做為 Model-View 的基礎。React 是由 Facebook 提出的 View 框架,它將接軌 HTML 5 的重要技術-Virtual DOM。

從 boundary composition 與 Web of Things 的角度來看,React 會是一個重要的物聯網前端開發技術。

有了 Application Framework,就能將 IoT 裝封包為物件,並以 REST API 與 WebSocket Client 的方向,做對做數據推送(Data Push);這就是更能符合 WoT 理念的觀念:REST Device Object。同樣的硬體,但採用不同的觀念、技術框架與商業思維來表達,帶來的是非常不一樣的產品思維,以及更有潛力的商業模式。

IoT Broker

WebSocket 是 HTML5 標準的一項技術,WebSocket 讓 Client 與 Server 能建立永續性的 TCP 連線。簡單來說,有了 Websocket,就能實作出 Real-time Data Streaming 機制。

WebSocket 技術在 IoT 第 4 階段,同樣也扮演重要的角色,同時也帶來不同的思維:使用 Websocket Channel Service。 Websocket Channel Service 可以將 WoT 封裝成為抽象化的 Data Push Server。一般來說,WebSocket 的使用案例(Use Case)是 Server Push(Data Push)機制,也就是說,WoT 物件本身,應該是扮演 Websocket Server 的角色。

但現實層面,讓 IoT 裝置扮演 Websocket Server 的話,會有一些技術問題。WebSocket Channel Service 的架構,能解決相關的技術問題。對 Channel 來說,只要能定義好「Channel」的描述結構,就能封裝數以萬計、千萬計的 IoT 物件。這樣的概念,就是 ioT Broker 的技術。Ponte 是一個較為早期,在 Eclipse 計畫下發展的 IoT broker 計畫;我目前在測試中的 DevifyPlatform 軟體,也是一個 IoT broker 的解決方案。

WoT 有豐富的潛在能量,因為它是 Smart Phone、IoT 與 Web 的一場交集表演;所以它或許會像 2006 年開始的 Smart Phone 時代,不但改變過去十年的商業模式,也重構過去十年的競爭形態。

HTTP 舊瓶新裝

Physical Web 與 Web of Things 是現在最重要的 IoT 趨勢。簡單來說,IoT 正在發生三件大事。第一、Going Web:與 Web 融合;第二、Open IoT Cloud Architecture:如上,要與 Web 融合,就要發展一個使用相關開放標準的 IoT Cloud 架構。第三、Physical Object:硬體裝置將與 REST 架構密切結合

這三件大事,其實是一個交互關係:要 Going Web 當然就要以 Web 標準來建立一個 Cloud 架構,要讓硬件與 Cloud 架構結合,就要讓硬件能以 URL 方式表示,或是能推送 Time-Series Data 到 Cloud。

這三件大事,其實說白了就是 HTTP。HTTP 並不是個新技術,也不是什麼困難的技術,與物聯網的交集,不過也就是舊瓶新裝。但難就難在舊瓶新裝,是個哲學思想提昇的過程:這需要一套整體的新思維。

Physical Object

首先,先談談 Physical Object。將 IoT 裝置以 REST API 來表示,這個 IoT 裝置就稱為 REST Device。如果更進一步以「對象」來封裝此觀念的話,也可以稱做 REST Object。例如:

http://wot.city/1/jollenchen/dust/kitchen

REST API 是一種 URI 的形式。所以,也可以這樣說:將 IoT 裝置以 URL 形式來表示;這就是 Google 的 Physical Web 計畫,所提出的觀念。

現在,只需要以 GET 方法(HTTP 協定)來調用這個 REST API,就能得到 IoT 裝置的數據。REST API 是一種表示「資源」的觀念,以上述的 REST API 來說:

從 REST 的角度來看,jollenchen 就是一個對象,這個對象只能存在一個,意思是名稱不能重覆。用設計模式的方式來解釋,就是 Singleton。

最後,設計者會賦與 dust.kitchen 一個意義:廚房的空氣感測數據。

Web of Things:HTTP Use Case

REST Device 是一個實物,也就是硬件設備,因此也稱為 Physical Object。有了 Physical Object 做為基礎,要搭建 IoT 的 Cloud Architecture 並不是一件難事。

REST Object

IoT 過去著重在 M2M 使用情境,現在則開始跨入 Machine to Web 的情境。這是 IoT 開始與 Web 融合的階段,產業圏把這個使用情境稱為 Web of Things(WoT)。WoT 之所以重要,在於它開始讓 Web 實體化。過去 Web 是虛擬化的物品,現在則是真正看得到,也摸得到的實體。

Google 把這樣的概念稱為 Physical Web,也就是用 URL 的方式,來表示所有的物聯網裝置。ARM 也有類似的生態系統,稱為 ARM mbed。ARM mbed 的主軸也是 WoT,這從 mbed OS 的幾個重要技術特色可以看出:ARM mbed 定位為 Full Stack OS,並且支援 HTTP、Websocket 與 CoAP 等重要協定。

現在我們知道,只要在 ARM mbed 裝置裡,實現一個輕量化的 Web 服務器,可以將 IoT 裝置「表示為 URL」。並且使用瀏覽器,來「讀取」裝置的感測數據。

將 IoT 裝置以 URL 表示

使用 HTTP 與 REST 很容易實現 Physical Object 的設計哲學。但是,這樣的情境並不算最佳。從數據模式的角度來說,這是「Data Pull」的設計模式;更好的使用情境,應該是「Data Push」。