1. Trang chủ
  2. » Giáo Dục - Đào Tạo

XÂY DỰNG ỨNG DỤNG TRỰC TUYẾN THEO DÕI CHẤT LƯỢNG MÔI TRƯỜNG VÀ ĐIỀU KHIỂN THIẾT BỊ TỪ XA TRÊN NỀN TẢNG NODE.JS

66 702 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 66
Dung lượng 1,99 MB

Nội dung

MỤC LỤC DANH MỤC CÁC HÌNH 1 MỞ ĐẦU 1 1. Lý do chọn đề tài 1 2. Mục tiêu 1 3. Đối tượng và nội dung nghiên cứu 1 4. Phương pháp tiếp cận nghiên cứu 2 5. Bố Cục đồ án 2 CHƯƠNG I: TỔNG QUAN 3 1.1. Internet Of Thing là gì 3 1.2. Lập trình nhúng C++ 5 1.3. MongoDB 6 1.4. Giới thiệu về javascript và node.js. 10 1.4.1 Tổng quan chung về javascript . 10 1.4.2. Giới thiệu về Nodejs. 13 1.5. Linh kiện điện tử Ardunio 18 1.5.1. Ardunio là gì 18 1.5.2. Cấu tạo mạch Ardunio 19 1.6. Giao thức MQTT 21 1.7. Clound Mqtt 24 CHƯƠNG II : PHÂN TÍCH THIẾT KẾ HỆ THỐNG 26 2.1. Đặc tả bài toán hệ thống theo dõi môi trường và điều khiển thiết bị 26 2.1.1 Tổng quan bài toán 26 2.1.2. Thông tin dữ liệu của các thiết bị. 26 2.2.Các sơ đồ hệ thống 27 2.2.1. Sơ đồ UseCase 27 2.2.2.UseCase phân rã 28 2.3. Sơ đồ tuần tự 31 2.4. Sơ đồ hoạt động 34 CHƯƠNG III: SẢN PHẨM THIẾT BỊ ĐO NHIỆT ĐỘ, ĐỘ ẨM, KHÍ GAS, ĐIỀU KHIỂN MÁY BƠM NƯỚC 37 3.1. Mạch điều khiển Ardunio. 37 3.2. Thiết bị đo nhiệt độ, độ ẩm. 39 3.3 Thiết bị cảm biến nhiệt độ ,độ ẩm môi trường 42 3.4. Thiết bị cảm biến khí Gas : 42 3.5. Thiết bị điều khiển máy bơm : 45 3.6. Kết luận 45 CHƯƠNG IV: SẢN PHẨM ỨNG DỤNG THEO DÕI CHẤT LƯỢNG MÔI TRƯỜNG TRÊN NỀN TẢNG NODEJS 46 4.2. Giao diện theo dõi thiết bị. 46 4.3. Trạng thái máy bơm bật . 47 4.4. Đặt giờ thiết bị : 47 4.5. Đặt lịch bật tắt thiết bị bơm : 48 4.6. Danh sách user 48 4.7. Quản lý user 48 KẾT LUẬN 51 TÀI LIỆU THAM KHẢO 51

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

XÂY DỰNG ỨNG DỤNG TRỰC TUYẾN THEO DÕI CHẤT LƯỢNG

MÔI TRƯỜNG VÀ ĐIỀU KHIỂN THIẾT BỊ TỪ XA

TRÊN NỀN TẢNG NODE.JS

HÀ NỘI – 2017

Trang 2

KHOA CÔNG NGHỆ THÔNG TIN

PHÙNG THẾ NHÂN

XÂY DỰNG ỨNG DỤNG TRỰC TUYẾN THEO DÕI CHẤT LƯỢNG

MÔI TRƯỜNG VÀ ĐIỀU KHIỂN THIẾT BỊ TỪ XA

Trang 4

Trước tiên tôi xin gửi lời cám ơn chân thành và sâu sắc nhất tớicác thầy cô giáo trong trường Đại học Tài nguyên và Môi trường nóichung và các thầy cô giáo trong khoa Công nghệ Thông tin nói riêng đãtận tình giảng dạy, truyền đạt những kiến thức, kinh nghiệm quý báutrong suốt thời gian qua.

Đặc biệt tôi xin gửi lời cảm ơn đến cô giáo Ths Lê Lan Anh đãtận tình giúp đỡ, trực tiếp chỉ bảo, hướng dẫn tôi trong suốt quá trìnhlàm đồ án tốt nghiệp Trong thời gian làm đồ án, tôi không ngừng tiếpthu thêm nhiều kiến thức bổ ích và học tập được tinh thần làm việc, thái

độ nghiên cứu đề tài nghiêm túc, hiệu quả, đây là những điều rất cầnthiết cho tôi trong quá trình học tập và công tác sau này

Sau cùng tôi xin gửi lời cảm ơn chân thành tới gia đình, bạn bè

đã luôn sát cánh, động viên, đóng góp ý kiến và tạo điều kiện tốt nhất

để tôi có thể hoàn thành đề tài này

Sinh viên thực hiện

Phùng Thế Nhân

Trang 6

Tôi xin cam đoan rằng đây là công trình nghiên cứu của tôi Các

số liệu và kết quả nghiên cứu trong đề tài này là trung thực và chưatừng được công bố trong bất kỳ một công trình nào khác

Tôi xin cam đoan rằng mọi sự giúp đỡ cho việc thực hiện đề tài đãđược cám ơn và các thông tin trích dẫn trong đề tài này đều được chỉ rõnguồn gốc

Sinh viên thực hiện

Phùng Thế Nhân

Trang 7

DANH MỤC CÁC HÌNH 1

MỞ ĐẦU 1

1 Lý do chọn đề tài 1

2 Mục tiêu 1

3 Đối tượng và nội dung nghiên cứu 1

4 Phương pháp tiếp cận nghiên cứu 2

5 Bố Cục đồ án 2

CHƯƠNG I: TỔNG QUAN 3

1.1 Internet Of Thing là gì 3

1.2 Lập trình nhúng C++ 5

1.3 MongoDB 6

1.4 Giới thiệu về javascript và node.js 10

1.4.1 Tổng quan chung về javascript 10

1.4.2 Giới thiệu về Nodejs 13

1.5 Linh kiện điện tử Ardunio 18

1.5.1 Ardunio là gì 18

1.5.2 Cấu tạo mạch Ardunio 19

