標籤:serial 採集 base 變化 上傳 彙報 負載 資料分析 技術
平台定位
OneNET是中移物聯網有限公司搭建的開放、共贏裝置雲平台,為各種跨平台物聯網應用、行業解決方案,提供簡便的雲端接入、儲存、計算和展現,快速打造物聯網產品應用,降低開發成本。
IoT PaaS基礎能力:提供智慧型裝置自助開發工具、後台支援人員服務、物聯網專網、短多媒體訊息、位置定位、裝置管理、訊息分發、遠程升級等基礎服務
SaaS商務服務:提供第三方應用開發平台,快速實現不同業務需求,藉助輕應用孵化器快速搭建Web和APP應用
IoT資料云:提供高擴充的資料庫、即時資料處理、智能預測離線資料分析、資料視覺效果展示等多維度業務運營服務
開發人員社區:高頻的開發人員社區,匯聚著不同的知識源,集合更多的物聯網愛好者,讓項目與開發成果開始傳播
架構
作為PaaS層,OneNET為SaaS層和IaaS層搭建串連橋樑,分別向上下遊提供中介層核心能力。
應用情境
平台功能
平台資訊模型
術語介紹
- 產品ID(Product ID, PID)
- 產品ID是指由OneNET後台為您的某一款真實產品分配的一個獨立的ID號,如果您旗下的某一款產品有兩款不同的系列(如Iphone7/Iphone7 PLUS),那麼建議建立兩款產品來分別獲得兩個產品ID。
- APIKey
- 用於對OneNET進行操作的鑒權以及許可權控制,在使用OneNET Restful API時,HTTP請求訊息的頭域必須攜帶該APIKey欄位,OneNET會依據APIKey欄位判別該使用者是否具有對應操作的許可權。
- APIKey的許可權模型是通過設定對雲端資源是否可以增加、查看、修改、刪除等方式來描述的,最低的權限等級可細化到對某個資料流的存取權限。APIKey分為兩種:
- 1. 產品APIKey:在建立產品時,OneNET會為該產品產生一個預設的APIKey,這個APIKey是Masterkey,具有最大許可權,能夠對本產品下所有資源進行訪問。
- 2. 裝置APIKey:使用者為某一產品下的某一台裝置建立的Key稱為裝置APIKey,裝置APIKey的作用許可權只限於本裝置的資源,而不能對其他裝置進行訪問操作。
- 裝置
- 雲端的"裝置"是指在上面提到的"產品"下的實體,亦指使用者的某一台真實裝置在OneNET上對應的唯一的虛擬名稱。
- 裝置ID(Device ID, DID)
- 裝置ID是指由OneNET後台為您的某一台真實裝置分配的一個獨立且唯一的ID號,一款產品下可以有多台裝置,每一台獨立的裝置都有唯一的裝置ID。
- 註冊碼 (Register code)
- 一個產品擁有唯一一個註冊碼,在API中作為參數,用於裝置註冊。
- 裝置編號
- 使用者在OneNET上建立裝置時,如果裝置接入協議選擇HTTP,則需要填寫"裝置編號"。裝置編號是每一台真實裝置所擁有的唯一識別號,不需要OneNET後台分配,使用者可以自訂裝置編號,但必須保證每台裝置之間的獨立性和唯一性,建議使用者在輸入裝置編號時採用原有產品線的序號。
- 鑒權資訊(Auth_info)
- 使用者在OneNET上建立裝置時,如果裝置接入協議選擇EDP或者MQTT,則需要填寫"鑒權資訊"。鑒權資訊是每一台真實裝置所擁有的唯一識別號,不需要OneNET後台分配,使用者可以自訂鑒權資訊,但必須保證每台裝置之間的獨立性和唯一性,建議使用者在輸入鑒權資訊時採用原有產品線的序號或者MAC地址。
- SN(serial number,序號)
- 即每台真實裝置的唯一識別號,由使用者自己提供,其作用在於實現裝置綁定功能。
- 請注意:本質上來說,裝置編號、鑒權資訊以及SN都表示使用者的每一台真實裝置所具有的唯一的並且獨立的身份標識碼,其作用都是一樣的,用於OneNET據此來準確定位是哪款產品下的哪一台裝置,之所以沒有對它們進行統一稱呼,其原因在於採用不同協議方式接入裝置時,後台部分系統因為規劃原因,原組件普遍保持本協議下的定義方式,因此介面中仍沿用初始寫法,您只需要知道從作用上來講:裝置編號=鑒權資訊=SN就可以了。
- 資料流(Datastream)
- 一個資料流可以理解為一類資料,如感應器之溫度、位置之經緯度,空氣之濕度等。使用者可以自訂資料流名稱,即資料流ID;一個裝置可以添加多個資料流。
- 資料點(Datapoint)
- 即一個資料流中的一個具體的資料值。資料點採用"Key-Value"的方式儲存。其中Key的組成包括裝置ID、資料流ID、時間等資訊,value部分可以為任何資料對象,如整數、字串或者JSON資料類型。
- SDK
- 標準協議產品SDK:用於裝置接入協議為公開協議的終端側軟體開發包,OneNET提供多種語言的SDK,提供裝置串連、資料上傳等準系統。
- 私人協議產品SDK:使用私人協議接入裝置時,OneNET將根據開發人員定義的裝置資料模型自動產生SDK源碼,開發人員將SDK嵌入到裝置中,自動實現與平台的對接。OneNET提供私人協議產品的SDK全源碼。
總體接入流程
裝置接入
- 在OneNET平台上建立產品
- 在產品中建立裝置,為裝置新增資料流。
- 裝置端編寫終端接入代碼,主要完成資料擷取、協議封裝、資料上傳等工作。
- 終端裝置的資料上傳成功後,平台在相應資料流下會產生隨時間推移的資料點。
- 為了更直觀的呈現資料的變化情況,使用者可以運用應用孵化器自訂個人化應用並發布。
- 裝置可通過私人協議和標準協議與平台對接
- 私人協議說明:
- RGMP(remote gateway management protocol)是平台的私人協議,平台不提供協議報文說明,根據開發人員定義的裝置資料模型,平台將自動產生SDK源碼,開發人員將SDK嵌入到裝置中,實現與平台的對接。
- 標準協議說明:
- 包括HTTP,EDP,MQTT,MODBUS,JT/T808。 平台提供每種協議的報文說明文檔,開發人員可以根據文檔自己實現裝置與平台對接的協議,也可以用平台提供的相應協議SDK實現與平台的對接。
標準協議 – EDP協議
- EDP協議(Enhanced Device Protocol)是OneNET平台根據物聯網特點專門定製的完全公開的基於TCP的長連線協定,提供裝置接入、加密傳輸、資料存放區等功能,協議的特點和功能包括:
- 長連線協定
終端資料點上報,支援的資料點類型包括
- 整型(int)
- 浮點數(float)
- 字串(string)
- JSON
- 位元據
- 平台資料下發
- 端到端資料轉寄
標準協議 – Modbus協議
- Modbus協議是應用於電子控制器上的一種通用工業標準協議。此協議支援傳統的RS-232、RS-422、RS-485和乙太網路裝置。典型工業裝置包括 PLC、DTU等均使用Modbus協議作為它們之間的標準協議,協議的特點和功能包括:
- 長連線協定
- OneNET平台為Modbus主機
- 通過單條資料流的屬性確定單條下發命令的內容以及周期
- 自動將終端上報的資料轉化為資料流中的資料點
標準協議 – MQTT協議
- MQTT協議是一個面向物聯網應用的即時通訊協定,使用TCP/IP提供網路連接,能夠對負載內容實現訊息屏蔽傳輸,開銷小,可以有效降低網路流量,協議的特點和功能包括:
- 長連線協定
- 終端資料點上報,支援的資料點類型包括:
- 整型(int)
- 浮點數(float)
- 字串(string)
- JSON格式
- 平台訊息下發
- 基於Topic的訂閱、發布以及訊息推送,可以實現裝置間的訊息單播以及組播
標準協議 – HTTP協議
- OneNET支援裝置採用HTTP 協議即遵循RestFul原則接入平台,協議具有接入鑒權、控制命令下發、警示出發等功能,適合平台與平台之間資料對接,其特點和功能包括:
- 短連線協定
- 終端資料點上報,支援的資料點類型包括:
- 整型(int)
- 浮點數(float)
- 字串(string)
- JSON格式
- 位元據
- 平台側相關資源管理
標準協議 – JT/T808協議
- OneNET基於JT/T808協議定義了一個擴充協議JTEXT,可以讓已經基於JT/T808協議傳輸資料的裝置快速接入平台,協議的特點和功能包括:
- 交通部定製的用於車輛動態監控的標準通訊協定
- 裝置和平台可以保持長串連,可及時檢測裝置的上/下線狀態
- 標準的"位置資訊彙報"等訊息格式,方便已支援JT/T808協議的終端快速接入平台
- 基於"上/下資料透傳"模式,可以靈活上傳使用者自訂的資料,查詢資料最新響應
私人協議 – RGMP協議
- 為簡化開發人員的開發流程,提高使用者裝置資料轉送的安全性,OneNET為裝置接入平台提供了專門的私人協議,即RGMP協議(Remote Gateway Management Protocol)。
- RGMP 協議與公開協議最大的不同是OneNET平台不提供協議的報文說明,而是根據開發人員定義的裝置資料模型自動產生SDK源碼,開發人員將SDK嵌入到裝置中,實現與平台的對接。
- RGMP協議具有業務資料格式靈活、資料轉送緊湊高效以及即時性高等優點,其主要特點和功能包括:
- 私人的報文格式,保證資料安全性
- 遠程配置更新
- 平台通知資訊下發
- 遠程韌體升級(OTA)
- 終端資料點上報,支援的資料點類型包括:
- 整型(int)
- 浮點數(float)
- 字串(string)
- 位元據
- 布爾值
第三方平台接入
- 用於開發人員使用OneNET提供的資料推送和API服務來開發自己的個人化業務系統
- 在OneNET平台填寫用於接收資料的第三方URL地址,該URL地址應為一個可達地址,並提供Token驗證的get方法;
- Token值作為使用者在OneNET上的身份標識,用於訊息摘要
- 隨機產生EncodingAESKey和選擇訊息加解密方式後
- 對已配置成功的配置內容,使用者可進行編輯、修改操作
第三方平台接入 - 資料推送訊息格式
- 平台以HTTP POST請求形式向第三方平台登入位址推送資料,推送資料相關資訊以JSON串的形式置於HTTP請求中的body部分。
- 第三方平台在接收資料時,根據加密選擇,會接收到資料的明文訊息或者密文訊息。
- 明文格式
- 根據msg部分type欄位的不同,可分為資料點訊息、裝置上下線訊息
- 在明文傳輸時,存在msg、msg_signature、nonce欄位,分別表示明文傳輸的資料、msg部分的訊息摘要、用於摘要計算的隨機字串
- 密文格式
- 在加密傳輸時,存在enc_msg、msg_signature、nonce欄位,enc_msg欄位表示加密傳輸的資料,後兩欄位與明文傳輸一致
第三方平台接入 - 加解密方案
- 平台基於AES演算法提供加解密技術
- EncodingAESKey即訊息加解密Key的BASE64編碼形式,長度固定為43個字元,從a-z,A-Z,0-9共62個字元中選取。由服務開啟時填寫,後也可申請修改。
- AES密鑰計算為 AESKey=Base64_Decode(EncodingAESKey + "="),EncodingAESKey尾部填充一個字元的"=", 用Base64_Decode產生32個位元組的AESKey。
- AES採用CBC模式,秘鑰長度為32個位元組(256位),資料採用PKCS#7填充 ,初始化iv向量取秘鑰前16位元組;
PKCS#7:K為秘鑰位元組數(採用32),buf為待加密的內容,N為其位元組數。Buf 需要被填充為K的整數倍。在buf的尾部填充(K-N%K)個位元組,每個位元組的內容 是(K- N%K)。
具體詳見:http://tools.ietf.org/html/rfc2315
- BASE64採用MIME格式,字元包括大小寫字母各26個,加上10個數字,和加號"+",斜杠"/",一共64個字元,等號"="用作尾碼填充;
出於安全考慮,平台網站提供了修改EncodingAESKey的功能(在EncodingAESKey可能泄漏時進行修改,對應上第三方平台申請時填寫的接收訊息的加密對稱金鑰),所以建議儲存當前的和上一次的EncodingAESKey,若當前EncodingAESKey產生的AESKey解密失敗,則嘗試用上一次的AESKey的解密。
- 平台的加密訊息部分為enc_msg= Base64_Encode( AES_Encrypt[random(16B)+msg_len(4B)+msg] ),即以16位元組隨機位元組串拼接4位元組表示訊息體長度的位元組串(此處4位元組長度表示為網路位元組序),再加上訊息本身的位元組串作為AES加密的明文,再以AES演算法對明文進行加密產生密文,最後對密文進行BASE64的編碼操作產生加密訊息體。
- 對加密訊息體的解密流程為:1)首先進行加密訊息體的BASE64解碼操作,aes_msg=Base64_Decode(enc_msg);2)對擷取的解碼內容以AES演算法進行解密操作,擷取明文部分,plain_msg=AES_Decrypt(aes_msg),解密中使用的秘鑰由EncodingAESKey計算得來,使用的初始化iv向量為計算出的aes秘鑰的前16位元組;3)去掉plain_msg的前16位元組,再以前4位元組取出訊息體長度,根據訊息體長度擷取真實的訊息部分(推薦以訊息體長度擷取真實訊息,以相容plain_msg未來可能出現的結構變更)。
第三方平台接入 - 摘要計算方案
- 為了驗證訊息體的合法性,每一條平台推送訊息中包含了訊息簽名,第三方可用以驗證訊息體的真實性,明文訊息對msg部分整體進行摘要計算,密文訊息對enc_msg部分整體進行摘要計算。具體做法如下:
- msg_signature=Base64(md5(sort(token+ nonce+ enc_msg/msg))),即按token、nonce(8位元組隨機串)、訊息體(明文或密文)的順序以位元組為單位拼接為一個整體,計算其md5值並按BASE64編碼做為訊息摘要。驗證時,取出nonce部分計算收到訊息的md5值,計算相應的BASE64編碼,與收到的msg_signature進行比較,即可知道是否存在訊息篡改。
第三方平台接入 - 開放API
OneNet提供以下類別的開放API
- 裝置
- 資料流
- 資料點
- 觸發器
- 二級制資料
- 命令
- MQTT相關
命令是指應用發送命令資料給OneNet裝置雲、再由OneNet裝置雲轉寄給終端裝置、終端裝置收到命令後可以向裝置雲反饋響應的一種工作機制。
命令下發後,應用可以通過API查詢命令狀態和提取命令的響應資料。
命令的執行步驟如下:
1、 應用通過API向裝置雲發送命令資料;
2、 裝置雲產生該命令的uuid作為該命令的唯一標識並嚮應用返回,同時向終端裝置轉寄命令資料;
3、 終端裝置收到命令資料後執行命令資料,可以產生響應,也可以不響應;
4、 裝置雲追蹤記錄命令的響應,如果裝置有響應,就關聯命令uuid和響應結果;
5、 應用通過API向裝置雲提取命令執行結果(API請求中攜帶命令uuid標識)。
平台介面 – 建立產品
平台介面 – 建立裝置
平台介面 – 添加資料流
平台介面 – 添加觸發器
使用者可以用觸發器對資料流進行監控,實現特定條件的事件警示,目前觸發器支援以簡訊、郵件以及使用者提供的URL地址三種途徑推送事件警示資訊。使用者事先設定好所要監控的資料流、事件觸發條件、警示資訊的接受方式,一旦監控的資料流資料滿足設定的條件,觸發器就會以設定的接受方式發送警示資訊
平台介面 – 添加應用
使用者可以為裝置下的資料流建立相關的應用,發布對使用者資料的直觀展示頁面,目前在OneNET應用孵化器中提供了曲線圖、柱狀圖、錶盤、物體位置、圖片和開關等應用,使用者添加應用進行資料展示的前提是使用者資料已經上傳至平台。
國內物聯網平台初探(八):中移物聯網開放平台OneNet