Bài viết này sẽ trình này thiết kế luồng dữ liệu điều khiển và cập nhật trạng thái trong ứng dụng nhà thông minh khi thiết kế sử dụng Google Cloud Platflorm.
Luồng dữ liệu trạng thái (đường màu xanh) thể hiện quá trình cập nhật trạng thái của thiết bị lên đám mây. Luồng dữ liệu điều khiển, cấu hình (đường màu đỏ) thể hiện quá trình yêu cầu điều khiển, cấu hình từ xa qua ứng dụng người dùng. Ứng dụng tương tác với đám mây qua Khối API được thiết kế riêng theo kiến trúc REST. Dữ liệu được tổ chức lưu trữ trong CSDL Cloud Firestore thiết kế theo mô hình reported – desired. Trường reported dùng để lưu trữ trạng thái thực của thiết bị và trường desired dùng để lưu trữ trạng thái mong muốn yêu cầu thiết bị thực hiện thay đổi. Hai trường reported và desired có thể chứa nhiều dữ liệu khác nhau được tổ chức theo các cặp key-value tạo nên các khối dữ liệu như thiết kế.
Hình 1: Quy trình luồng dữ liệu điều khiển và cập nhật trạng thái trên nền tảng GCP
Tổ chức dữ liệu trong Cloud Firestore được minh họa ở Hình 2:
Hình 2: Tổ chức dữ liệu theo kiến trúc reported-desired trong Firestore
- reported-desired-collection là một collection chứa document desired-doc và reported-doc.
- desired-doc chứa các trường dữ liệu thể hiện trạng thái thiết bị mà nó mong muốn thiết bị thay đổi.
- reported-document chứa các trường dữ liệu thể hiện trạng thái thực tế của thiết bị.
Tài liệu chứa dữ liệu của thiết bị ESP32 trong hệ thống nhà thông minh trong trường reported lưu bao gồm 4 thông số chính:
- sensorValue: thông số giá trị cảm biến đo định kỳ (temperature, humidity, gas, pir)
- relayState: thông số trạng thái các relay (light1, light2, fan)
- connected: báo trạng thái kết nối của thiết bị (true hoặc false)
- deviceid: mã trạng thái thiết bị (ESP01)
Thiết bị giao tiếp với Cloud IoT Core qua giao thức MQTT:
- Thiết bị kết nối với Cloud qua port 8883.
- Cloud IoT Core không hỗ trợ QoS2.
- Cấu hình để xác thực Client MQTT:
- Đặt ID của Client MQTT bằng đường dẫn sau: projects/PROJECT_ID/locations/REGION/registries/REGISTRY_ID/devices/DEVICE_ID
- User name được bỏ qua.
- Mật khẩu phải chứa mã JWT.
- Để publish một gói tin telemetry, cần publish đến một topic MQTT như sau: /devices/DEVICE_ID/events
- Để reported trạng thái thiết bị, cần phải publish đến một topic MQTT như sau: /devices/DEVICE_ID/state
Chuỗi bài viết được thực hiện và chia sẻ bởi LCV.Khải và Các nhóm nghiên cứu tại Cộng đồng Kỹ thuật TAPIT
Chúc các bạn thành công!