1.6 Giao thức MQTT 21

1.7 Clound Mqtt 24

CHƯƠNG II : PHÂN TÍCH THIẾT KẾ HỆ THỐNG 26

2.1 Đặc tả bài toán hệ thống theo dõi môi trường và điều khiển thiết bị 26

2.1.1 Tổng quan bài toán 26

2.1.2 Thông tin dữ liệu của các thiết bị 26

2.2.Các sơ đồ hệ thống 27

2.2.1 Sơ đồ UseCase 27

2.2.2.UseCase phân rã 28

2.3 Sơ đồ tuần tự 31

2.4 Sơ đồ hoạt động 34

CHƯƠNG III: SẢN PHẨM THIẾT BỊ ĐO NHIỆT ĐỘ, ĐỘ ẨM, KHÍ GAS, ĐIỀU KHIỂN MÁY BƠM NƯỚC 37

Trang 8

3.2 Thiết bị đo nhiệt độ, độ ẩm 39

3.3 Thiết bị cảm biến nhiệt độ ,độ ẩm môi trường 42

3.4 Thiết bị cảm biến khí Gas : 42

3.5 Thiết bị điều khiển máy bơm : .45

3.6 Kết luận 45

CHƯƠNG IV: SẢN PHẨM ỨNG DỤNG THEO DÕI CHẤT LƯỢNG MÔI TRƯỜNG TRÊN NỀN TẢNG NODEJS 46

4.2 Giao diện theo dõi thiết bị 46

4.3 Trạng thái máy bơm bật .47

4.4 Đặt giờ thiết bị : 47

4.5 Đặt lịch bật tắt thiết bị bơm : 48

4.6 Danh sách user 48

4.7 Quản lý user 48

KẾT LUẬN 51

TÀI LIỆU THAM KHẢO 51

Y

Trang 9

Hình 1.1: Nguyên lý hoạt động của Mongodb 8

Hình 1.2: Logo ngôn ngữ Javascript 10

Hình 1.3: Logo nền tảng Nodejs 13

Hình 1.4: Klout – Một ứng dụng web thống kê các hoạt động xã hội được xây dựng dựa trên Node.js vì ưu điểm tốc độ thực thi cao 14

Hình 1.5: Rủi ro của nền tảng Nodejs 18

Hình 1.6: Mạch điện tử Ardunio Uno R3 19

Hình 1.7: Nguyên lý hoạt động của giao thức MQTT 25

Hình 2.1: Sơ đồ UseCase tổng quát 28

Hình 2.2: UseCase phân rã chức năng tạo tài khoản 29

Hình 2.3: UseCase phân rã chức năng đăng nhập 29

Hình 2.4: UseCase phân rã chức năng đặt lịch tưới 30

Hình 2.5: UseCase phân rã chức năng cài đặt thời gian cho thiết bị 30

Hình 2.6: UseCase phân rã chức năng theo dõi thống kê môi trường 31

Hình 2.7: Sơ đồ tuần tự chức năng đăng nhập 31

Hình 2.8: Sơ đồ tuần tự chức năng tạo tài khoản 32

Hình 2.9: Sơ đồ tuần tự chức năng điều khiển thiết bị 32

Hình 2.10: Sơ đồ tuần tự chức năng đặt lịch tưới 33

Hình 2.11: Sơ đồ tuần tự chức năng cài đặt thời gian cho thiết bị 33

Hình 2.12: Sơ đồ tuần tự chức năng theo dõi thống kê môi trường 34

Hình 2.13: Sơ đồ hoạt động chức năng đăng nhập 34

Hình 2.14: Sơ đồ hoạt động chức năng tạo tài khoản 35

Hình 2.15: Sơ đồ hoạt động chức năng điều khiển thiết bị 35

Hình 2.16: Sơ đồ hoạt động chức năng đặt lịch tưới 36

Hình 2.17: Sơ đồ hoạt động chức năng cài đặt thời gian cho thiết bị 36

Hình 3.1: Mạch điều khiển Ardunio Uno R3 37

Hình 3.2: Cảm biến nhiệt độ, độ ẩm DHT11 39

Trang 10

Hình 3.6: Thiết bị đo khí gas 44

Hình 3.7: Dữ liệu trả về từ mq2 44

Hình 3.8: Thiết bị điều khiển máy bơm 45

Hình 4.1: Chức năng đăng nhập……… 44

Hình 4.2: Màn hình theo dõi thông số môi trường 46

Hình 4.3: Trạng thái bật của máy bơm 47

Hình 4.4: Chức năng đặt giờ thiết bị tưới 47

Hình 4.5: Chức năng đặt lịch thiết bị tưới 48

Hình 4.6: Màn hình danh sách người dùng 48

Hình 4.7: Chức năng quản lý người dung 49

Trang 11

MỞ ĐẦU

1 Lý do chọn đề tài

Hiện nay, cuộc cách mạng công nghiệp lần 4 (công nghiệp số) đang tớigần Sự ra đời của hàng loạt công nghệ mới cho phép chúng ta có thể xâydựng những thiết bị và hệ thống thông minh, mạnh mẽ, có khả năng hỗ trợ tối

đa tiện ích cho người dùng Từ quản lý, vận hành xí nghiệp cho tới bật lò sưởi

hộ gia đình, tất cả đều có thể vận hành tự động và chính xác thông quainternet mà không cần sự thao tác trực tiếp từ con người

Để bắt kịp xu hướng công nghệ và hỗ trợ phát triển mở rộng các dự án

sau này, tôi đã tiến hành chọn đề tài: “Xây dựng ứng dụng trực tuyến theo dõi chất lượng môi trường và điều khiển thiết bị từ xa trên nền tảng node.js.”

2 Mục tiêu

Xây dựng hệ thống có khả năng số hóa các đối tượng thực tế vào môitrường máy tính và tương tác

Chế tạo các thiết bị có khả năng số hóa các thông số của môi trường và

có thể điều khiển từ Internet

Xây dựng Web Application phục vụ nghiệp vụ hệ thống

3 Đối tượng và nội dung nghiên cứu

Đối tượng nghiên cứu:

 Nền tảng Nodejs

 Cơ sở dữ liệu mongodb

 Thiết bị điện tử có khả năng kết nối internet

