部署一個端到端的IoT應用

      網友投稿 1021 2022-05-30

      實驗概述:

      本實驗的目的是將終端設備安全的連接到 IoT Core平臺上,還展示了用戶如何在設備和IoT Core之間使用MQTT協議發布/訂閱消息。本次實驗絕大部分使用命令行,當然你也可以使用控制臺界面完成。本實驗還會利用規則引擎構建 IoT 應用程序,將消息收集、處理和分析并針對數據執行操作,且無需管理任何基礎設施。

      最終架構如下:

      部署一個端到端的IoT應用

      當Sensor發出消息,通過規則引擎(rule engine)過濾數據并觸發 Simple Notification Service以郵件的方式提醒用戶溫度和濕度異常。同時通過另外一條規則引擎存儲過濾后的數據并通過Kibana進行展現。

      前提條件:

      使用具有 admin 權限的用戶登陸AWS控制臺。

      啟動一臺 Linux EC2 實例作為模擬的IoT設備。在 EC2 實例上使用 Configure 命令配置好默認 Region 為 cn-north-1。在 Console 上賦予這臺 EC2 實例一個具有足夠權限的 Role,測試中可以直接用admin權限。

      實驗涵蓋:

      創建一個Thing

      創建證書和策略

      部署 Device SDK

      部署和執行應用程序

      創建規則引擎Rule Engine

      創建Simple Notification Service(SNS)

      添加SNS推送通知

      創建Elasticsearch Service

      設計Kibana報表

      實驗說明:

      涉及組件:

      IoT Core

      EC2

      S3

      Simple Notification Service

      Elasticsearch Service

      實驗流程

      環境準備

      在 上創建 IoT Thing

      運行 IoT 設備端程序

      驗證消息訂閱發布是否成功

      創建并配置 Simple Notification Service

      創建并配置 Elasticsearch Service

      報表Kibana設計

      環境準備:

      1.登陸 EC2 實例,下載應用程序和device-SDK包。

      $?aws?configure?#輸入你的AK,SK?Default?region:cn-north-1 $?wget?https://lqtestota02.s3.cn-north-1.amazonaws.com.cn/sensor-emulator.zip $?unzip?-o?-d?/home/ec2-user?sensor-emulator.zip

      2.安裝 node.js

      $?curl?-o-?https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh?|?bash $?.?~/.nvm/nvm.sh $?nvm?install?node

      創建 IOT thing:

      1.創建 IoT thing:

      $?aws?iot?create-thing?--thing-name?aws-iot-demo #記錄下輸出中的?thingArn,后面會用到。 { ????"thingArn":?"arn:aws-cn:iot:cn-north-1:408221054609:thing/aws-iot-demo?",? ????"thingName":?"?aws-iot-demo",? ????"thingId":?"35e3e6ab-da11-489f-8375-196427cb61f4" }

      2.下載? IoT 根證書,創建 IoT 設備證書和密鑰,記錄下生成的 certificateArn:

      $?pwd /home/ec2-user/ $?cd?utils $?rm?root-CA.crt $?wget?https://www.amazontrust.com/repository/AmazonRootCA1.pem $?mv?AmazonRootCA1.pem?root-CA.crt $?aws?iot?create-keys-and-certificate?\???? ????--certificate-pem-outfile?"certificate.pem.crt"?\???? ????--public-key-outfile?"public.pem.key"?\???? ????--private-key-outfile?"private.pem.key" #從上一步的命令輸出中記錄下自己的證書Arn,?后面的命令中會用到 #example:? "certificateArn":?"arn:aws-cn:iot:cn-north-1:408221054609:cert/661bdfb4f083bf58607ac1a54904162e0f91f542e9969b58ee10136ded565925"

      3.創建一個 IoT Policy,掛載給證書并激活證書:

      $?cd?..? $?pwd /home/ec2-user/ #?編寫一個?policy?文檔,復制以下JSON格式的策略并保存為?iot-policy.json?文件 $?vi?iot-policy.json?? { ??"Version":?"2012-10-17", ??"Statement":?[ ????{ ??????"Effect":?"Allow", ??????"Action":?[ ????????"iot:Publish", ????????"iot:Subscribe", ????????"iot:Connect", ????????"iot:Receive" ??????], ??????"Resource":?[ ????????"*" ??????] ????} ??] } #?創建?iot?policy $?aws?iot?create-policy?--policy-name?IoTdemo-policy?--policy-document?file://iot-policy.json #?掛載?policy?到之前創建的?IoT?設備證書上,注意這里的?--target?替換成自己的證書Arn $?aws?iot?attach-policy?\???? ????--policy-name?IoTdemo-policy?\???? ????--target?"arn:aws-cn:iot:cn-north-1:408221054609:cert/661bdfb4f083bf58607ac1a54904162e0f91f542e9969b58ee10136ded565925"??? #?激活證書,注意?--certificate-id?替換成自己證書的id $?aws?iot?update-certificate?--certificate-id?661bdfb4f083bf58607ac1a54904162e0f91f542e9969b58ee10136ded565925?--new-status?ACTIVE #?Attach?thing?到證書,其中?--principal?是自己證書的?Arn $?aws?iot?attach-thing-principal?--thing-name?aws-iot-demo?--principal?arn:aws-cn:iot:cn-north-1:408221054609:cert/661bdfb4f083bf58607ac1a54904162e0f91f542e9969b58ee10136ded565925

      4.配置并執行Emulator的js程序:

      #?查看自己的IoT?Endpoint $?aws?iot?describe-endpoint?--endpoint-type?iot:Data-ATS{ ????"endpointAddress":?"a1hk0pcc0rk07l.ats.iot.cn-north-1.amazonaws.com.cn"} #?更新自己的iot-properties.file的證書路徑和其他信息 $?cd?utils nano?iot-properties.file host?=?a25d8uxf2d5pq.ats.iot.cn-north-1.amazonaws.com.cn port?=?8883clientId?=?aws-iot-demo thingName?=?aws-iot-demo caPath?=?./utils/root-CA.crt certPath?=?./utils/certificate.pem.crt keyPath?=?./utils/private.pem.key region?=?cn-north-1#?保存退出 Ctrl+X Y Enter #?執行Emulator?Node.js?應用程序 $?cd?/home/ec2-user? $?node?temp-sensor.js #?執行后的輸出類似于:

      5.訂閱一個主題Topic

      轉到 IoT管理控制臺,選擇測試,訂閱主題為:temp_readings

      Code Review:

      可以通過修改參數和變量來控制發送數據的維度和間隔時間:默認是 每間隔3秒(3000)發送4個維度的3條數據。

      var?awsIot?=?require('aws-iot-device-sdk');var?Faker?=?require('Faker');var?PropertiesReader?=?require('properties-reader'); var?properties?=?PropertiesReader('./utils/iot-properties.file');??const?device?=?awsIot.device({ ??"host":???????properties.get('host'), ??"port":???????properties.get('port'), ??"clientId":???properties.get('clientId'), ??"thingName":??properties.get('thingName'), ??"caPath":?????properties.get('caPath'), ??"certPath":???properties.get('certPath'), ??"keyPath":????properties.get('keyPath'), ??"region":?????properties.get('region')});???? device.on('connect',?function()?{??console.log('\n===========Emulating?Sensor?Data=================\n');? ??setInterval(function?()?{ ?????????for?(i=2;?i>=0;?i--)?{ ????????????//Generate?Random?Sensor?Data???????? ????????????var?temperature?=?Math.floor((Math.random()?*?110)?+?1); ????????????var?deviceId?=?Math.floor((Math.random()?*?5000)?+?1); ????????????var?IP?=??Faker.Internet.ip(); ????????????var?humidity?=?Math.floor((Math.random()?*?100)?+?1);?????? ????????????console.log('deviceId=?'?+?deviceId?+?'?temperature=?'?+?temperature?+?'?humidity='?+?humidity?+?'?IP='?+?IP?);? ????????????device.publish('temp_readings',?JSON.stringify?(?? ??????????????????????????{??"deviceId"?:?deviceId,? ?????????????????????????????"temperature"?:?temperature,?????????? ?????????????????????????????"deviceIP"?:?IP, ?????????????????????????????"humidity"?:?humidity????????? ??????????????????????????}???????????? ????????????));????? ???????}?? ???},?3000); ?????});

      在實際生產環境中MCU或SoC多數都是以C語言開發為主,所以您可以使用device SDK 基于embedded-C 去進行設備端應用開發,請參考:

      現在我們成功模擬設備端通過MQTT安全的將消息發布到平臺,下一步我們將利用 IoT的托管服務與其他數據服務集成,實現消息的展現,處理與分析。

      創建并配置Simple Notification Service

      1.在 控制臺中搜索SNS服務,創建一個名為 IoTDemo的主題,并創建一個訂閱,訂閱協議為email,終結點為email地址。

      郵件驗證通過后,您會收到一個訂閱的郵件,請點擊訂閱。這里就不再贅述。

      2.在 IoT控制臺的導航窗格中,選擇行動Act。

      3.創建Email的規則,如下圖:

      定義規則查詢語句,select * from ‘temp_readings’ where temperature > 60 and humidity < 30。

      這個查詢語句您也可以自定義,SELECT FROM WHERE . 例如:SELECT temperature FROM ‘iot/topic’ WHERE temperature > 50。

      在設置一個或多個操作中添加SNS推送通知,確保該角色有足夠的權限。

      添加操作并創建規則

      4.返回到模擬設備的EC2,執行js 應用程序

      # 執行Emulator Node.js 應用程序?$ cd /home/ec2-user $ node temp-sensor.js?# 執行后的輸出類似于:

      5.驗證郵件通知,你會收到滿足規則所定義的溫度大于60濕度小于30的郵件通知。select * from ‘temp_readings’ where temperature > 60 and humidity < 30

      6.停止模擬程序的運行,不然會收到太多的郵件。

      創建并配置Amazon Elasticsearch Service

      1.在控制臺搜索elasticsearch Service并創建配置集群。由于是測試,就選擇開發和測試環境就好。

      2.配置集群選擇默認配置就好,取一個Elasticsearch 域名,比如awsiotdemo01。

      3.設置訪問權限,網絡配置要設置為 公有訪問權限。因為Elasticsearch 規則操作不支持 VPC Elasticsearch 集群。如下圖:

      4.通過 IoT規則引擎添加規則,具體方法與設置Email規則類似,不再贅述。

      這里,將溫度大于60的消息都存儲到ElasticSearch中。

      select * from ‘temp_readings’ where temperature > 60

      5.設置或多個操作中,添加操作 ElasticSearch,如下:

      6.設計和配置Kibana報表,在設計報表之前,先回到 IoT控制臺 行動Act中禁用Email的規則(為避免收到大量郵件,另外一會兒要通過Kibana Get topic/_search驗證數據是否成功接收到)。

      7.在EC2的模擬器中執行js 應用程序。

      8.找到Kibana入口,

      9.驗證數據是否接收成功,在Console輸入以下代碼并執行:

      GET?temp_readings/_search { ??"query":?{ ????"match_all":?{} ??} }

      10.設置index為topic的名字

      11.在visualize中設計報表,消息的維度一共是四個,分別為deviceId、temperature、deviceIP、humidity。根據個人喜好定義維度所在的X和Y軸即可。

      總結:

      您可以充分利用托管服務,將數據ETL和展現與托管服務 DynamoDB、Lambda、 Elastic Search、 SNS 和? S3 等輕松集成進來。而 IoT 規則由 SQL SELECT 語句、主題篩選條件和規則操作組成。設備通過將消息發布到 MQTT 主題來向? IoT 發送信息。利用 SQL SELECT 語句,您可以從傳入的 MQTT 消息提取數據。后面我們會有更多Hands on的Blog。比如如何通過Job進行OTA升級,如何通過設備管理來管理設備,如何集成智能語音服務Alexa,如何利用邊緣計算服務GreenGrass與Machine Learning結合等等。

      軟件開發 人工智能 云計算 機器學習

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Java基礎 第五節 第七課
      下一篇:Django權限系統auth模塊詳解
      相關文章
      久久久青草青青亚洲国产免观| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲国产成人久久综合碰| 亚洲乱码在线卡一卡二卡新区| 亚洲五月激情综合图片区| 亚洲国产成人高清在线观看 | 亚洲日本在线观看视频| 国产亚洲精品2021自在线| 国产精品无码亚洲精品2021| 亚洲av日韩aⅴ无码色老头| 亚洲色大成网站www永久网站 | 国产亚洲成av人片在线观看| 亚洲中文字幕日产乱码高清app| 国产精品亚洲玖玖玖在线观看 | 亚洲综合久久一本伊伊区| 亚洲ts人妖网站| 亚洲国产日产无码精品| 亚洲国产精品成人精品软件| 亚洲国产成a人v在线| 亚洲一区精彩视频| 亚洲一日韩欧美中文字幕在线 | 亚洲AV日韩精品久久久久| 亚洲视频中文字幕| 亚洲欧洲精品视频在线观看| 亚洲制服丝袜中文字幕| 亚洲一区二区三区国产精华液| 亚洲变态另类一区二区三区| 男人的天堂av亚洲一区2区| mm1313亚洲精品无码又大又粗 | 亚洲午夜一区二区电影院| 亚洲综合丁香婷婷六月香| 亚洲а∨精品天堂在线| 亚洲国产精品专区在线观看| 日日噜噜噜噜夜夜爽亚洲精品| 亚洲国产成人片在线观看无码| 亚洲综合视频在线观看| 亚洲中文字幕日本无线码| 无码一区二区三区亚洲人妻| 久久99亚洲综合精品首页 | 亚洲中文字幕一区精品自拍| 久久精品熟女亚洲av麻豆|