1. 程式人生 > >國外物聯網平臺(1):亞馬遜AWS IoT

國外物聯網平臺(1):亞馬遜AWS IoT

國外物聯網平臺(1)
——亞馬遜AWS IoT

馬智

平臺定位

  • AWS IoT是一款託管的雲平臺,使互聯裝置可以輕鬆安全地與雲應用程式及其他裝置互動。
  • AWS IoT可支援數十億臺裝置和數萬億條訊息,並且可以對這些訊息進行處理並將其安全可靠地路由至 AWS 終端節點和其他裝置。應用程式可以隨時跟蹤所有裝置並與其通訊,即使這些裝置未處於連線狀態也不例外。
  • 使用AWS Lambda、Amazon Kinesis、Amazon S3、Amazon Machine Learning、Amazon DynamoDB、Amazon CloudWatch、AWS CloudTrail 和內建 Kibana 整合的 Amazon Elasticsearch Service 等AWS服務來構建IoT應用程式,以便收集、處理和分析互連裝置生成的資料並對其執行操作,且無需管理任何基礎設施。

架構

與AWS IoT平臺整合的AWS服務

  • Amazon DynamoDB—託管NoSQL資料庫
  • Amazon Kinesis—大規模流式資料實時處理
  • AWS Lambda—EC2雲虛擬機器執行程式碼響應事件
  • Amazon Simple Storage Service(S3)—可擴充套件雲端儲存
  • Amazon Simple Notification—推送通知服務
  • Amazon Simple Queue Service—訊息佇列服務

裝置SDK

  • AWS IoT 裝置 SDK 使用 MQTT、HTTP 或 WebSockets 協議將硬體裝置連線到 AWS IoT,硬體裝置無縫安全地與 AWS IoT 提供的裝置閘道器和裝置影子協作。
  • 裝置 SDK 支援 C、JavaScript 、Arduino、Java和Python。
  • 裝置 SDK 包含開源庫、帶有示例的開發人員指南和移植指南,使用者根據硬體平臺構建 IoT 產品或解決方案。

裝置閘道器

  • AWS IoT 裝置閘道器支援裝置安全高效地與 AWS IoT 進行通訊。裝置閘道器可以使用釋出/訂閱模式交換訊息,從而支援一對一和一對多的通訊。憑藉此一對多的通訊模式,AWS IoT 將支援互連裝置向多名給定主題的訂閱者廣播資料。
  • 裝置閘道器支援 MQTT、WebSocket 和 HTTP 1.1 協議,也支援私有協議。
  • 裝置閘道器可自動擴充套件,以支援 10 億多臺裝置,而無需預配置基礎設施。

認證和授權

  • 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格式儲存的設備註冊表資訊

裝置影子(Shadow)

  • 裝置影子保留每臺裝置的最後報告狀態和期望的未來狀態,即便裝置處於離線狀態。
  • 通過 API 或使用規則引擎,獲取裝置的最後報告狀態或設定期望的未來狀態。
  • 應用程式可以設定裝置的期望未來狀態,而無需說明裝置的當前狀態。AWS IoT 將比較期望未來狀態和最後報告狀態之間的差異,並命令裝置"彌補差異"。
  • 裝置 SDK 能夠輕鬆地同步其狀態及其影子,並響應通過影子設定的期望的未來狀態。
  • 裝置影子免費儲存裝置狀態多達一年。如果至少每年更新一次狀態,則裝置影子將永久保留狀態;否則狀態將過期。

裝置影子(Shadow)流程

裝置影子(Shadow)格式

裝置影子(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)將影子功能內建在裝置中,能夠使裝置與影子服務之間自動同步狀態。

規則引擎

  • 規則引擎驗證釋出到 AWS IoT 的入站訊息,並根據定義的業務規則轉換這些訊息並將它們傳輸到另一臺裝置或雲服務。規則可以應用至一臺或多臺裝置中的資料,並且它可以並行執行一個或多 個操作。
  • 規則引擎還可以將訊息路由到 AWS 終端節點,包括 AWS Lambda、Amazon Kinesis、Amazon S3、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 程式碼,從而提供最高靈活度以及處理裝置資料的能力。

規則引擎整合其它雲服務

規則引擎驗證釋出至AWS IoT的訊息請求,基於業務規則轉換訊息請求併發布至其它服務,例如:

  • 富集化或過濾從裝置收集的資料
  • 將裝置資料寫入一個亞馬遜DynamoDBm資料庫
  • 儲存檔案至亞馬遜S3
  • 傳送一個推送通知到所有亞馬遜SNS使用者
  • 向亞馬遜SQS佇列釋出資料
  • 呼叫Lambda函式抽取資料
  • 使用亞馬遜Kinesis處理大量的裝置訊息資料
  • 傳送資料至亞馬遜Elasticsearch服務
  • 捕獲一條CloudWatch測量資料
  • 更新一條CloudWatch告警
  • 把一條MQTT訊息資料傳送至亞馬遜機器學習服務,基於亞馬遜機器學習模型進行預測

規則引擎&實時流式資料處理

N:1 入站的感測器流式資料(資料降噪)

規則引擎過濾、轉換、彙總感測器資料後,傳送至亞馬遜Kinesis處理實時流式資料

Kinesis流式資料共享至其它業務系統

將流式資料的實時處理結果匯入至資料庫、應用或其它亞馬遜服務

規則引擎&推送通知服務

推送通知

支援蘋果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,那麼重新將此訊息釋出至一個話題。

裝置管理

  • 支援全球或部分地區的韌體升級
  • 規則引擎在DynamoDBm資料庫跟蹤升級狀態和進度
  • 登錄檔儲存裝置的韌體版本

S3管理韌體分發版本

在S3中組織和保障和韌體二進位制檔案

訊息代理使用話題模式通知裝置分組

通知裝置分組韌體更新資訊,包括S3中的韌體二進位制檔案URL地址

AWS IoT平臺介面

  • AWS Command Line Interface (AWS CLI)
    • 在Windows、Mac和Linux執行AWS IoT命令
  • AWS SDKs
    • 使用特定語言API開發IoT應用
  • AWS IoT API
    • 使用HTTP或者HTTPS請求開發IoT應用
  • AWS IoT Thing SDK for C
    • 在資源受限的裝置上開發IoT應用,如MCU

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 以及入門指南。

AWS IoT 初學者工具包 - 支援的平臺

AWS IoT生態

開發示例 - AWS IoT 按鈕

建立裝置

裝置屬性

建立證書

啟用證書

建立策略

繫結證書與策略

繫結證書與裝置

配置裝置

使用MQTT客戶端訂閱裝置訊息

使用MQTT客戶端檢視裝置訊息

建立簡訊推送話題並訂閱此話題

建立規則

建立規則的行為

測試訂閱是否成功