Nội dung nghiên cứu:

 Khái niệm mô hình, giao thức, cách thức phát triển ứng dụng, khaithác các mã nguồn mở để phục vụ quá trình phát triển thuận lợi hơn

 Cấu trúc Nodejs

Trang 12

 Khai thác dữ liệu trong Mongodb

 Điện toán đám mây

 Thiết bị cảm ứng nhiệt độ, độ ẩm, khí gas, relay

4 Phương pháp tiếp cận nghiên cứu

 Phương pháp nghiên cứu lý thuyết: tiến hành thu thập tài liệu, thông tin liên quan đến đề tài

 Tổng hợp và phân tích tài liệu để đưa ra cơ sở lý thuyết về triển khai

Chương 2: Phân tích thiết kế hệ thống

Chương 3: Sản phẩm thiết bị đo nhiệt độ, độ ẩm, khí gas, điều khiển máy bơm nước

Chương 4: Sản phẩm theo dõi chất lượng môi trường trên nền tảng Nodejs

Trang 13

CHƯƠNG I: TỔNG QUAN

1.1 Internet Of Thing là gì

IOT là thuật ngữ dùng để chỉ các đối tượng có thể được nhận biết(identifiable) cũng như chỉ sự tồn tại của chúng trong một kiến trúc mang tínhkết nối Cụm từ này được đưa ra bởi Kevin Ashton vào năm 1999 Ông là mộtnhà khoa học đã sáng lập ra Trung tâm Auto-ID ở đại học MIT, nơi thiết lậpcác quy chuẩn toàn cầu cho RFID (một phương thức giao tiếp không dâydùng sóng radio) cũng như một số loại cảm biến khác IoT sau đó cũng đượcdùng nhiều trong các ấn phẩm đến từ các hãng và nhà phân tích

"Thing" - sự vật - trong Internet of Things, có thể là một trang trại độngvật với bộ tiếp sóng chip sinh học, một chiếc xe ô tô tích hợp các cảm biến đểcảnh báo lái xe khi lốp quá non, hoặc bất kỳ đồ vật nào do tự nhiên sinh rahoặc do con người sản xuất ra mà có thể được gán với một địa chỉ IP và đượccung cấp khả năng truyền tải dữ liệu qua mạng lưới

IoT phải có 2 thuộc tính: một là đó phải là một ứng dụng internet Hai

là, nó phải lấy được thông tin của vật chủ

Kiến trúc IoT được đại diện cơ bản bởi 4 phần: Vạn vật (Things), trạmkết nối (Gateways), hạ tầng mạng và điện toán đám mây (Network andCloud) và các lớp tạo và cung cấp dịch vụ (Services-creation and SolutionsLayers)

• Vạn vật (Things): Ngày nay có hàng tỷ vật dụng đang hiện hữu trênthị trường gia dụng và công nghệ, ở trong nhà hoặc trên tay của người dùng.Chẳng hạn như xe hơi, thiết bị cảm biến, thiết bị đeo và điện thoại di độngđang được kết nối trực tiếp thông qua băng tầng mạng không dây và truy cậpvào Internet Giải pháp IoT giúp các thiết bị thông minh được sàng lọc, kết

Trang 14

nối và quản lý dữ liệu một cách cục bộ, còn các thiết bị chưa thông minh thì

có thể kết nối được thông qua các trạm kết nối

• Trạm kết nối (Gateways): Một rào cản chính khi triển khai IoT đó làgần 85% các vật dụng đã không được thiết kế để có thể kết nối với Internet vàkhông thể chia sẻ dữ liệu với điện toán đám mây Để khắc phục vấn đề này,các trạm kết nối sẽ đóng vai trò là một trung gian trực tiếp, cho phép các vậtdụng có sẵn này kết nối với điện toán đám mây một cách bảo mật và dễ dàngquản lý

• Hạ tầng mạng và điện toán đám mây (Network and Cloud):

- Cơ sở hạ tầng kết nối: Internet là một hệ thống toàn cầu của nhiềumạng IP được kết nối với nhau và liên kết với hệ thống máy tính Cơ sở hạtầng mạng này bao gồm thiết bị định tuyến, trạm kết nối, thiết bị tổng hợp,thiếp bị lặp và nhiều thiết bị khác có thể kiểm soát lưu lượng dữ liệu lưuthông và cũng được kết nối đến mạng lưới viễn thông và cáp - được triển khaibởi các nhà cung cấp dịch vụ

- Trung tâm dữ liệu/ hạ tầng điện toán đám mây: Các trung tâm dữ liệu

và hạ tầng điện toán đám mây bao gồm một hệ thống lớn các máy chủ, hệthống lưu trữ và mạng ảo hóa được kết nối

• Các lớp tạo và cung cấp dịch vụ (Services-Creation and SolutionsLayers): Intel đã kết hợp những phần mềm quản lý API hàng đầu (ApplicationProgmraming Interface) là Mashery* và Aepona* để giúp đưa các sản phẩm

và giải pháp IoT ra thị trường một cách chóng và tận dụng được hết giá trị củaviệc phân tích các dữ liệu từ hệ thống và tài sản đang có sẵn

Các thành phần trong hệ sinh thái này rất đa dạng, bao gồm: thiết bịphần cứng, hạ tầng kết nối, phần mềm nền tảng, và các công cụ phân tích dữliệu Cụ thể như sau:

Trang 15

• Thiết bị IoT bao gồm các thiết bị phần cứng có khả năng giao tiếp theo các chuẩn IoT được định nghĩa sẵn Các thiết bị này rất đa dạng tùy theo mục đích sử dụng như: thiết bị thông minh cá nhân (điện thoại, đồng hồ), thiết

bị gia dụng (tủ lạnh, đều hòa nhiệt độ), hay các thiết bị quan trắc, cảm biến đocác điều kiện của môi trường (nhiệt độ, độ ẩm, ánh sáng) …

• Hạ tầng kết nối IoT chính là hạ tầng mạng, đường truyền di động đểcác thiết bị IoT có thể kết nối, trao đổi dữ liệu với nhau thông qua một hệthống phần mềm nền tảng trung tâm Các thiết bị này có thể kết nối tới phầnmềm trung tâm dưới dạng kết nối trực tiếp hoặc kết nối thông qua các thiết bịtrung gian (gateway)

• Phần mềm nền tảng IoT: đây được coi là trái tim của hệ sinh thái IoT

có các chức năng quản lý kết nối, tổng hợp, lưu trữ và xử lý dữ liệu gửi về từcác thiết bị

