Tổng quát đề tài1.1Yêu cầu của đề tài Nói chung, một hệ sinh thái IOT Internet Of Things gồm rất nhiều khâu khácnhau, có thể tổng quát chúng như sau : cảm biến sensor thu thập các thông
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
BÁO CÁO ĐỒ ÁN I
Đề tài:
Xây dựng hệ thống gửi tin nhắn cảnh báo cho hệ
thống IOT qua ứng dụng mạng xã hội.
Sinh viên thực hiện: CAO ĐÌNH THẮNG
Lớp ĐT5 – K59Giảng viên hướng dẫn: TS TRƯƠNG THU HƯƠNG
Trang 2Mục Lục
Trang 3Phần 1 Tổng quát đề tài
1.1Yêu cầu của đề tài
Nói chung, một hệ sinh thái IOT (Internet Of Things) gồm rất nhiều khâu khácnhau, có thể tổng quát chúng như sau : cảm biến (sensor) thu thập các thông tin cầnthiết sau đó gửi chúng lên một trung tâm xử lý (Cloud, Server, v.v), trung tâm xử lýnhận được thông tin đầu vào sẽ lưu trữ, xử lý chung và xuất lệnh ở đầu ra, lệnh đầu ra
có thể là yêu cầu kích thích hành động cho một hệ thống cơ học hoặc có thể là một tinnhắn thông báo đến người dùng, v.v Giả thiết người dùng cần thông tin về tình trạnghoạt động của hệ thống, hệ thống sẽ đáp ứng nhu cầu đó bằng việc gửi một thông báodưới dạng tin nhắn xuống thiết bị nhận thông tin của người dùng (SmartPhone, Laptop,v.v ) thông qua các ứng dụng mạng xã hội (Facebook Messenger, Skype, Twiter, v.v ).Yêu cầu đề tài đưa ra là xây dựng liên kết trung tâm xử lý với thiết bị của người dùngvới mục đích gửi tin nhắn thông báo
1.2 Phân tích và đưa ra cách giải quyết.
Giả sử, ta có một hệ thống IOT Vườn thông minh với cảm biến đo độ ẩm vànhiệt độ của đất Dữ liệu từ cảm biến được gửi tới bộ xử lý trung tâm, nếu giả sử cótính toán gì đó xong, nó sẽ đưa ra quyết định giả sử như là “ Đất bị khô quá, hãy tướicây đi !” và bản tin đó cần chuyển về dạng tin nhắn trên điện thoại di động Mô hìnhhóa hệ thống trên :
Trang 4Sensor Bộ xử lý trung tâm Thiết bị người dùng
- Cảm biến (sensor) : trong phạm vi đề tài, ta chỉ quan tâm đến khâu gửi thông tin
tới người dùng nên sử dụng mô phỏng cho các đầu ra khối là hợp lý nhất
- Bộ xử lý trung tâm : trong phạm vị đề tài, bộ xử lý trung tâm không có chức
năng lưu trữ thông tin mà chỉ có chức năng xử lý các dữ kiện đầu vào để đưa racác quyết định gửi tới người dùng Để dễ dàng và thuận tiện trong việc môphỏng hoạt động của hệ thống, nên chọn các nền tảng phần mềm thay vì phầncứng cồng kềnh, phức tạp
- Thiết bị người dùng: sử dụng các thiết bị di động như smartphone, laptop để
nhận thông báo thông qua các ứng dụng nhắn tin phổ biến
Hiện nay, có rất nhiều công cụ giả lập Cloud cho phép cho chúng ta mô phỏng hoạt động của một hệ thống IOT Một trong những công cụ đó là Node-RED trên Bluemix của IBM
Node-RED là một công cụ phát triển dựa trên các luồng
liên kết (Flow) được phát triển bởi IBM với mục đích
ban đầu là kết nối các thiết bị phần cứng, APIs và cácdịch vụ trực tuyến như một phần của Internet Of Things.Node-RED cung cấp trình biên tập luồng dựa trên trìnhduyệt, có thể được dùng để tạo các hàm Javascript Cácthành phần của ứng dụng có thể được lưu lại hoặc chia
Trang 5Với những tiện ích mạnh mẽ mà nó mang lại, Node-RED là công cụ phù hợp cho mục đích phát triển các hệ thống IOT từ đơn giản cho đến phức tạp Chi tiết các bạn có thể xem trên trang web: https://nodered.org/docs/platforms/bluemix
Mạng xã hội đang ngày càng phát triển và Facebook là một trong số đó Với sốlượng người sử dụng lớn, Facebook là nơi trao đổi thông tin, quảng cáo, phát triển ứngdụng của rất nhiều người trên thế giới và có lượt truy cập đứng thứ hai thế giới chỉ sauGoogle.com (tính đến tháng 9 năm 2012) Đối với các nhà phát triển, Facebook cungcấp nhiều nền tảng và dịch vụ để phát triển và mang tới người dùng toàn cầu ứng dụngcủa mình Facebook mới đây đã mở Messenger Platform ra cho các lập trình viên dùngthử, mục đích của nó là để tạo ra những con bot tự động phản hồi lại tin nhắn củangười dùng trên các fanpage theo cách chưa từng có trước đây Messenger Platformcho phép đọc các tin nhắn gửi đến, hiểu được nội dung mà người dùng muốn là gì, sau
đó gửi lại tin trả lời dưới dạng văn bản thuần túy, hình ảnh, hình ảnh nhúng, link haythậm chí là các thẻ thông tin với nút bấm trên đó Lợi tính năng phản hồi tin nhắn củangười dùng trên các Page, ta có thể đẩy thông báo cho người dùng thông qua ứng dụngnhắn tin Messenger
Trang 6Phần 2: Giới thiệu về Node-Red và
Messenger Platform
2.1 Node-RED
2.1.1 Hướng dẫn đăng ký tài khoản Bluemix
IBM Bluemix là một cloud platform như một service (PaaS), nghĩa là nó chophép khách hàng có thể phát triển, chạy và quản lý các ứng dụng mà không cần phảixây dựng và bảo trì phức tạp nào trong toàn bộ hạ tầng liên quan tới việc phát triển ứngdụng Lý do chúng ta đang sử dụng nó để đưa ra những IoT services – chúng ta có thể
dễ dàng kết nối và quản lý thiết bị chúng ta Thêm một điểm nữa, có rất nhiều cácservices khác mà chúng ta có thể dễ dàng kết nối thiết bị chúng ta vào, cho phép nhanhchóng phát triển những hệ thống phức tạp một cách thuận tiện Ví dụ như một kỹ sưđiện tử và ai đó không có kinh nghiệm trong việc phát triển web/cloud, việc tìm đượcIBM Bluemix như một platform hết sức tuyệt vời cho việc xây dựng những ứng dụng
mà không yêu cầu bạn tốn nhiều thời gian để học những thứ mới từ đầu Thay vàonhững giới hạn triển khai ý tưởng hoặc tuyệt vọng khi nhờ một ai đó, với IBMBluemix bạn có thể làm rất nhiều thứ tuyệt vời
Để bắt đầu xây dựng ứng dụng, bạn phải tạo một account Vàohttps://console.ng.bluemix.net/ và đăng ký Bạn có thể sử dụng IBM Bluemix hoàntoàn miễn phí trong 30 ngày Sau đó bạn phải add credit card của bạn vào, bạn sẽkhông bị thu phí trừ khi bạn vượt ngưỡng giới hạn, nó đủ nếu bạn chỉ chơi và thửnhững ý tưởng của bạn và bạn vẫn chưa có kế hoạch sửa dụng nó cho mục đích thươngmại Để biết thêm thông tin về giá bạn click vào đây
Sau khi tạo một account, đăng nhập Điều đâu tiên bạn đăng nhập là một cửa sổhỏi bạn thiết lập môi trường (environment) để hiển thị
Trang 7Figure 1 Setting up environment
Tên tổ chức của bạn (dự án hoặc team mà chia sẻ tài nguyên, như apps,databases, và những service khác) và chọn vùng (vị trí địa lý nơi tổ chức của bạn) Vớiregion thì chọn US South bởi vì có một vài tính năng chúng sẽ được hỗ trợ chỉ trongvùng này New organizations có thể được nhập vào sau nếu cần thiết Bây giờ bạn phảichọn space name, ví dụ như dev Sau khi thiết lập environment, bạn đã sẵn sàng để sửdụng IBM Bluemix
Nếu bạn vào Dashboard, trong space của bạn có thể thấy tất cả các ứng dụngbạn tạo ra và tất cả các services, các container và server ảo mà bạn chọn để dùng
Trang 9Figure 2 Main Dashbroad
Bạn chưa tạo bất cứ thứ gì ở đây Dưới Catalog tab, bạn có thể thấy rất nhiều các option để phát triển, những service khác nhau (Boilerplates, Data, Mobile, third
party…) bạn có thể dùng để xây dựng rất nhiều dự án lớn
Figure 3 Catalog
2.1.2 Tạo một App với Node-RED
Bạn có thể thấy là Bluemix hỗ trợ một vài ngôn ngữ lập trình Chúng ta sẽ build ứng dụng của bạn sử dung NodeRed Nó là một tool trực quan để nối các thiết bị phần cứng
với nhau, APIs và các online service Click vào browse Boilderplates và chọn Red Starter Nhập tên ứng dụng của bạn và click Create Sau một lúc, nếu mọi thứ ổn
Node-định, ứng dụng của bạn sẽ chạy Nếu bạn vào main dashboard, bạn nên xem ứng dụng của bạn được liệt kê phía dưới các ứng dụng Nếu click lên nó, bạn sẽ xem app status, memory còn trống, các service liên quan… Lưu ý rằng Cloudant Database service liên kết tới của ứng dụng của bạn một cách mặc định
Trang 10Figure 4 Node-RED Starter
Figure 5 Create App
Trang 11Figure 6 App Status
Bạn có thể truy cập ứng dụng của bạn bằng cách click vào Visit App URL Click vào link và Go to your Node-Red flow editor Trước khi vào trình biên tập App sẽ yêu cầu
bạn thiết lập Username và Password nếu bạn muốn giữ bảo mật ứng dụng của
mình.Sau khi hoàn tất các bước khởi tạo, trên vùng bên trái, bạn có thể thấy các node được chia trong một vài categories (input, output, function, storage…)
Figure 7 Mainbroad App
Trang 12Các Node build các block của ứng dụng chúng ta Chúng ta đặt chung vào editor
và nối chúng để tạo ra một flow Bạn có thể có nhiều flow trong một editor Sau khi
chúng ta hoàn thành việc kết nối các node, chúng ta click Deploy button trong góc phải
bên dưới Ví dụ, flow có thể đơn giản nhất như sau:
Figure 8 Simple Flow
Inject và debug node nối với nhau Double click vào trong jnject node để thiếtlập nó Chọn chuỗi như loại payload và nhập payload tùy ý, ví dụ “Hello World” Mỗilần bạn click vào inject, chuỗi bạn nhập vào được hiện thị trên debug console (để xemdebug console, click debug dưới Deploy button)
Đây là flow phức tạp hơn Chúng ta thêm vào một function node với JavaScriptcode để thống kê giá trị input
Trang 13Figure 9 Simple Flow with function node
Giờ bạn đã nắm được ý tưởng Bạn chọn các node và kết nối chúng để build các flow chức năng của ứng dụng của bạn
2.2 Messenger Platform.
2.2.1 Đăng ký tài khoản Facebook For Developer và tạo công cụ Messenger Platform.
Để có thể sử dụng công cụ Messenger Platform của Facebook, bạn cần đăng ký tài khoản dành cho nhà phát triển Trước hết, bạn đăng kí tài khoản faceboook mới dùng cho việc phát triển ứng dụng của bạn, truy cập vào đường link :
https://developers.facebook.com/ trên cùng một trình duyệt và chọn Bắt đầu
Trang 14Figure 10 Facebook For Developer
Facebook sẽ yêu cầu chấp nhận các chính sách về bảo mật để đăng ký làm nhà
phát triển của Facebook, tích vào nút switch và chọn Tiếp.
Figure 11 Register Facebook Developer
Trang 15Điền các thông tin cần thiết vào các trường đăng ký và chọn Đăng Ký.
Figure 12 Add necessary information
Sau khi xác minh mã Captcha, bạn sẽ vào vào mainbroad Facebook For Developer
Figure 13 Mainbroad
Trang 16Tiếp theo bạn cần tạo một ứng dụng mới, chọn Tạo ứng dụng ở góc phải màn hình, điền tên ứng dụng mà bạn muốn hiển thị và email liên hệ, chọn Tạo ID ứng dụng và
thực hiện bước kiểm tra bảo mật để hoàn thành
Figure 14 Create ID Application
Figure 15 Check Security
Trang 17Sau khi tạo xong ứng dụng, trình duyệt sẽ đưa bạn tới Mainbroad của ứng dụng.
Chọn Thêm sản phẩm, tìm đến Messenger và chọn Thiết lập.
Figure 16 Add product Messenger
Hoàn thành các bước trên là bạn có thể sử dụng các tiện ích trong Messenger Platform
Figure 17 Messenger Platform
Trang 182.2.2 Tạo Page gửi thông báo và địa chỉ webhook cho ứng dụng.
Ứng dụng này chỉ cho phép bạn gửi và nhận tin nhắn từ người dùng thông qua một Page đã tạo trước Các bước tạo hết sức đơn giản: bạn truy nhập vào tài khoản
Facebook của mình, tìm tới bảng điều khiển và chọn Tạo Trang
Figure 18 Create Page with name ‘Sensor_ESp8266’
Để có thể nhận và gửi tin nhắn từ Page đã tạo, cần tạo nút gửi tin nhắn cho Page Chọn vào phần Tìm hiểu thêm ở dưới ảnh bìa, Tùy chọn khác > Liên hệ > Gửi
tin nhắn và chọn Thêm nút.
Trang 19Figure 19 Add message button
Sau khi hoàn thành việc tạo Page, ta sẽ kết nối nó với app đã tạo Bạn truy nhập vào trang mainbroad Messenger, tìm tới phần tạo mã, chọn Trang ‘Sensor_ESp8266’ vừa tạo và hoàn thành xác minh quyền truy nhập
Figure 20 Create Verify Token
Trang 20Figure 21 Access Permisson
Một Mã truy nhập trang được tạo ra, ta sẽ dùng nó ở bước sau nên hãy copy nó
• URL gọi lại (url callback) : URL đến điểm cuối có thể xử lý yêu cầu xác minh
và thông báo cập nhật Ở đây ta sẽ lấy địa chỉ Url của app Node-RED mà chúng
ta đã tạo ở phần trước “https://con-201-196-nodered.eu-gb.mybluemix.net/<op>
Phần <op> là phần tự chọn, ở đây ta sẽ lấy tên là /urlappsensor
• Mã xác minh — bất kỳ chuỗi nào mà bạn cung cấp và App sử dụng mỗi khi nó gửi cho bạn yêu cầu xác minh.Ví dụ: “this_is_my_string_token_app”
Trang 21Sau khi có những thông tin này, bạn có thể bắt đầu quá trình thiết lập Tìm tới
phần Webhook trong mainbroad Messenger và chọn Thiết lập Webhooks.
Figure 22 Webhooks
Điền các thông tin cần thiết, chọn trường gửi ‘messages’ và chọn Xác minh và lưu
Figure 23 Set up Webhook
Sẽ có lỗi xác ra vì chưa nhận được xác minh từ urlcallback Bước tiếp theo, bạn cần truy nhập tới trình biên tập Node-RED và xây dựng một Flow cho việc xác minh
Trang 22địa chỉ webhooks Để xem Object xác minh mà Messenger đã gửi tới, bạn cần xây dựng một Flow như sau:
• Node input ‘http’ : Method = GET , URL = /urlappsensor
• Node output ‘debug’
Nối chúng với nhau và Deploy.
Figure 24 Flow
Như thế khi bạn yêu cầu xác minh tại phần Thiết lập webhook, một bản tin sẽ được gửi tới app Node-RED thông qua node ‘http’ và được hiển thị qua node ‘debug’ Bản tin được gửi tới
Trang 23Figure 25 Message Verification
Để xác minh, bạn cần gửi lại một bản tin thông báo cho Messenger rằng bạn đã nhận được yêu cầu Bản tin xác minh sẽ giống hoàn toàn với bản tin yêu cầu xác minh Thêm vào Flow :
• Node ‘funtion’ với đoạn code :
Thay phần 'VERIFY_TOKEN_IN_HERE' bằng mã xác minh của bạn.
• Node ‘http response’ để phản hồi lại yêu cầu
Trang 24Nối chung lại với nhau và Deploy.
Figure 26 Flow verify
Như vây, bạn đã xác minh thành công địa chỉ webhook cho app Chọn trang
‘Sensor_Esp8266’ và chọn Đăng ký
Figure 27 Subcriber Page
Sau khi hoàn thành các bước trên, bạn đã tạo được liên kết giữa Facebook Messenger và App Node-RED trên bluemix, phần tiếp theo sẽ hướng dẫn cách để đẩy tin nhắn mô phỏng trên Node-RED xuống Messenger
Trang 25Phần 3: Xây dựng Flow gửi tin nhắn cho Messenger
3.1 Developer và User trong Messenger Platform
Để mô phỏng cho việc tin nhắn thông báo tới Messenger của người dùng, bạn cần một tài khoản Faceboook khác Hãy mở một trình duyệt mới và đăng nhập vào Facebook, ở đây bạn cần có một tài khoản Facebook làm ví dụ cho tài khoản của ngườidùng Facebook ‘Cyan’ cho Developer chạy trên Firefox và facebook ‘Pig’ cho Users chạy trên Chrome như ở ví dụ này
Figure 28 User 'Pig'
Trang 26Figure 29 Developer 'Cyan'
Để User cũng có thể tương tác với ứng dụng trên, Developer phải cho phép User
có thể trải nghiệm ứng dụng này Ở mainbroad ‘noti_sensor_app’, chọn tab Vai trò.
Figure 30 Set permission for user
Trang 27Tìm tới mục người dùng thử và chọn Thêm người dùng thử Để thêm được Userbạn phải có ID Facebook của tài khoản User Một cách dễ dàng là bạn có thể truy nhập vào trang web https://findmyfbid.com/ sau đó add địa chỉ url trang cá nhân, nó sẽ trả về
ID Facebook cho bạn Một số trường hợp bạn có thể lấy ngày ID ngày sau tên miền củaFacebook khi bạn truy nhập trang cá nhân của User
Figure 31 Find ID facebook
Figure 32 ID in URL
Trang 28Sau khi hoàn thành, User đã được thêm vào ứng dụng của Developer.
Figure 33 Add Tester
3.2 Send API Reference
Để có thể gửi tin nhắn cho Messenger, bạn phải thông qua một API gửi gọi là Send API Reference API Gửi là API chính được sử dụng để gửi tin nhắn cho người dùng có cấu trục như sau :
• URL yêu cầu : https://graph.facebook.com/v2.6/me/messages?
Để lấy được PSID của người dùng, bạn chỉ có truy xuất nó qua tin nhắn mà User gửi đến Page thông qua node ‘debug’ Bước tiếp theo bạn xây dựng một Flow như sau:
• Node input ‘http’ : METHOD = POST, URL=/urlappsensor
• Node output ‘http response’
Trang 29• Node output ‘debug’
Figure 34 Flow get PSID
Sau khi Deploy Flow trên, User sẽ gửi một tin nhắn bất kỳ trên nút Gửi tin nhắn của Page Bạn có thể tìm thấy ID User trong Object được gửi tới node ‘debug’
Figure 35 Message to Page
Trang 30Figure 36 PSID
‘sender.id’ chính là PSID của người dùng, đến đầy bạn đã có đủ thông tin cần thiết cho việc thiết lập luồng tin nhắn
3.3 Xây dựng Flow
Bạn có thể xây dựng một mô hình hoàn chỉnh để mô phỏng cho một khâu trong
hệ thống IOT, từ việc mô phỏng các giá trị đầu vào, xử lý các giá trị thông qua việc đặt các mức ngưỡng, tạo tin nhắn cảnh báo và đẩy xuống Messenger Bạn có thể xây dựng một Flow như sau:
• Node input ‘inject’ : Payload (JSON) =
Node mô phỏng cho dữ liệu đầu vào được định dạng json
• Node ‘function’ : code =
var temp = msg.payload.id_device.temperature;