Trong các bài trước, mình đã hướng dẫn các bạn cách tạo ứng dụng IoTs với AWS IoT Core và ESP32, các bạn có thể xem chuỗi bài hướng dẫn được tổng hợp tại đây. Trong bài viết này mình sẽ hướng dẫn các bạn cách thực hiện chức năng gửi cảnh báo (push notification) qua Email sử dụng dịch vụ Amazon SNS, đây cũng là tính năng rất cần thiết trong các hệ thống IoT.
1. Tổng quan quy trình thực hiện:
- Thiết bị (Device) sau khi kết nối đến AWS IoT sẽ gửi gói tin cảnh báo đến một Topic trong Amazon SNS thông qua SNS Rule được tạo sẵn.
- Khi gói tin cảnh báo được gửi đến Amazon SNS Topic, dịch vụ Amazon SNS sẽ chuyển tiếp tin cảnh báo đế Email đã được đăng ký trước đó.
2. Giới thiệu dịch vụ Amazon SNS:
Amazon Simple Notification Service (Amazon SNS) là một dịch vụ của AWS giúp phân phối và quản lí việc gửi tin nhắn (message) đến các điểm cuối (enpoint) hoặc các khách hàng (client) đã đăng kí đến Amazon SNS Topic.
Amazon SNS hoạt động theo mô hình publish/subscribe, vì vậy có 2 loại client tương tác với dịch vụ này là publisher (bên gửi) và subscriber (bên nhận). Quá trình gửi và nhận tin được thực hiện theo cơ chế bất đồng bộ, các publisher sẽ thực hiện gửi tin đến một điểm cuối đóng vai trò kênh liên lạc gọi là topic, các subscriber (có thể là địa chỉ email, web server hay các dịch vụ khác của AWS như Amazon SQS, Labda,…) sẽ nhận thông báo bằng cách sử dụng một trong các giao thức được hỗ trợ như HTTP/S, email, SMS, Amazon SQS,…
Khi sử dụng SNS, chúng ta cần tạo topic và thực hiện kiểm soát quyền truy cập vào topic bằng cách định nghĩa các policy (chính sách) để xác định các publisher và subscriber có thể giao tiếp với topic được tạo. Mỗi topic sẽ có một tên định danh duy nhất xác định điểm cuối để các client thực hiện publish/subscribe gọi là địa chỉ ARN.
3. Gửi cảnh báo qua Email
Tạo SNS Topic:
- Đăng nhập vào tài khoản AWS và mở Amazon SNS Console. Tại khung menu bên trái, chọn Topics
- Chọn Create Topic
- Nhập tên Topic tại trường Name, sau đó nhấn Create topic
- Lưu lại ARN của Topic vừa tạo để sử dụng ở bước subcribe kế tiếp.
Subscribe đến SNS Topic
- Trong Amazon SNS console, chọn Create Subscription
- Tiếp theo nhập các thông tin cần thiết vào các trường:
- Topic ARN: ARN của SNS Topic vừa tạo ở bước phía trên.
- Protocol: nhập loại giao thức tương ứng với điểm cuối cần nhận cảnh báo, ở đây ta chọn Email.
- Endpoint: Nhập tên địa chỉ Email để Amazon SNS gửi tin nhắn đến khi có tin nhắn đến Topic đã đăng ký.
- Chọn Create subscription.
- Như vậy là chúng ta đã tạo thành công một subscription để nhận message từ SNS Topic có tên SNS_Topic_Demo.
Tạo SNS Rule
Nếu theo dõi các chuỗi bài hướng dẫn trước, các bạn sẽ biết rằng dữ liệu từ thiết bị sẽ gửi đến AWS IoT Core qua giao thức MQTT đến các MQTT topic, giả sử chúng ta có dữ liệu cảnh báo cần gửi đến SNS topic để chuyển tiếp đến Email, cách đơn giản nhất là sử dụng AWS IoT Rule, tính năng này cho phép viết các câu lệnh SQL SELECT để trích xuất dữ liệu từ các MQTT Topic và gửi đến các dịch vụ AWS khác như SNS, DynamoDB, Lambda,… Trong ví dụ này chúng ta sẽ thực hiện một ví dụ đơn giản là viết Rule để chuyển tiếp tin nhắn “Hello, Amazon SNS” từ thiết bị đến địa chỉ Email đã đăng ký subscription đến SNS_Topic_Demo ở bước trên.
- Tại giao diện AWS IoT Console chọn Act
- Sau đó nhấn Create để tạo rule
- Tiếp theo ta nhập tên của Rule tại trường Name
- Cuộn xuống xuống phần Rule query statement tại trường Using SQL version chọn phiên bản SQL mới nhất.
- Tại trường Rule query statement, nhập SELECT * FROM ‘my_sns/topic’
SELECT * có nghĩa là đọc toàn bộ gói tin được gửi đến Topic “my_sns/topic” để trigger (kích hoạt) Rule này.
- Tiếp tục cuộn xuống dưới phần Set one or more actions, chọn Add action.
- Tại trang Select an action , chọn Send a message as an SNS push notification, sau đó chọn Configure action
.
- Tại trang Configure action, trường SNS target, chọn Select sau đó chọn SNS topic mà ta tạo ở bước trên, trường Message format chọn định dạng cho tin nhắn là ở dạng JSON.
- Tại trường Choose or create a role to grant AWS IoT access to perform this action, nhấn Create Role, sau đó nhập tên Role tùy ý và chọn Add action. AWS sẽ tự tạo Role để cấp quyền cho AWS IoT thực thi hành động này.
- Sau khi Add action, quay trở lại trang ban đầu và chọn Create rule.
4. Demo
Để demo tính năng vừa tạo, mình sử dụng phần mềm MQTT.fx để kết nối và gửi message đến Topic ‘my_sns/topic’, khi message được gửi đến Topic ‘my_sns/topic’ thì sẽ trigger SNS Rule, sau đó messsage được đẩy qua Amazon SNS sau đó gửi về địa chỉ Email đã đăng kí.
Lưu ý: gói tin phải ở định dạng JSON và nội dung phải nằm trong trường “default”.
Kết quả sẽ chuyển đến tại địa chỉ Email đã đăng ký:
Như vậy mình đã hướng dẫn các bạn ví dụ đơn giản để thực hiện gửi cảnh báo từ thiết bị đến Email kết hợp giữa AWS IoT Core và Amazon SNS, hy vọng sẽ giúp các bạn hoàn thiện ứng dụng IoT của mình. Chúc các bạn thành công!
Nhóm TAPIT IoTs