• Phần mềm phân tích dữ liệu lớn: Đây là thành phần mang lại giá trịchính cho hệ sinh thái IoT bởi đích đến của IoT, xét cho cùng, không chỉ đơnthuần là kết nối và nhận dữ liệu từ các thiết bị mà là khai thác dữ liệu đó thếnào để tạo ra giá trị cho người dùng cuối

• Phần mềm ứng dụng phục vụ trực tiếp người dùng cuối

1.2 Lập trình nhúng C++

Xuất hiện từ những năm đầu thập niên 1960, hệ thống nhúng đang dầntrở thành một ngành phát triển mạnh mẽ trong lĩnh vực công nghệ thông tin(CNTT), với những ứng dụng rộng rãi trong công nghiệp và đời sống.Theo các chuyên gia, ước tính đến năm 2017, doanh số của thị trường phầnmềm cho hệ thống nhúng toàn cầu sẽ đạt cột mốc 23 tỷ đô-la Mỹ Điều dựbáo nói trên, cùng với sự xuất hiện ngày càng nhiều các đối tác lớn trong lĩnhvực này tại Việt Nam, đã mở ra một hướng đi mới cho thị trường phần mềmcủa chúng ta trong tương lai

Trang 16

Những đặc trưng của hệ thống nhúng:

- Hệ thống nhúng (embedded system) được định nghĩa là một hệ thốngchuyên dụng, thường có khả năng tự hành và được thiết kế tích hợp vào một

hệ thống lớn hơn để thực hiện một chức năng chuyên biệt nào đó

- Khác với các máy tính đa chức năng (multi-purposes computers), ví dụ nhưmáy vi tính cá nhân (PC), một hệ thống nhúng thường chỉ thực hiện một hoặcmột vài chức năng nhất định Hệ thống nhúng bao gồm cả thiết bị phần cứng

và phần mềm, hầu hết đều phải thỏa mãn yêu cầu hoạt động theo thời gianthực (real-time)

- Tùy theo tính chất và yêu cầu, mức độ đáp ứng của hệ thống có thểphải là rất nhanh (ví dụ như hệ thống thắng trong xe hơi hoặc điều khiển thiết

bị trong nhà máy), hoặc có thể chấp nhận một mức độ chậm trễ tương đối (ví

dụ như điện thoại di động, máy lạnh, ti-vi)

Để có thể dễ hình dung, ta xem ví dụ sau đây: một chiếc xe hơi trungbình có khoảng 70-80 chip vi xử lý (micro controller unit), mỗi bộ vi xử lýđảm nhiệm một nhiệm vụ, chẳng hạn như đóng mở cửa, điều khiển đèn tínhiệu, đo nhiệt độ trong/ngoài xe, hiển thị giao diện người dùng (dashboard),điều khiển thắng (nếu dùng hệ thống thắng điện)…

Do tính chất chuyên biệt của hệ thống nhúng và chúng thường được sảnxuất với số lượng lớn nên các nhà sản xuất thường yêu cầu phải tối ưu hóachúng nhằm giảm thiểu kích thước và chi phí sản xuất

1.3 MongoDB

 Khái niệm:

MongoDB là một chương trình cơ sở dữ liệu mã nguồn mở được thiết kếtheo kiểu hướng đối tượng trong đó các bảng được cấu trúc một cách linh hoạtcho phép các dữ liệu lưu trên bảng không cần phải tuân theo một dạng cấu trúcnhất định nào Chính do cấu trúc linh hoạt này nên MongoDB có thể được

Trang 17

dùng để lưu trữ các dữ liệu có cấu trúc phức tạp và đa dạng và không cố định(hay còn gọi là Big Data).

+ Mỗi một bản ghi của MongoDB được tự động gắn thêm một field cótên “_id” thuộc kiểu dữ liệu ObjectId mà nó quy định để xác định được tínhduy nhất của bản ghi này so với bản ghi khác, cũng như phục vụ các thao táctìm kiếm và truy vấn thông tin về sau

+ Trường dữ liệu “_id” luôn được tự động đánh index (chỉ mục) để tốc

độ truy vấn thông tin đạt hiệu suất cao nhất

+ Mỗi khi có một truy vấn dữ liệu, bản ghi được cache (ghi đệm) lên bộnhớ Ram, để phục vụ lượt truy vấn sau diễn ra nhanh hơn mà không cần phảiđọc từ ổ cứng

+ Khi có yêu cầu thêm/sửa/xóa bản ghi, để đảm bảo hiệu suất của ứngdụng mặc định MongoDB sẽ chưa cập nhật xuống ổ cứng ngay, mà sau 60giây MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM xuống ổcứng

Trang 18

Hình 1.1: Nguyên lý hoạt động của Mongodb

 Lợi thế của MongoDB so với cơ sở dữ liệu quan hệ:

+ Ít Schema hơn: MongoDB là một cơ sở dữ liệu dựa trên Document,trong đó một Collection giữ các Document khác nhau Số trường, nội dung vàkích cỡ của Document này có thể khác với Document khác

+ Cấu trúc của một đối tượng là rõ ràng

+ Không có các Join phức tạp

+ Khả năng truy vấn sâu hơn MongoDB hỗ trợ các truy vấn động trêncác Document bởi sử dụng một ngôn ngữ truy vấn dựa trên Document màmạnh mẽ như SQL

+ Dữ liệu được caching (ghi đệm) lên RAM, hạn chế truy cập vào ổcứng nên tốc độ đọc và ghi cao

+ MongoDB dễ dàng để mở rộng

+Việc chuyển đổi/ánh xạ của các đối tượng ứng dụng đến các đối tượng

cơ sở dữ liệu là không cần thiết

+Sử dụng bộ nhớ nội tại để lưu giữ phần công việc, giúp truy cập dữ liệunhanh hơn

 Nhược điểm:

Trang 19

+ Không ràng buộc, toàn vẹn nên không ứng dụng được cho các mô hìnhgiao dịch yêu cầu độ chính xác cao.

+ Không có cơ chế transaction (giao dịch) để phục vụ các ứng dụng ngânhang

+ Dữ liệu được caching, lấy RAM làm trọng tâm hoạt động vì vậy khihoạt động yêu cầu một bộ nhớ RAM lớn

+ Mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứngngay lập tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất

