物聯網(IoT)應用程序的設計有望產生大量數據,以便通過可操作的信息填充云。然而,對于大多數物聯網開發人員而言,將數據流式傳輸到云并理解它需要專家級的數據交換和分析技術理解。
沒有簡單的方法可以實時深入分析數據流消息來源,物聯網開發人員可能會發現自己很難理解數據質量問題對其應用程序整體功能性能的影響。
為了幫助解決這個問題,Initial State Technologies提供了一種開發人員可以輕松使用的分析服務深入了解物聯網設備數據。然后,他們可以將其轉換為可在桌面或移動設備上訪問的有用信息。
對嵌入式分析的需求
對于任何物聯網應用,其用戶感興趣的產品是從附加到個人,設備或結構的傳感器節點生成的數據流導出的可操作信息。在物聯網開發人員面臨的挑戰中,對這些數據流的驗證需要能夠可視化和測量數據本身。
為此,物聯網應用程序開發人員可以利用越來越多的基于云的服務來將原始數據轉換為所需的結果。在這些數據處理工作流程中,數據分析為人類提供了一種關鍵能力,使他們能夠了解數據的性質,以確保其質量,并識別工作流程中無法預料的有用事件或異常。
對于開發人員,物聯網數據分析帶來了一系列全新的需求,超出了Web開發人員熟悉的需求。雖然后者通常需要離線批處理大型日志文件,但物聯網數據分析將大型數據存儲庫(“大數據”)與“快速數據”相結合。為了有效,物聯網應用程序必須實時處理大量數據流以對現實事件做出反應。
企業級概念(如lambda架構和Apache Storm和Spark等工具)已經出現,為將數據分析構建到大規模物聯網應用程序的工作流程中。但是,對于大多數開發組織而言,構建這些平臺和創建自己的數據分析解決方案所需的時間和資源充其量只能分散注意力。因此,物聯網開發人員可能會忽略數據分析,期望數據源是“已知良好”的資源,而后端代碼將捕獲任何問題。
事實上,物聯網應用程序開發人員面臨越來越多的脫節可用數據量與輕松部署的分析功能之間的關系,用于調試物聯網應用程序以及向用戶提供有用信息。
初始狀態通過軟件即服務(SaaS)解決了這一重要差距)解決方案使物聯網開發人員可以在任何應用程序中部署實時分析。通過僅添加幾行代碼,開發人員(或客戶)可以使用包含一組特定流或事件的圖形顯示的可自定義儀表板來顯示物聯網數據。
探索數據流的詳細信息,Initial States'Waves工具形成一個交互式波形查看器,允許用戶放大數據流。該公司的Lines工具用作多波形分析儀。與其頂級前身一樣,這款基于云的工具可讓開發人員實時檢查,比較和測量多個信號波形(圖1)。
圖1:初始狀態平臺以多種格式呈現數據流,包括分析復雜物聯網數據所需的多波形顯示。 (圖片來源:Initial State Technologies)
SaaS解決方案
與任何SaaS軟件包一樣,Initial State維護云中的服務資源,并提供簡單的流媒體應用程序編程接口(API)數據。開發人員使用傳統的Web GET和POST協議將數據流式傳輸到“事件存儲桶”,后者在初始狀態平臺中提供存儲資源。
開發人員可以使用簡單的GET請求來創建存儲桶:
<跨度>復制 <代碼>
https://groker.initialstate.com/api/buckets?accessKey=myAccessKey&bucketKey=myBucketKey&bucketName=myBucketName
正如此請求所示,每個存儲桶都是使用開發人員的初始狀態私有訪問密鑰(由注冊時的初始狀態提供)和唯一存儲桶密鑰(由創建存儲桶的工程師提供)的組合來標識的。該公司還為企業客戶提供更細粒度的身份驗證級別。在創建事件存儲桶時,開發人員還可以提供可選的存儲桶名稱,稍后用于在各種初始狀態圖形顯示中識別來自該存儲桶的數據。
初始狀態將數據存儲為鍵:值對。因此,開發人員可以使用相同類型的GET請求來存儲多個事件(例如,使用鍵eventKeyN和值eventValueN):
復制
https://groker.initialstate.com/api/events?accessKey=myAccessKey&bucketKey=myBucketKey&eventKey0=eventValue0&eventKey1=eventValue1&eventKey2=eventValue2
合并物聯網數據很簡單:開發人員可以通過將數據從每個源流式傳輸到相同的存儲桶來組合來自不同來源的數據,這些存儲桶由accessKey和bucketKey的全局唯一組合標識。
開發人員還可以使用常用實用程序創建存儲桶和流數據作為curl發出POST請求。在這種情況下,身份驗證密鑰(accessKey和bucketKey)在請求標頭中傳遞,數據鍵:值對在POST主體中以JSON格式傳遞,如下所示:
復制 <代碼>
https://groker.initialstate.com/api/events
內容類型:應用/JSON
X-IS-ACCESSKEY:myAccessKey
X-IS-BucketKey:myBucketKey
接受版本:?0
[
{
“鍵“:”溫度“,
“value”:“1”,
“epoch”:1419876021.778477
},
{
“key” :“溫度”,
“值”:“2”,
“epoch”:1419876022.778477
}
]
正如此POST請求所示,來自單個傳感器(例如溫度)的多個數據實例用相同的鍵表示。紀元值是標準Unix時間表示中提供的傳感器讀數的事件時間戳。因此,開發人員可以使用適當的密鑰為每個傳感器源輕松地從單個傳感器構建基于時間的數據流,或者為多個傳感器傳輸基于時間的數據。
而不是為每個事務構建原始http請求,開發人員可以利用Initial State或Initial State開發人員社區提供的C,Java,Node.js和Python庫。例如,C庫使用Libcurl發出POST請求,并提供兩個函數create_bucket和stream_event,其參數直接對應于前面描述的原始GET和POST請求中使用的鍵和數據:
int create_bucket(char * access_key,char * bucket_key,char * bucket_name);
int stream_event(char * access_key,char * bucket_key,char * json);
分析部署
Initial State SaaS分析解決方案為新興的現成物聯網開發套件提供了現成的補充。例如,Connected Cellular BeagleBone IoT開發套件提供了一個快速實現IoT蜂窩無線節點的平臺。除了完整的蜂窩電話包外,該套件還包括BeagleBone Black板,采用基于德州儀器(TI)ARM?Cortex?-A8的AM335x處理器和多種擴展接口,包括以太網和USB。開發人員可以通過Seeed Technology提供的Grove斗篷板將易于使用的Grove兼容傳感器連接到電路板,從而真正支持各種傳感應用(圖2)。
圖2:使用Connected Cellular BeagleBone物聯網開發套件,物聯網開發人員只需插入與Grove兼容的傳感器(如此處所示的光傳感器)即可添加傳感器功能。 (圖片來源:Initial State Technologies)
開發人員可以簡單地將分析插入到他們的IoT應用程序中。在連接到BeagleBone Black板之后,開發人員可以安裝初始狀態庫,例如ISStreamer Python模塊。實際上,Initial State為模塊提供了安裝腳本,避免了由于不正確的安裝過程導致的常見問題。因此,安裝只需要運行安全下載腳本的shell腳本(在帶有反斜杠的curl命令之前以確保使用正確的二進制文件)并使用bash執行下載的腳本:
$ curl -sSL https://get.initialstate.com/python -o - | sudo bash
軟件工程師會創建一個存儲桶,其中包含一行Python代碼添加到他們在板上運行的Python腳本中:
stream = Streamer( access_key =“myAccessKey”,bucket_key =“myBucketKey”)
通過調用流對象的log方法來流式傳輸數據值。因此,工程師會通過重復調用 stream.log(key,value,epoch)來將數據流式傳輸到Initial State服務。
實際上,Initial State提供了一個示例構建Python應用程序以支持Connected Cellular BeagleBone IoT Kit。在軟件例程中,示例應用程序演示了一種基本設計模式,用于設置從電路板的模數轉換器(ADC)捕獲的數據流和流光傳感器值(清單1)。在這種情況下,應用程序將讀數作為主觀級別進行傳輸,相應地將其顯示為相關儀表板中的圖塊(圖3)。
復制
#Read from light sensor
從導入時間
導入Adafruit_BBIO.ADC作為ADC
從ISStreamer.Streamer導入Streamer
#Initialize the streamer
streamer = Streamer(bucket_name =“BBB Readings”,bucket_key =“myBucketKey”,access_key =“myAccessKey”)
pin =“AIN2”
< p>
ADC.setup()
雖然為True:
value = ADC.read_raw(pin)
如果值<= 250:
level =“dim”
如果251 <=值<= 500:
level =“average”
如果501 <=值<= 800:
level =“bright”
如果值> 800:
level =“非常明亮”
打印值
#Stream值
流光。 log(“:level_slider:Sensor Reading”,value)
打印級別
#Stream the level
streamer.log(“:bulb:Brightness”,級別)
#Sleep 1分鐘
睡眠(60)
清單1:初始狀態示例Python應用程序Connected Cellular BeagleBone物聯網套件演示了一種簡單的技術,用于獲取傳感器數據并將其傳輸到事件桶。 (代碼來源:初始狀態技術)
圖3:初始狀態平臺允許開發人員創建每個顯示分析的圖形窗口或圖塊的儀表板源自各個IoT數據流。 (圖像來源:初始狀態技術)
可擴展性和擴展
開發人員可以擴展此基本模式,以實時監控和探索數據流,并設置觸發器以觸發文本消息或電子郵件給用戶。相同的機制還可以向外部服務發送通知,例如Amazon Web Service的簡單隊列服務(SQS)。 AWS SQS提供可由其他分布式服務使用的基于云的消息隊列。使用這些類型的服務,開發人員可以使用自定義服務輕松擴展其初始狀態部署,以創建功能強大,復雜的數據處理工作流。
相反,開發人員可以將分析功能添加到已將數據泵入某個現有外部池的現有IoT應用程序工作流中。例如,工程師可以使用基于云的服務(如AWS Lambda)定期從現有的IoT數據池流式傳輸數據。
AWS Lambda提供了一種無響應的機制,用于執行代碼片段以響應外部事件,因此開發人員無需進一步加載現有IoT應用程序資源即可部署分析。使用這種方法,可以將Lambda函數設置為定期激活并執行基本POST請求以流式傳輸數據(清單2)。
復制
//將數據發送到初始狀態
函數sendToInitialState(accessKey,data,callback){
const req = https.request({
hostname:'groker.initialstate .com',
port:'443',
路徑:'/api/events',
方法:'POST',
標題:{
'X-IS-AccessKey':accessKey,
'X-IS-BucketKey':ISBucketKey,
'內容 - 輸入':'application/json',
'Accept-Version':'?0'
}
},(res)=> {
讓body ='';
console.log('狀態:',res。 statusCode);
console.log('標題:',JSON.stringify(res.headers));
res.setEncoding('utf8');
< p> res.on('data',(chunk)=> body + = chunk);
res.on('end',()=> {
console。 log('成功處理的HTTPS響應');
//如果我們知道它是JSON,解析它
if(res.headers ['content-type'] ===' application/json'){
body = JSON.parse(body);
}
callback(null,body);
});
});
req.on('error',callback);
req.end(JSON.stringify(data) ));
}
物聯網開發人員希望看到他們的應用程序隨著客戶接受度的提高而迅速擴展,而且Initial State希望其服務隨應用程序一起擴展。該服務構建于AWS之上,利用專門設計的AWS功能進行擴展,以支持大量流,并在這些流中支持非常高的數據速率。此外,為了確保持續可用性,跨AWS可用區復制事件存儲桶(地理區域內不同數據中心的物理多樣性)。企業客戶可以利用跨AWS區域的復制(位于不同地理區域的數據中心的全球規模多樣性)。
結論
顯示原始或轉換的IoT數據的能力實時在幫助開發人員了解數據質量和為用戶提供物聯網應用程序本身的核心功能方面發揮著關鍵作用。雖然存在實施物聯網數據分析的機制,但實現合適的可視化功能的能力可能會分散或延遲項目。 Initial State Software-as-a-Service平臺提供了一種在物聯網應用程序中部署實時數據分析的簡單方法。使用此服務,物聯網開發人員可以調試來自多個來源的數據流,并更輕松地向最終用戶提供實時信息顯示。
-
傳感器
+關注
關注
2552文章
51288瀏覽量
755126 -
存儲
+關注
關注
13文章
4337瀏覽量
85992 -
物聯網
+關注
關注
2911文章
44824瀏覽量
375082
發布評論請先 登錄
相關推薦
評論