平臺定位
- AWS IoT是一款託管的雲平臺,使互聯設備能夠輕鬆安全地與雲應用程序及其餘設備交互。
- AWS IoT可支持數十億臺設備和數萬億條消息,而且能夠對這些消息進行處理並將其安全可靠地路由至 AWS 終端節點和其餘設備。應用程序能夠隨時跟蹤全部設備並與其通訊,即便這些設備未處於鏈接狀態也不例外。
- 使用AWS Lambda、Amazon Kinesis、Amazon S三、Amazon Machine Learning、Amazon DynamoDB、Amazon CloudWatch、AWS CloudTrail 和內置 Kibana 集成的 Amazon Elasticsearch Service 等AWS服務來構建IoT應用程序,以便收集、處理和分析互連設備生成的數據並對其執行操做,且無需管理任何基礎設施。
架構
![](http://static.javashuo.com/static/loading.gif)
與AWS IoT平臺集成的AWS服務
![](http://static.javashuo.com/static/loading.gif)
- Amazon DynamoDB—託管NoSQL數據庫
- Amazon Kinesis—大規模流式數據實時處理
- AWS Lambda—EC2雲虛擬機運行代碼響應事件
- Amazon Simple Storage Service(S3)—可擴展雲存儲
- Amazon Simple Notification—推送通知服務
- Amazon Simple Queue Service—消息隊列服務
設備SDK
![](http://static.javashuo.com/static/loading.gif)
- AWS IoT 設備 SDK 使用 MQTT、HTTP 或 WebSockets 協議將硬件設備鏈接到 AWS IoT,硬件設備無縫安全地與 AWS IoT 提供的設備網關和設備影子協做。
- 設備 SDK 支持 C、JavaScript 、Arduino、Java和Python。
- 設備 SDK 包含開源庫、帶有示例的開發人員指南和移植指南,用戶根據硬件平臺構建 IoT 產品或解決方案。
設備網關
![](http://static.javashuo.com/static/loading.gif)
- AWS IoT 設備網關支持設備安全高效地與 AWS IoT 進行通訊。設備網關可使用發佈/訂閱模式交換消息,從而支持一對一和一對多的通訊。憑藉此一對多的通訊模式,AWS IoT 將支持互連設備向多名給定主題的訂閱者廣播數據。
- 設備網關支持 MQTT、WebSocket 和 HTTP 1.1 協議,也支持私有協議。
- 設備網關可自動擴展,以支持 10 億多臺設備,而無需預配置基礎設施。
認證和受權
![](http://static.javashuo.com/static/loading.gif)
- AWS IoT 在全部鏈接點處提供相互身份驗證和加密。AWS IoT 支持 AWS 身份驗證方法(稱爲"SigV4")以及基於身份驗證的 X.509 證書。使用 HTTP 的鏈接可使用任一方法,使用 MQTT 的鏈接可使用基於證書的身份驗證,使用 WebSockets 的鏈接可使用 SigV4。
- 使用 AWS IoT 生成的證書以及由首選證書頒發機構 (CA) 簽署的證書,將所選的角色和/或策略映射到每一個證書,以便授予設備或應用程序訪問權限,或撤消訪問權限。
- 經過控制檯或使用 API 建立、部署並管理設備的證書和策略。這些設備證書能夠預配置、激活和與使用 AWS IAM 配置的相關策略關聯。
- AWS IoT 還支持用戶移動應用使用 Amazon Cognito 進行鏈接,Amazon Cognito 將負責執行必要的操做來爲應用用戶建立惟一標識符並獲取臨時的、權限受限的 AWS 憑證。
註冊表
- 註冊表將建立設備標識並跟蹤元數據,如設備的屬性和功能。
- 註冊表向格式一致的每臺設備分配惟一的標識,而無論設備的類型和鏈接方式爲什麼。此外,它還支持描述設備功能的元數據,例如傳感器是否報告溫度,以及數據是華氏度仍是攝氏度。
- 註冊表存儲有關設備的元數據,無需支付額外費用;而且須要每隔 7 天至少訪問或更新註冊表條目一次,註冊表中的元數據就不會過時。
以JSON格式存儲的設備註冊表信息sql
![](http://static.javashuo.com/static/loading.gif)
設備影子(Shadow)
![](http://static.javashuo.com/static/loading.gif)
- 設備影子保留每臺設備的最後報告狀態和指望的將來狀態,即使設備處於離線狀態。
- 經過 API 或使用規則引擎,獲取設備的最後報告狀態或設置指望的將來狀態。
- 應用程序能夠設置設備的指望將來狀態,而無需說明設備的當前狀態。AWS IoT 將比較指望將來狀態和最後報告狀態之間的差別,並命令設備"彌補差別"。
- 設備 SDK 可以輕鬆地同步其狀態及其影子,並響應經過影子設置的指望的將來狀態。
- 設備影子免費存儲設備狀態多達一年。若是至少每一年更新一次狀態,則設備影子將永久保留狀態;不然狀態將過時。
設備影子(Shadow)流程
![](http://static.javashuo.com/static/loading.gif)
設備影子(Shadow)格式
![](http://static.javashuo.com/static/loading.gif)
設備影子(Shadow)服務
設備影子服務使用MQTT話題,便於應用和設備之間的通訊,下面是相關的MQTT QoS 1話題:數據庫
$aws/things/{thingName}/shadow/update安全
$aws/things/{thingName}/shadow/get架構
$aws/things/{thingName}/shadow/delete併發
$aws/things/{thingName}/shadow/update/accepted機器學習
$aws/things/{thingName}/shadow/update/rejected函數
$aws/things/{thingName}/shadow/update/delta工具
$aws/things/{thingName}/shadow/get/accepted學習
$aws/things/{thingName}/shadow/get/rejected測試
$aws/things/{thingName}/shadow/delete/accepted
$aws/things/{thingName}/shadow/delete/rejected
設備SDK(C-SDK、JS-SDK)將影子功能內置在設備中,可以使設備與影子服務之間自動同步狀態。
規則引擎
![](http://static.javashuo.com/static/loading.gif)
- 規則引擎驗證發佈到 AWS IoT 的入站消息,並根據定義的業務規則轉換這些消息並將它們傳輸到另外一臺設備或雲服務。規則能夠應用至一臺或多臺設備中的數據,而且它能夠並行執行一個或多 個操做。
- 規則引擎還能夠將消息路由到 AWS 終端節點,包括 AWS Lambda、Amazon Kinesis、Amazon S三、Amazon Machine Learning、Amazon DynamoDB、Amazon CloudWatch 和內置 Kibana 集成的 Amazon Elasticsearch Service。外部終端節點可使用 AWS Lambda、Amazon Kinesis 和 Amazon Simple Notification Service (SNS) 進行鏈接。
- 使用相似 SQL 的語句編寫規則。例如:若是溫度讀數超出特定閾值,則它能夠觸發規則以便將數據傳輸到 AWS Lambda;若是此溫度超出其餘 5 臺設備的平均值 15%,則應採起措施。
- 規則引擎將提供數十個可用於轉換數據的可用功能,而且能夠經過 AWS Lambda 建立無限個功能。例如,若是正在處理各類不一樣的數值,則能夠取傳入數字的平均值。規則還會觸發在 AWS Lambda 中執行 Java、Node.js 或 Python 代碼,從而提供最高靈活度以及處理設備數據的能力。
規則引擎集成其它雲服務
![](http://static.javashuo.com/static/loading.gif)
規則引擎驗證發佈至AWS IoT的消息請求,基於業務規則轉換消息請求併發布至其它服務,例如:
- 富集化或過濾從設備收集的數據
- 將設備數據寫入一個亞馬遜DynamoDBm數據庫
- 保存文件至亞馬遜S3
- 發送一個推送通知到全部亞馬遜SNS用戶
- 向亞馬遜SQS隊列發佈數據
- 調用Lambda函數抽取數據
- 使用亞馬遜Kinesis處理大量的設備消息數據
- 發送數據至亞馬遜Elasticsearch服務
- 捕獲一條CloudWatch測量數據
- 更新一條CloudWatch告警
- 把一條MQTT消息數據發送至亞馬遜機器學習服務,基於亞馬遜機器學習模型進行預測
規則引擎&實時流式數據處理
![](http://static.javashuo.com/static/loading.gif)
N:1 入站的傳感器流式數據(數據降噪)
規則引擎過濾、轉換、彙總傳感器數據後,發送至亞馬遜Kinesis處理實時流式數據
Kinesis流式數據共享至其它業務系統
將流式數據的實時處理結果導入至數據庫、應用或其它亞馬遜服務
規則引擎&推送通知服務
![](http://static.javashuo.com/static/loading.gif)
推送通知
支持蘋果APNS推送通知服務、谷歌GCM雲消息服務、亞馬遜ADM設備消息服務,微軟WNS推送服務
亞馬遜SNS推送通知服務->HTTP協議終端(短信、郵件)
經過亞馬遜SNS推送通知服務,調用第三方HTTP協議終端,支持訂閱和重試
規則引擎示例 – 使用機器學習預測函數
{ "sql": "SELECT * FROM 'iot/test' where machinelearning_predict('my-model', 'arn:aws:iam::123456789012:role/my-iot-aml-role', *).predictedLabel=1", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23-beta", "actions": [{ "republish": { "roleArn": "arn:aws:iam::123456789012:role/my-iot-role", "topic": "my-mqtt-topic" } }] } |
上面是使用亞馬遜機器學習預測函數machinelearning_predict 的規則示例,其含義是:
若是機器學習預測函數處理MQTT消息後的結果是分類1,那麼從新將此消息發佈至一個話題。
設備管理
![](http://static.javashuo.com/static/loading.gif)
- 支持全球或部分地區的固件升級
- 規則引擎在DynamoDBm數據庫跟蹤升級狀態和進度
- 註冊表存儲設備的固件版本
S3管理固件分發版本
在S3中組織和保障和固件二進制文件
消息代理使用話題模式通知設備分組
通知設備分組固件更新信息,包括S3中的固件二進制文件URL地址
AWS IoT平臺接口
AWS IoT監控工具
自動化監控工具
- Amazon CloudWatch Alarms
- Amazon CloudWatch Logs
- Amazon CloudWatch Events
- AWS CloudTrail Log Monitoring
手工監控工具
-
AWS IoT 儀表盤
-
CloudWatch首頁
- CloudWatch
- 自定義儀表盤
- 自定義圖表進行排障和監控趨勢
- 搜索全部AWS資源指標
- 建立和修改告警參數
AWS IoT 初學者工具包
- AWS IoT 初學者工具包旨在幫助進行原型開發和安全地鏈接 AWS IoT。
- 工具包內含開發微控制器開發板、傳感器和執行器、AWS IoT 設備 SDK 以及入門指南。
![](http://static.javashuo.com/static/loading.gif)
AWS IoT 初學者工具包 - 支持的平臺
![](http://static.javashuo.com/static/loading.gif)
AWS IoT生態
![](http://static.javashuo.com/static/loading.gif)
開發示例 - AWS IoT 按鈕
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
建立設備
![](http://static.javashuo.com/static/loading.gif)
設備屬性
![](http://static.javashuo.com/static/loading.gif)
建立證書
![](http://static.javashuo.com/static/loading.gif)
激活證書
![](http://static.javashuo.com/static/loading.gif)
建立策略
![](http://static.javashuo.com/static/loading.gif)
綁定證書與策略
![](http://static.javashuo.com/static/loading.gif)
綁定證書與設備
![](http://static.javashuo.com/static/loading.gif)
配置設備
![](http://static.javashuo.com/static/loading.gif)
使用MQTT客戶端訂閱設備消息
![](http://static.javashuo.com/static/loading.gif)
使用MQTT客戶端查看設備消息
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
建立短信推送話題並訂閱此話題
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
建立規則
![](http://static.javashuo.com/static/loading.gif)
建立規則的行爲
![](http://static.javashuo.com/static/loading.gif)
測試訂閱是否成功