là rất cao

 Lưu ý khi sử dụng MongoDB:

+ MongoDB sinh ra để tăng tốc độ truy xuất dữ liệu, phù hợp cho cácứng dụng cần tốc độ phản hồi nhanh (realtime như facebook chẳng hạn) Còncác tác nghiệp cần tính toàn vẹn dữ liệu (trong banking)

+ MongoDB không có tính ràng buộc, một điều tồi tệ trong Database vìvậy sẽ rất cần sự cẩn thận khi thao tác trên các collection có quan hệ dữ liệuvới nhau

+ MongoDB đẩy trách nghiệm thao tác Database cho tầng ứng dụng nên

sẽ tốn tài nguyên(tài nguyên bây giờ không còn là vấn đề quá lớn)

+ MongoDb có thể mở trộng theo chiều ngang (scale out) phương pháptăng cường khả năng lưu trữ và xử lý là dùng nhiều máy tính phân tán.MongoDb còn có thể mở rộng theo chiều dọc (scale up) tăng cấu hình server.+ MongoDb có thể dùng nhiều máy tính phân tán để lưu trữ dữ liệu nênchi phí sẽ rẻ hơn Mysql Mysql sử dụng những máy chủ hàng khủng, độcquyền nên sẽ đắt đỏ hơn

Trang 20

1.4 Giới thiệu về javascript và node.js.

1.4.1 Tổng quan chung về javascript

JavaScript là một ngôn ngữ kịch bản (scripting language) được dùng đểtạo các script ở máy client (client-side script) và máy server (server-sidescript) Các script ở máy client được thực thi tại trình duyệt, các script ở máyserver được thực hiện trên server Chương này sẽ giới thiệu cho chúng ta vềngôn ngữ Javascript, và cách chèn một script vào trong tài liệu HTML

Hình 1.2: Logo ngôn ngữ Javascript HTML lúc đầu được phát triển như là một định dạng của tài liệu có thể

chuyển dữ liệu trên Internet Tuy nhiên, không lâu sau đó, trọng tâm củaHTML nặng tính hàn lâm và khoa học dần chuyển hướng sang người dùngthường nhật vì ngày nay người dùng xem Internet như là một nguồn thông tin

và giải trí Các trang Web ngày càng mang tính sáng tạo và đẹp mắt hơnnhằm thu hút nhiều người dùng hơn Nhưng thực chất kiểu dáng và nội dungbên trong vẫn không thay đổi Và người dùng hầu như không thể điều khiểntrên trang Web mỗi khi nó được hiển thị

Javascript được phát triển như là một giải pháp cho vấn đề nêu trên.Javascript là một ngôn ngữ kịch bản được Sun Microsystems và Netscapephát triển Nó được dùng để tạo các trang Web động và tương tác trênInternet Đối với những người phát triển HTML, Javascript rất hữu ích trongviệc xây dựng các hệ thống HTML có thể tương tác với người dùng

Trang 21

Hiệu ứng và quy tắc JavaScript

JavaScript là một ngôn ngữ lập trình được nhúng được trong các trangHTML JavaScript nâng cao tính động và khả năng tương tác cho web-sitebằng cách sử dụng các hiệu ứng của nó như thực hiện các phép tính, kiểm traform, viết các trò chơi, bổ sung các hiệu ứng đặc biệt, tuỳ biến các chọn lựa

đồ hoạ, tạo ra các mật khẩu bảo mật và hơn thế nữa

Chúng ta có thể sử dụng JavaScript để:

Tương tác với người dùng: Chúng ta có thể viết mã để đáp lại các sự

kiện Các sự này sẽ có thể phát sinh bởi người dùng - - nhấp chuột hay đượcphát sinh từ hệ thống - - định lại kích thước của trang và v.v

Thay đổi nội dung động: Mã JavaScript có thể dùng để thay đổi nội

dung và vị trí các phần tử một cách động trên một trang nhằm đáp lại sựtương tác với người dùng

Kiểm tra tính hợp lệ dữ liệu: Chúng ta có thể viết mã nhằm kiểm tra

tính hợp lệ của dữ liệu do người dùng nhập vào trước khi nó được gửi lênWeb server để xử lý

Giống như các ngôn ngữ khác, JavaScript cũng tuân thủ một số quy tắcngữ pháp căn bản Việc nắm vững các quy tắc ngữ pháp này có thể giúp tađọc được script và tự viết các script không bị lỗi

Một số trong các luật này bao gồm:

Trang 22

Dùng Caps JavaScript phân biệt chữ hoa chữ thường

Dùng Pairs Trong JavaScript, luôn luôn có cặp ký hiệu mở và đóng.

Lỗi sẽ xuất hiện khi bỏ sót hoặc đặt sai một trong hai ký hiệu này

Dùng Spaces (các ký tự trắng).Như HTML, JavaScript thường bỏ qua

ký tự trắng Trong JavaScript, ta có thể thêm vào các ký tự trắng hoặc các tabgiúp cho ta dễ dàng đọc hay sửa các file script

Dùng Chú thích (Comments).Các chú thích giúp ta ghi chú về chức

năng của đoạn script, thờI gian và ngườI tạo ra đoạn script

Mặc dù cả client-side JavaScript và server-side JavaScript đều dựa trênmột ngôn ngữ nền tảng như nhau, nhưng mỗI loạI còn có thêm những tínhnăng chuyên biệt phù hợp với môi trường mà nó chạy Nghĩa là, client-sideJavaScript bao gồm các đối tượng được định nghĩa sẵn chỉ có thể sử dụng trêntrình duyêt, Server-side JavaScript bao gồm các đối tượng và các hàm đượcđịnh nghĩa sẵn chỉ có thể sử dùng trong các ứng dụng phía server (server-sideapplications)

JavaScript trên Web Server

Chúng ta có thể nhúng các lệnh JavaScript chạy trên server (server-sidescript) vào trong tài liệu HTML Quá trình tạo ra các ứng dụng server-side làmột quá trình gồm hai giai đọan

1 Các trang HTML có chứa các câu lệnh JavaScript của cả client-side vàserver-side đều được tạo ra cùng với các file JavaScript Tất cả các file này sẽ được biên dịch thành dạng mã thực thi được là bytecode

2 Khi trình duyệt yêu cầu trang HTML, run-time engine sẽ thực thi mã lệnh server-side JavaScript rồi trả trang HTML về cho trình duyệt

