本文分析基於微信硬件平臺的物聯網架構,將從物聯網的核心要素、物聯網的關鍵場景、微信硬件平臺的通訊協議分析三個維度去分析。更多的微信硬件平臺開發的深度技術原創分享請訂閱微信公衆號:嵌入式企鵝圈。前端
微信硬件平臺包括基礎接入方案與微信硬件雲標準接入方案。前者是在應用端和設備端都徹底由廠商開發,微信硬件平臺只負責用戶管理、設備管理和透明的消息推送;後者是在前者的基礎上,給設備端提供了直連SDK(能夠適配linux/Android等平臺)、提供設備API給第三方硬件平臺接入,甚至在應用端根據各類家電場景定義了標準協議和標準應用界面,簡化了廠商的開發流程。linux
最近的一年裏,微信硬件和阿里小智、京東智能、機智雲、慶科雲都獲得快速的發展,要麼是在雲端有深厚積累的企業經過合做眼神到設備端,要麼是設備模組商擴展到雲端,目標都是造成物聯生態圈。而物聯的產品應用形態基本上都是從單個APP走向超級APP,從技術上就是從C/S模式走向B/S模式。對技術人員的要求也是不同的。例如,微信、阿里小智等都是內置了瀏覽器的,那麼應用就要求web開發技術,而C/S方式的物聯單品,天然是android/iOS開發。可是各個平臺都有本身的優勢和缺點,體驗也有差別,有些體驗仍是致命的硬傷。嵌入式企鵝圈將會專門寫一篇針對國內物聯網平臺發展的技術分析和比較文章。本文先分析微信接入方案。android
1、 微信硬件平臺基礎接入架構web
微信硬件平臺包括近場藍牙控制接入和遠場wifi控制接入兩種場景。對於藍牙接入,其須要經過微信定義的airsync協議跟手機的微信通訊,接入微信硬件平臺,藍牙設備和廠商服務器的通訊都須要通過微信服務器的推送。而wifi接入的設備是能夠直接跟本身的廠商服務器直接通訊的。在基礎接入方案中,wifi設備是經過廠商服務器給微信用戶提供服務的。在第二種微信硬件雲接入中,設備端能夠經過直連SDK與微信服務器通訊,給微信用戶提供服務。數據庫
2、微信硬件平臺硬件雲標準接入方案編程
硬件雲標準接入方案是針對wifi接入,其有兩種形式。後端
1.第一種形式:設備能夠經過微信提供的直連SDK直接與微信硬件雲通訊,並實現微信標準場景的協議便可,不須要另加廠商服務器。阿里小智也是相似這種方式。瀏覽器
2.第二種形式:微信經過HTTP提供設備端的API,由設備的廠商服務器負責接入。即設備先接入到設備廠商服務器,並由廠商服務器接入微信硬件平臺。例如機智雲的設備能夠經過設備端API接入微信。可是這種方式要求設備廠商的開發能力足夠強。服務器
接下來,咱們着重分析基礎接入的架構分析,微信硬件雲標準接入方案之後再分析。微信
3、微信硬件平臺的基礎接入架構分析
上圖涵蓋如下信息:
1. 基於微信硬件平臺的物聯網的架構組成,有微信公衆平臺/硬件平臺、第三方廠商雲後端、手機微信/公衆號、微信硬件設備終端(Wifi和藍牙BLE)。
2. 綠色表明騰訊向開發者和公衆提供的基礎平臺和服務,並經過紅色(airsync/airkiss)定義的硬件外設協議供硬件設備接入,紅色(微信硬件平臺接入協議,XML/JSON)供廠商雲後端接入;藍牙和紫色區域表明開發者所要完成的任務,其中藍牙是嵌入式硬件設備終端的任務,紫色是第三方廠商雲後端的任務。
3. 物聯網各個組成部分之間的通訊協議標識。除了紅色標識的協議是微信公衆平臺和硬件平臺制定的協議必須遵循外,其餘組成部分的協議都是自定義的協議。
4. Wifi模組的供應商提供的SDK通常都提供socket通訊接口,而云後端通常會使用JSP/PHP等web編程技術,所以wifi設備須要模擬HTTP協議跟雲終端通訊。HTTP是一個標準的公共的通訊協議,應用層須要在HTTP之上創建自定義的應用協議來完成設備的控制和交互,而應用協議能夠是XML/JSON等等。固然,若是雲後端使用底層的socket編程,則wifi設備終端能夠不須要模擬http。
5. 藍牙經過airsync協議接入微信,該協議規定了設備發現、綁定、登錄、初始化、接收用戶指令、主動發送消息等過程。
6. Airkiss是經過JSAPI的方式讓用戶能夠在微信上輸入路由器的用戶名和密碼,而後告知沒有按鍵輸入和屏幕顯示的wifi設備,讓該設備可以連上路由器進入網絡在線狀態。除此以外,Airkiss跟以後用戶和廠商、設備的交互完成沒有關係。本質上,Airkiss只是一個配置上網功能,跟物聯網的控制和交互無關。
7. Wifi設備接入微信硬件平臺是遠場控制,設備只要處於聯網在線狀態,那手機用戶不管在哪裏,只要能上網均可以對設備進行控制,典型的例子是在公司上班能夠經過手機控制家裏的智能插座上電;藍牙設備接入微信硬件平臺必須依賴於手機,是近場控制,典型的場景是手機控制家裏的燈和空調等。
4、物聯網的核心要素
本文是從開發者的角度去分析整個微信硬件平臺物聯網,不去探討物聯網運營之類等領域。那麼,從開發的角度,物聯網的核心要素什麼,微信平臺又支持了什麼?個人理解是:
1. 設備的合法性和惟一性
微信硬件平臺在物聯網領域作的事情其實很少,只要仔細想一想架構圖中的這麼多的紫色和藍色都是留給開發者,並且都是要赤裸裸的編程。對於通常的設備商,他們想接入也是勉爲其難啊。在這個體系架構中,微信硬件平臺作的最重要的一件事情就是身份認證。
就像一我的出生後要辦一張身份證(出生證實的號碼也是身份證號碼)同樣,設備生產出來要想進入微信硬件領域,它就必須到微信硬件平臺註冊本身的身份,那它拿什麼去註冊呢,這個依據天然應該是獨一無二的,就像每一個人的指紋,若是我國的小孩辦身份證都以錄指紋爲依據,那就不會出現那麼多拐賣兒童了。如今公安局的作法是什麼,是硬生生地把一串身份證數字跟人名綁在一塊兒,跟天然人的生物特徵沒有一丁點關係!!!設備的獨一無二的依據就是48位的MAC地址(或者是MAC地址經過某種加密運算獲得的結果)。
接着辦身份證/出生證不是要給小孩起個名字嗎,之後你們交流就叫名字了,公安局也是叫名字的嘛,不可能每次喊話都把指紋的二進制數字讀出來的啊。嗯,那硬件設備註冊時也要報備本身的名字,即設備ID。設備ID也應該在微信硬件平臺惟一啊,否則會亂的。就像MAC地址同樣,有一部分是表明一個設備提供商向世界IETF組織申請的企業識別字段,另外一部分是設備商內部的分配。或者像身份證那樣,前面6個字段是表明一我的出生時的縣區行政區劃碼,後面的數字才表明自身,但同時要保證在這個行政區裏面的惟一性。那微信硬件平臺怎麼規範設備身份?設備身份包括兩個部分,deviceType是設備商/銷售商的微信公衆號的原始ID,deviceID由設備商/銷售商自定義,由設備商保證deviceID在其deviceType中的惟一性。
這就是設備的註冊場景。設備註冊了之後在微信硬件平臺就具備合法性和惟一性了。
2. 設備被訪問的合理性和正當性
設備最終是應該和人/手機用戶交互的,不然就失去了物聯的意義了。那麼哪一個用戶可以訪問這個設備呢?
微信用戶要關注設備商的微信公衆號和綁定設備才能對設備進行訪問。若是不綁定就能夠訪問,那就是全部用戶都可以訪問這個設備,這顯然是不合理的。你買的智能插座放家裏,另外一我的也能控制你的插座,多危險。
微信硬件平臺確保設備的惟一性,微信公衆平臺確保微信用戶的惟一性,二者經過關注和綁定這個流程創建起徹底權利的訪問關係。
微信硬件平臺是微信公衆平臺的一個子集,微信硬件平臺會利用微信公衆平臺已有的功能來完成基礎服務。
3. 設備和用戶交互的消息觸達能力
設備要成爲物聯網中的一員,必須可以聯網,比如人體的神經元,具備可以和外界交流的能力。
微信硬件平臺主要從雲後端接入和硬件接入兩方面做出努力。一是經過airsync協議讓藍牙設備和微信互通,airkiss協議讓簡單的沒有按鍵和UI交互的wifi設備聯網;二是經過制定雲後端接入協議來接納廠商雲,經過消息接口和API接口使用戶和設備的消息可以相互觸達。即設備發出的消息通過微信平臺發送到廠商雲,廠商雲的消息也能主動推送給設備,完成交互。
4. 效率
掃一掃功能對微信的影響是巨大的,加關注,好友,移動支付等等都經過二維碼來完成,設備綁定是二維碼。微信硬件平臺和公衆平臺產生的二維碼關聯了用戶、設備ID等信息,經過掃一掃功能能方便地進行綁定,接入進入公衆號的消息界面。
物聯網涉及到終端、前端和後端等等,是一個大工程,不管從開發的角度,仍是從用戶使用的角度,都要始終強調便捷的效率,以讓用戶有足夠好的體驗,才能使得物聯網得以壯大。
5. 消息處理能力—嵌入式系統
這一點並無在物聯網架構的圖示中出現。物聯網決不只僅是一種控制,例如開燈和關燈之類,也不只僅是簡單的經過各類傳感器來進行數據採集,將來的物聯網必定會讓用戶不斷地提升用戶體驗,例如多媒體、虛擬與實現、數據決策等等,這部分是由高級的嵌入式系統來完成的。嵌入式系統纔是設備的大腦,物聯網應該更好地擁抱嵌入式系統。
5、基於遠場wifi控制的微信物聯方案
1.註冊
上面已有說明
2.用戶綁定
上面已有說明
3.鏈接
因爲用戶和wifi設備並不在一個區域,而是經過網絡來鏈接,所以用戶是不直接跟wifi設備打交道的,全部的交互都給經過wifi設備商的雲後端進行間接交互。(以前已經說了airkiss只是微信提供的一個配置上網功能,wifi設備通過一次配置後,之後會記住這個路由器的ssid和pwd的,因此配置好一次後,airkiss跟物聯網交互一點關係都沒有,所以airkiss不該該算在物聯網的消息觸達協議內)。
用戶進入wifi設備對應的公衆號後,微信公衆號會經過微信公衆平臺向廠商雲訂閱和諮詢設備的在線狀態。所以設備一上線時應該主動聯繫廠商雲後端,告知本身上線了,並不時地發送心跳包維持鏈接。這樣微信公衆號一訂閱請求,雲就返回設備的狀態給它。
假設設備在線,雲後端返回在線狀態,微信公衆號就會顯示設備鏈接上。
4. 控制(菜單控制)
1)用戶點擊微信公衆號提供的菜單,如開燈。
2)消息經過微信公衆平臺發送給廠商雲後端。
3)雲後端在本身的數據庫內驗證微信用戶和設備的有效性後,將微信菜單的開燈消息轉化爲自定義協議的開燈消息(這個協議只有雲後端和外設設備所認識),而後直接經過網絡發給wifi設備。
4)wifi外設收到消息進行相應的處理。
5. 控制(H5控制)
1)用戶點擊微信公衆號提供的H5網頁連接
2)微信瀏覽器經過H5地址向廠商雲後端請求響應,返回H5頁面。
3)用戶點擊H5頁面的開燈button
4)button經過AJAX接口向廠商雲後端發出自定義的控制消息。
5)廠商雲接收到消息會轉化硬件控制消息,直接經過網絡發給wifi設備。
6)wifi設備收到消息進行相應的處理。
從這點來看,wifi設備接入微信硬件平臺,微信硬件平臺僅僅起到一個入口的做用,消息轉發都不通過微信硬件平臺了。
6、基於近場藍牙控制的微信物聯方案
1.註冊
上面已有說明
2.用戶綁定
上面已有說明
3.鏈接
用戶在綁定過程當中會自動完成對提供設備的廠商的微信公衆號的關注。在之後每次進入公衆號時,會自動經過手機藍牙對藍牙設備進行掃描鏈接。只有完成airsync協議的藍牙設備才能連上微信。例如藍牙設備廣播的字段裏面要聲明本身的MAC地址,這樣微信能識別到這個一個要接入微信的藍牙設備,而後纔會主動地鏈接它。
4.控制(菜單控制)
1)用戶點擊微信公衆號提供的菜單,如開燈。
2)消息經過微信公衆平臺發送給廠商雲後端。
3)雲後端在本身的數據庫內驗證微信用戶和設備的有效性後,將微信菜單的開燈消息轉化爲自定義協議的開燈消息(這個協議只有雲後端和外設設備所認識),並根據airsync中的protobuf協議對消息體進行打包封裝,最後經過調用微信硬件平臺提供的API接口主動推送出去。
4)微信硬件平臺收到信息後經過微信公衆平臺回傳給微信用戶所在的公衆號。
5)微信將這個消息根據airsync協議經過手機藍牙發送藍牙外設。
6)藍牙外設收到消息進行相應的處理。
從這個過程來看,直接的菜單控制走的流程太長了,影響效率。下面介紹的JSAPI控制就是直接控制,不須要再經過廠商雲來發指令。
5. 控制(H5/JASPI控制)
1)用戶點擊微信公衆號提供的H5網頁連接
2)微信瀏覽器經過H5地址向廠商雲後端請求響應,返回H5頁面。
3)用戶點擊H5頁面的開燈button
4)button經過JSAPI接口直接向藍牙設備發出自定義的控制消息,JSAPI藍牙接口已經封裝好airsync協議。
5)藍牙設備收到消息進行相應的處理。