You need to prepare :
AWS Accont
Raspberry Pi
USB webcam
Camera –> AWS Greengrass IoT device –> AWS Greengrass Core –> QIoT Suite Lite –> QuAI –> AWS Greengrass Core Lambda –> AWS Cloud –> AWS S3 bucket
Install AWS Greengrass App in QNAP NAS from App center
Setup your AWS Greengrass Group & Core in QNAP AWS Greengrass App. Please refer this link for more details :
https://www.qnap.com/en/how-to/tutorial/article/how-to-setup-aws-greengrass-on-qnap-nas/
Create "SendGGImageToQIoT" & "QIoTIntegration" AWS Greengrass Lambda functions as shown below. For this Demo we are using Node.js based Lmabda function. You should also update it's configuration setting's Memeory limit and timeout. Please find Demo Lambda source codes inside this folder AWS_Greengrass_Lambda. (建立Lambda function請參考AWS說明文件 : https://docs.aws.amazon.com/greengrass/latest/developerguide/create-lambda.html)
Create a new device inside Greengrass Group Devices section as shown in the below image. Reference : https://docs.aws.amazon.com/greengrass/latest/developerguide/device-group.html
# Notes : Please keep your device certificates, unzip it and upload to your Raspberry Pi.
Prepare following 3 subscriptions lists
Greengrass IoT Device to "SendGGImageToQIoT:9" Lambda for Image Prediction. Setting infomation :
"QIoTIntegration" Lambda function to IoT Cloud for upload predicted image to S3 Bucket. Setting infomation :
Greengrass IoT Device to "QIoTIntegration:16" Lambda is trigger Lambda to start. Setting infomation :
Please refer the following image for these 3 subscriptions list source, destination and topic details
Deploy the Greengrass Group.
Verify Greengrass core daemon status in QNAP Greengrass App
Trigger the QIoTIntegration Lambda function to receive QIoT Suite Lite message. So that, you have to download AWS IoT Python SDK –> basicDiscovery.py and execute the following command. Please use GG_Camera device certificate files to trigger this Lambda function
Run this Command :
python basicDiscovery.py -e <youtiothostname>.iot.<region>.amazonaws.com -r root-ca.pem -c XXXXXXXX.cert.pem -k XXXXXXXX.private.key -n GG_Camera -m publish -t triggerLambda -M "{'status':'start'}"
Install AWSIoTPythonSDK package in your Raspberry Pi (Refer to the instructions here for installation : https://docs.aws.amazon.com/greengrass/latest/developerguide/IoT-SDK.html) and deploy the "send_image_AWSGG.py" source code from this folder RaspberryPi_side to Raspberry Pi and install capture software. Command is :
sudo apt update && sudo apt install fswebcam
開啟NAS上的Container Station
切換到 Crtare 頁面,於搜尋列搜尋 "qeekdev/aipredict"
點選 Install 進行安裝
點擊 Advanced Settings 進入進階設定頁面
切換到 Network 頁面設定Port,參考下圖設定(若您有服務與此Port相衝突到,請自行更換),完成後請點擊 Create 建立容器 :
建立完成後,位於左邊的 Overview 功能項目裡,可檢視剛建立完成的新容器,該容器功能為AI辨識照片的服務。
瀏覽器進入 http://<IP>:8082/api/v1/ 進行測試,操作結果如下 :
其他佈署資訊可參考Dockerhub上的頁面 : https://hub.docker.com/r/qeekdev/aipredict/
Create a new IoT Application in QIoT Suite Lite from the Application template file LiveDemo.json import to QIoT Suite Lite or you may create a new IoT Application by yourself. To do so, please follow following steps
# Notes : You need to install “node-red-contrib-file-upload” module to your QIoT Suite Lite Rule, Reference to : How to install other modules in QIoT Suite Lite NodeRED?
Create an IoT App and 2 Things : "cameraPi" and "AWSgreengrass"
And create Thing Resource : cameraPi–>"image" and AWSgreengrass–>"resolve"
Import rulesJson.json in Node-Red rule engine using Rules tab –> Import –> Clipboard option. After import you can see the following 2 rules flow
Verify your dashboard
點擊下圖紅框處測試 Dashboard 、 AI Sample Container 和 AWS Greengrass是否有正常運作
觀看右側Debug欄位是否有出現正常log
切換到Dashboard頁面是否有呈現數值及照片
Create MoveImageToS3 Node.js Lambda function in AWS Lambda service. (Please find Demo Lambda source codes inside this folder AWS_Greengrass_Lambda)(建立Lambda function請參考AWS說明文件 : https://docs.aws.amazon.com/greengrass/latest/developerguide/create-lambda.html)
Create a new S3 bucket "qiotquaiggdemo" in AWS S3 service (建立S3 bucket請參考AWS說明文件 : https://aws.amazon.com/s3/getting-started/?nc1=h_ls)
參考下圖修改Lambda Function中的S3 Bucket設定,依據您的AWS IAM及S3上的設定填入accessKeyId、secretAccessKey、Bucket等資訊:
Create a Act(rule) in AWS IoT to upload Image to S3 bucket using Rule's action "Invoke a Lambda function passing the message data"
Declare MoveImageToS3 in the function name drop down and update the changes
Setup the camera in Raspberry Pi device and start the program by executing the following command :
python send_image_AWSGG.py -e <host>.iot.<region>.amazonaws.com -r root.ca.pem -c <GG_Camrea_Cert_pem_file> -k GG_Camrea_Cert_private_key_file -n GG_Camera -m publish -t "cameraImage"
In QIoT Suite Lite Dashboard :
In AWS IoT Cloud :
In AWS S3 :
Camera –> QIoT Suite Lite IoT device –> QIoT Suite Lite –> QuAI –> AWS Greengrass Core Lambda –> AWS Cloud –> S3 bucket
The steps in this scenario are same as Scenario-1, just that the application running on Raspberry Pi is different. Please refer QIoT_device_QuAI_Greengrass section to setup the device.
參考步驟 :
Install dependency library and software
pip install paho-mqtt
sudo apt update && sudo apt install fswebcam
Follow in Scenario-1–> "Step-1" to "Step-5"
Upload RaspberryPi_side floder to Raspberry Pi
Download "resourceinfo.json" from QIoT Suite Lite cameraPi thing and put resourceinfo.json under the "/res" folder
Run command :
python main.py
Follow in Scenario-1–> "Step-7"
Tutorial