Một số công dụng của script server-side bao gồm:

o Kết nối vào các cơ sở dữ liệu

o Chia sẻ thông tin cho những người dùng của một ứng dụng

Trang 23

1.4.2 Giới thiệu về Nodejs.

Node.js là một cách để chạy JavaScript trên server Hiện nay, với sự pháttriển lớn mạnh của javascript thì Node.js đang tạo ra một làn sóng trong cộng đồng với các sản phẩm nhanh, chính xác, và đáp ứng yêu cầu realtime

Hình 1.3: Logo nền tảng Nodejs

Node.js là gì?

Node.js là một nền tảng chạy trên môi trường V8 JavaScript runtime một trình thông dịch JavaScript cực nhanh chạy trên trình duyệt Chrome.Bình thường thì bạn cũng có thể tải bộ V8 và nhúng nó vào bất cứ thứ gì.Node.js làm điều đó đối với các web server JavaScript suy cho cùng cũng chỉ

-là một ngôn ngữ - vậy thì không có lý do gì để nói nó không thể sử dụng trênmôi trường server tốt như là trong trình duyệt của người dùng được

Trong một môi trường server điển hình LAMP PHP), bạn có một web server là Apache hoặc NGINX nằm dưới, cùng vớiPHP chạy trên nó Mỗi một kết nối tới server sẽ sinh ra một thread mới, vàđiều này khiến ứng dụng nhanh chóng trở nên chậm chạp hoặc quá tải - cáchduy nhất để hỗ trợ nhiều người dùng hơn là bằng cách bổ sung thêm nhiềumáy chủ Đơn giản là nó không có khả năng mở rộng tốt Nhưng với Node.jsthì điều này không phải là vấn đề Không có một máy chủ Apache lắng nghecác kết nối tới và trả về mã trạng thái HTTP – lập trình viên sẽ phải tự quản lýkiến trúc lõi của máy chủ đó May mắn thay, có một số module giúp thực hiện

Trang 24

(Linux-Apache-MySQL-điều này được dễ dàng hơn, nhưng công việc này vẫn gây một chút khó khănkhi mới bắt đầu Tuy nhiên, kết quả thu được là một ứng dụng web có tốc độthực thi cao.

Hình 1.4: Klout – Một ứng dụng web thống kê các hoạt động xã hội được xây dựng dựa trên Node.js vì ưu điểm tốc độ thực thi cao

JavaScript là một ngôn ngữ dựa trên sự kiện, vì vậy bất cứ thứ gì xảy ra

trên server đều tạo ra một sự kiện non-blocking Mỗi kết nối mới sinh ra một

sự kiện; dữ liệu nhận được từ một upload form sinh ra một sự kiện received; việc truy vấn dữ liệu từ database cũng sinh ra một sự kiện Trongthực tế, điều này có nghĩa là một trang web Node.js sẽ chẳng bao giờ bị khóa(lock up) và có thể hỗ trợ cho hàng chục nghìn user truy cập cùng lúc Node.jsđóng vai trò của server - Apache - và thông dịch mã ứng dụng chạy trên nó.Giống như Apache, có rất nhiều module (thư viện) có thể được cài đặt để bổsung thêm các đặc trưng và chức năng như lưu trữ dữ liệu, hỗ trợ file Zip,

Trang 25

data-đăng nhập bằng Facebook, hoặc các cổng thanh toán Dĩ nhiên, nó không cónhiều thư viện như PHP, nhưng Node.js vẫn đang ở trong giai đoạn ban đầu

và có một cộng đồng rất mạnh mẽ ở đằng sau nó

Một khái niệm cốt lõi của Node.js đó là các function bất đồng bộasynchronous functions) - vì vậy về cơ bản thì mọi thứ chạy trên nền tảng này.Với hầu hết các ngôn ngữ kịch bản máy chủ, chương trình phải đợi mỗi functionthực thi xong trước khi có thể tiếp tục chạy tiếp Với Node.js, bạn xác định cácfunction sẽ chạy để hoàn thành một tác vụ nào đó, trong khi phần còn lại củaứng dụng vẫn chạy đồng thời Nó là một chủ đề phức tạp mà tôi sẽ không đi vàoquá sâu trong bài viết này, nhưng đó là một trong những đặc trưng tiêu biểu củaNode.js, vì vậy việc nắm vững nó là điều hết sức quan trọng

Trong quá trình phát triển ứng dụng dựa trên nền tảng, ta cần chú ý tới

hai đối số - request, bao gồm các tham số yêu cầu từ người dùng;

và response, cái chúng ta sử dụng để gửi kết quả trả về

+ Chạy rất nhanh: NodeJ được xây dựng dựa vào nền tảng V8 JavascriptEngine nên việc thực thi chương trình rất nhanh

+ Đơn luồng nhưng khả năng mở rộng cao: Node.js sử dụng một môhình luồng duy nhất với sự kiện lặp cơ chế tổ chức sự kiện giúp các máy chủ

để đáp ứng một cách không ngăn chặn và làm cho máy chủ cao khả năng mởrộng như trái ngược với các máy chủ truyền thống mà tạo đề hạn chế để xử lýyêu cầu Node.js sử dụng một chương trình đơn luồng và các chương trình

Trang 26

tương tự có thể cung cấp dịch vụ cho một số lượng lớn hơn nhiều so với yêucầu máy chủ truyền thống như Apache HTTP Server.

+ Không đệm: NodeJS không đệm bất kì một dữ liệu nào và các ứngdụng này chủ yếu là đầu ra dữ liệu

+ Có giấy phép: NodeJS đã được cấp giấy phép bởi MIT License

The Node Package Manager(NPM) - Trình quản lý gói tập tin

Khi làm việc với Node js thì một điều chắc chắn không nên bỏ qua làxây dựng package quản lý sử dụng các cộng cụ NPM mà mặc định với mọicài đặt Node js Ý tưởng của mô-đun NPM là khá tương tự như Ruby-Gems:một tập hợp các hàm có sẵn có thể sử dụng được, thành phần tái sử dụng, tậphợp các cài đặt dễ dàng thông qua kho lưu trữ trực tuyến với các phiên bảnquản lý khác nhau

Danh sách các mô-đun có thể tìm trên web NPM package hoặc có thểtruy cập bằng cách sử dụng công cụ NPM CLI sẽ tự động cài đặt với Node js Một số các module NPM phổ biến nhất hiện nay là:

+ expressjs.com/ - Express.js, một Sinatra-inspired web framework kháphát triển của Node.js, chứa rất nhiều các ứng dụng chuẩn của Node.js ngàynay

+ connect - Connect là một mở rộng của HTTP server framework choNode.js, cung cấp một bộ sưu tập của hiệu suất cao "plugins" được biết đếnnhư là trung gian; phục vụ như một nền tảng cơ sở cho Express

+ socket.io and sockjs - Hai thành phần Server-side websocketscomponents nổi tiếng nhất hiện nay

+ Jade - Một trong những engines mẫu, lấy cảm hứng từ HAML, mộtphần mặc định trong Express.js

+ mongo and mongojs - MongoDB hàm bao để cung cấp các API cho cơ

sở dữ liệu đối tượng trong MongoDB Node.js

Trang 27

+ redis - thư viện Redis client.

+ coffee-script - CoffeeScript trình biên dịch cho phép developers viếtcác chương trình Node.js của họ dùng Coffee

+ underscore (lodash, lazy) - Thư viện tiện ích phổ biến nhất trongJavaScript, package được sử dụng với Node.js, cũng như hai đối tác của mình,hứa hẹn hiệu suất tốt hơn bằng cách lấy một cách tiếp cận thực hiện hơi khácnhau

+ forever - Có lẽ là tiện ích phổ biến nhất để đảm bảo rằng một kịch bảnnút cho chạy liên tục Giữ quá trình Node.js của bạn lên trong sản xuất đốimặt với bất kỳ thất bại không ngờ tới

Tại sao lại sử dụng Node.js?

Đầu tiên là ưu điểm về tốc độ thực thi và khả năng mở rộng Node.js cótốc độ rất nhanh Đó là một yêu cầu khá quan trọng khi bạn là một startupđang cố gắng tạo ra một sản phẩm lớn và muốn đảm bảo có thể mở rộngnhanh chóng, đáp ứng được một lượng lớn người dùng khi trang web của bạnphát triển lên

Node.js có thể xử lý hàng ngàn kết nối đồng thời trong khi PHP sẽ quátải Bên cạnh các lợi ích về tốc độ thực thi và khả năng mở rộng

Trang 28

Hình 1.5: Rủi ro của nền tảng Nodejs

1.5 Linh kiện điện tử Ardunio

1.5.1 Ardunio là gì

Arduino là một board mạch vi xử lý, nhằm xây dựng các ứng dụng

tương tác với nhau hoặc với môi trường được thuận lợi hơn Phần cứng baogồm một board mạch nguồn mở được thiết kế trên nền tảng vi xử lý AVRAtmel 8bit, hoặc ARM Atmel 32-bit Những Model hiện tại được trang bịgồm 1 cổng giao tiếp USB, 6 chân đầu vào analog, 14 chân I/O kỹ thuật sốtương thích với nhiều board mở rộng khác nhau

Được giới thiệu vào năm 2005, Những nhà thiết kế của Arduino cốgắng mang đến một phương thức dễ dàng, không tốn kém cho những ngườiyêu thích, sinh viên và giới chuyên nghiệp để tạo ra những thiết bị có khảnăng tương tác với môi trường thông qua các cảm biến và các cơ cấu chấphành Những ví dụ phổ biến cho những người yêu thích mới bắt đầu bao gồmcác robot đơn giản, điều khiển nhiệt độ và phát hiện chuyển động Đi cùng

Trang 29

với nó là một môi trường phát triển tích hợp (IDE) chạy trên các máy tính cánhân thông thường và cho phép người dùng viết các chương trình cho Aduinobằng ngôn ngữ C hoặc C++.

Hình 1.6: Mạch điện tử Ardunio Uno R3

1.5.2 Cấu tạo mạch Ardunio

Một mạch Arduino bao gồm một vi điều khiển AVR với nhiều linhkiện bổ sung giúp dễ dàng lập trình và có thể mở rộng với các mạch khác.Một khía cạnh quan trọng của Arduino là các kết nối tiêu chuẩn của nó, chophép người dùng kết nối với CPU của board với các module thêm vào có thể

dễ dàng chuyển đổi, được gọi là shield Vài shield truyền thông với board

Arduino trực tiếp thông qua các chân khách nhau, nhưng nhiều shield đượcđịnh địa chỉ thông qua serial bus I²C-nhiều shield có thể được xếp chồng và

Trang 30

sử dụng dưới dạng song song Arduino chính thức thường sử dụng các dòngchip megaAVR, đặc biệt là ATmega8, ATmega168, ATmega328,ATmega1280, và ATmega2560 Một vài các bộ vi xử lý khác cũng được sửdụng bởi các mạch Aquino tương thích Hầu hết các mạch gồm một bộ điềuchỉnh tuyến tính 5V và một thạch anh dao động 16 MHz (hoặc bộ cộng hưởngceramic trong một vài biến thể), mặc dù một vài thiết kế như LilyPad chạy tại

8 MHz và bỏ qua bộ điều chỉnh điện áp onboard do hạn chế về kích cỡ thiết

bị Một vi điều khiển Arduino cũng có thể được lập trình sẵn với một bootloader cho phép đơn giản là upload chương trình vào bộ nhớ flash on-chip, sovới các thiết bị khác thường phải cần một bộ nạp bên ngoài Điều này giúpcho việc sử dụng Arduino được trực tiếp hơn bằng cách cho phép sử dụng 1máy tính gốc như là một bộ nạp chương trình

Theo nguyên tắc, khi sử dụng ngăn xếp phần mềm Arduino, tất cả cácboard được lập trình thông qua một kết nối RS-232, nhưng cách thức thựchiện lại tùy thuộc vào đời phần cứng Các board Serial Arduino có chứa mộtmạch chuyển đổi giữa RS232 sang TTL Các board Arduino hiện tại được lậptrình thông qua cổng USB, thực hiện thông qua chip chuyển đổi USB-to-serial như là FTDI FT232 Vài biến thể, như Arduino Mini và Boarduinokhông chính thức, sử dụng một board adapter hoặc cáp nối USB-to-serial cóthể tháo rời được, Bluetooth hoặc các phương thức khác (Khi sử dụng mộtcông cụ lập trình vi điều khiển truyền thống thay vì ArduinoIDE, công cụ lậptrình AVR ISP tiêu chuẩn sẽ được sử dụng.)

Board Arduino sẽ đưa ra hầu hết các chân I/O của vi điều khiển để sửdụng cho những mạch ngoài Diecimila, Duemilanove, và bây giờ là Uno đưa

ra 14 chân I/O kỹ thuật số, 6 trong số đó có thể tạo xung PWM (điều chế độrộng xung) và 6 chân input analog, có thể được sử dụng như là 6 chân I/O số.Những chân này được thiết kế nằm phía trên mặt board, thông qua các header

Trang 31

cái 0.10-inch (2.5 mm) Nhiều shield ứng dụng plug-in cũng được thương mạihóa Các board Arduino Nano, và Arduino-compatible Bare Bones Board vàBoarduino có thể cung cấp các chân header đực ở mặt trên của board dùng đểcắm vào các breadboard.

Có nhiều biến thể như Arduino-compatible và Arduino-derived Mộtvài trong số đó có chức năng tương đương với Arduino và có thể sử dụng đểthay thế qua lại Nhiều mở rộng cho Arduino được thực thiện bằng cách thêmvào các driver đầu ra, thường sử dụng trong các trường học để đơn giản hóacác cấu trúc của các 'con rệp' và các robot nhỏ Những board khác thườngtương đương về điện nhưng có thay đổi về hình dạng-đôi khi còn duy trì độtương thích với các shield, đôi khi không Vài biến thể sử dụng bộ vi xử lýhoàn toàn khác biệt, với các mức độ tương thích khác nhau

1.6 Giao thức MQTT

MQTT (Message Queuing Telemetry Transport) là một giao thức gởidạng publish/subscribe sử dụng cho các thiết bị Internet of Things với băngthông thấp, độ tin cậy cao và khả năng được sử dụng trong mạng lưới không

"/client1/channel2" Quá trình đăng ký này gọi là "subscribe", giống như

chúng ta đăng ký nhận tin trên một kênh Youtube vậy Mỗi client sẽ nhận

Trang 32

được dữ liệu khi bất kỳ trạm nào khác gởi dữ liệu và kênh đã đăng ký Khi

một client gởi dữ liệu tới kênh đó, gọi là "publish".

QoS

Ở đây có 3 tuỳ chọn *QoS (Qualities of service) * khi "publish" và

"subscribe":

QoS0 Broker/client sẽ gởi dữ liệu đúng 1 lần, quá trình gởi được xác

nhận bởi chỉ giao thức TCP/IP, giống kiểu đem con bỏ chợ

QoS1 Broker/client sẽ gởi dữ liệu với ít nhất 1 lần xác nhận từ đầu kia,

nghĩa là có thể có nhiều hơn 1 lần xác nhận đã nhận được dữ liệu

QoS2 Broker/client đảm bảm khi gởi dữ liệu thì phía nhận chỉ nhận

được đúng 1 lần, quá trình này phải trải qua 4 bước bắt tay

Một gói tin có thể được gởi ở bất kỳ QoS nào, và các client cũng có thểsubscribe với bất kỳ yêu cầu QoS nào Có nghĩa là client sẽ lựa chọn QoS tối

đa mà nó có để nhận tin Ví dụ, nếu 1 gói dữ liệu được publish với QoS2, vàclient subscribe với QoS0, thì gói dữ liệu được nhận về client này sẽ đượcbroker gởi với QoS0, và 1 client khác đăng ký cùng kênh này với QoS 2, thì

nó sẽ được Broker gởi dữ liệu với QoS2

Một ví dụ khác, nếu 1 client subscribe với QoS2 và gói dữ liệu gởi vàokênh đó publish với QoS0 thì client đó sẽ được Broker gởi dữ liệu với QoS0.QoS càng cao thì càng đáng tin cậy, đồng thời độ trễ và băng thông đòi hỏicũng cao hơn

RETAIN

Nếu RETAIN được set bằng 1, khi gói tin được publish từ Client,

Broker PHẢI lưu trữ lại gói tin với QoS, và nó sẽ được gởi đến bất kỳ Client

nào subscribe cùng kênh trong tương lai Khi một Client kết nối tới Broker vàsubscribe, nó sẽ nhận được gói tin cuối cùng có RETAIN = 1 với bất kỳ topicnào mà nó đăng ký trùng Tuy nhiên, nếu Broker nhận được gói tin mà có

Trang 33

QoS = 0 và RETAIN = 1, nó sẽ huỷ tất cả các gói tin có RETAIN = 1 trước

đó Và phải lưu gói tin này lại, nhưng hoàn toàn có thể huỷ bất kỳ lúc nào.Khi publish một gói dữ liệu đến Client, Broker phải se RETAIN = 1 nếugói được gởi như là kết quả của việc subscribe mới của Client (giống như tinnhắn ACK báo subscribe thành công) RETAIN phải bằng 0 nếu không quantâm tới kết quả của viẹc subscribe

LWT

Gói tin LWT (last will and testament) không thực sự biết được Client cótrực tuyến hay không, cái này do gói tin KeepAlive đảm nhận Tuy nhiên góitin LWT như là thông tin điều gì sẽ xảy đến sau khi thiết bị ngoại tuyến

Ví dụ

Tôi có 1 cảm biến, nó gởi những dữ liệu quan trọng và rất không thường

xuyên Nó có đăng ký trước với Broker một tin nhắn lwt ở topic offline với tin nhắn id của nó Và tôi cũng đăng ký theo dõi topic /node/gone- offline, sẽ gởi SMS tới điện thoại thôi mỗi khi nhận được tin nhắn nào ở kênh

/node/gone-mà tôi theo dõi

Trong quá trình hoạt động, cảm biến luôn giữ kết nối với Broker bởi việcluôn gởi gói tin keepAlive Nhưng nếu vì lý do gì đó, cảm biến này chuyểnsang ngoại tuyến, kết nối tới Broker timeout do Broker không còn nhận đượcgói keepAlive

Lúc này, do cảm biến của tôi đã đăng ký LWT, do vậy broker sẽ đóngkết nối của Cảm biến, đồng thời sẽ publish một gói tin là Id của cảm biến vào

kênh /node/gone-offline, dĩ nhiên là tôi cũng sẽ nhận được tin nhắn báo cái

Cảm biến yêu quý của mình đã ngoại tuyến

Ngắn gọn

Ngày đăng: 26/07/2017, 13:27

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w