Tải bản đầy đủ (.docx) (72 trang)

Báo cáo Bài tập lớn: Tìm hiểu về protocol Buffer

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.73 MB, 72 trang )

BỘ THÔNG TIN VÀ TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG

BÁO CÁO BÀI TẬP LỚN
MƠN HỌC: THIẾT KẾ NGOẠI VI VÀ KỸ THUẬT GHÉP NỐI
Đề tài lý thuyết:
Tìm hiểu về Protocol Buffer
Đề tài thực hành:
Thiết kế và chế tạo hệ thống nhà thông minh điều khiển qua Internet và
Google Assistant

Giảng viên hướng dẫn:

TS. Trần Thị Thúy Hà

Sinh viên thực hiện:

Trần Đức Hoàng Long

- B18DCDT137

Đoàn Duy Khánh

- B18DCDT109

Nguyễn Tiến Đức

- B18DCDT057

Nguyễn Đình Lợi


- B18DCDT141

Cấn Ngọc Đức

- B18DCDT053


Nhóm 15 - Nhà thơng minh

✵ HÀ NỘI, 2022 ✵
BỘ THƠNG TIN VÀ TRUYỀN THƠNG
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THÔNG

BÁO CÁO BÀI TẬP LỚN
MÔN HỌC: THIẾT KẾ NGOẠI VI VÀ KỸ THUẬT GHÉP NỐI
Đề tài lý thuyết:
Tìm hiểu về Protocol Buffer
Đề tài thực hành:
Thiết kế và chế tạo hệ thống nhà thông minh điều khiển qua Internet và
Google Assistant
2


Nhóm 15 - Nhà thơng minh

NHẬN XÉT CỦA GIẢNG VIÊN

3



Nhóm 15 - Nhà thơng minh

MỤC LỤC

4


Nhóm 15 - Nhà thơng minh

5


Nhóm 15 - Nhà thơng minh

DANH MỤC HÌNH ẢNH

6


Nhóm 15 - Nhà thơng minh

7


Nhóm 15 - Nhà thơng minh

PHẦN I:
BÀI TẬP LỚN LÝ THUYẾT

Đề tài lý thuyết:

Tìm hiểu về Protocol Buffer

8


Nhóm 15 - Nhà thơng minh

1. Protocol Buffer là gì?
Theo định nghĩa, Protocol Buffer hay gọi tắt là Protobuf là ngôn ngữ được phát triển
bởi Google tạo ra chuẩn sắp xếp mã hóa data với mục đích tạo ra chuẩn sắp xếp mã hóa data
với mục đích tạo buffer truyền và nhận giao tiếp một cách linh hoạt, hiệu quả, đơn giản và
tăng tốc độ truyền nhận. Chỉ cần định nghĩa cấu trúc data sử dụng protobuf tạo buffer, sau
đó bạn chỉ việc sử dụng hàm thư viện protobuf dễ dàng ghi và đọc cấu trúc data đó đến và
từ rất nhiều ngơn ngữ khác nhau. Có thể update lại cấu trúc data nhưng code chương trình sẽ
khơng cần phải thay đổi.
Bản chất của Protocol Buffer là định dạng dữ liệu truyền được mã hóa và giải mã dễ
dàng trên các ngôn ngữ khác nhau được protobuf hỗ trợ. Protobuf cung cấp cơ chế trung lập
về ngôn ngữ, nền tảng và có thể mở rộng để tuần tự hóa dữ liệu có cấu trúc theo cách tương
thích về phía trước và tương thích ngược. Nó giống như JSON nhưng lại nhỏ hơn và nhanh
hơn, giúp tạo ra các ràng buộc ngôn ngữ máy chủ.
Protobuf là sự kết hợp của ngôn ngữ được định nghĩa, mã mà trình biên dịch proto
tạo ra để giao tiếp với dữ liệu, thư viện thời gian chạy theo ngôn ngữ cụ thể và định dạng
tuần tự hóa cho dữ liệu được ghi vào tệp (hoặc gửi qua một kết nối mạng)

Hình 1 - Protocol Buffer là gì?

9


Nhóm 15 - Nhà thơng minh


2. Protocol Buffer giải quyết vấn đề gì?
Protobuf cung cấp định dạng tuần tự hóa cho các gói dữ liệu có cấu trúc, đã nhập, có
kích thước lên đến vài megabyte. Định dạng phù hợp cho cả lưu lượng mạng tạm thời và
lưu trữ dữ liệu dài hạn. Protobuf có thể được mở rộng với thông tin mới mà không làm mất
hiệu lực dữ liệu hiện có hoặc yêu cầu mã phải được cập nhật.
Tại Google thì Protobuf chính là bộ đệm giao thức dùng để định dạng dữ liệu được
sử dụng phổ biến nhất. Chúng được sử dụng rộng rãi trong giao tiếp giữa các máy chủ cũng
như để lưu trữ dữ liệu trên đĩa. Các “message” và “service” của Protobuf được mô tả bằng
các tệp .proto mà tác giả là những kỹ sư. Có thể đưa ra ví dụ về “message”:
message Person {
optional string name = 1;
optional int32 id = 2;
optional string email = 3;
}

Trình biên dịch proto được … tại thời điểm xây dựng trên các tệp .proto để tạo mã
bằng các ngơn ngữ lập trình khác nhau nhằm thao tác với bộ đệm giao thức tương ứng. Mỗi
lớp được tạo chứa các trình truy cập đơn giản cho từng trường hợp và phương thức để tuần
tự hóa , phân tích cú pháp toàn bộ cấu trúc đến từ các byte dữ liệu thơ. Sau đây là một ví dụ
sử dụng các phương pháp đã tạo ra đó:
Person john = Person.newBuilder()
.setId(1234)
.setName("John

Doe")

.setEmail("")
.build();
output = new FileOutputStream(args[0]);

john.writeTo(output);

10


Nhóm 15 - Nhà thơng minh

Vì protobuf được sử dụng rộng rãi trên tất cả các phương thức dịch vụ tại Google và
dữ liệu bên trong chúng có thể tồn tại trong một thời gian, nên việc duy trì khả năng tương
thích ngược là rất quan trọng. Bộ đệm giao thức cho phép hỗ trợ liền mạch các thay đổi, bao
gồm việc bổ sung các trường mới và xóa các trường hiện có, vào bất kỳ bộ đệm giao thức
nào mà khơng phá vỡ các dịch vụ hiện có.
Việc sử dụng Protobuf sẽ đem lại một số lợi ích nhất định. Protobuf là lý tưởng cho
bất kỳ tình huống nào mà bạn cần tuần tự hóa dữ liệu được đánh máy có cấu trúc, giống như
bản ghi, theo cách trung lập về ngơn ngữ, trung lập về nền tảng, có thể mở rộng. Chúng
thường được sử dụng nhiều nhất để xác định các giao thức truyền thông (cùng với gRPC) và
để lưu trữ dữ liệu. Một số lợi ích của việc sử dụng bộ đệm giao thức bao gồm:





Lưu trữ dữ liệu nhỏ gọn
Phân tích cú pháp nhanh
Có sẵn trong nhiều ngơn ngữ lập trình
Chức năng được tối ưu hóa thông qua các lớp được tạo tự động
Đặc biệt với khả năng tương thích đa ngơn ngữ, các thơng báo tương tự có thể được

đọc bằng mã được viết bằng bất kỳ ngơn ngữ lập trình nào được hỗ trợ. Bạn có thể có một
chương trình Java trên một nền tảng thu thập dữ liệu từ một hệ thống phần mềm, tuần tự hóa

nó dựa trên một .protođịnh nghĩa và sau đó trích xuất các giá trị cụ thể từ dữ liệu được tuần
tự hóa đó trong một ứng dụng Python riêng biệt chạy trên một nền tảng khác. Các ngôn ngữ
hỗ trợ trực tiếp như: C++, C#, Java, JavaScript, Kotlin, Objective-C, PHP, Python, Ruby.
Ngồi các tiện ích kể trên thì nó có thể tự cập nhật các định nghĩa mà không cần nhập
mã. Tiêu chuẩn cho các sản phẩm phần mềm là tương thích ngược, nhưng chúng ít phổ biến
hơn để tương thích về phía trước. Miễn là bạn làm theo một số thực hành đơn giản khi cập
nhật .proto định nghĩa, mã cũ sẽ đọc các thư mới mà khơng gặp vấn đề gì, bỏ qua bất kỳ
trường nào mới được thêm vào. Đối với mã cũ, các trường đã bị xóa sẽ có giá trị mặc định
và các trường lặp lại đã xóa sẽ trống.
Tuy nhiên sẽ có lúc mà Protobuf sẽ khơng phù hợp sử dụng do nó khơng phải tương
thích với tất cả dữ liệu. Đặc biệt là:
– Protobuf có xu hướng giả định rằng tồn bộ thơng báo có thể được tải vào bộ nhớ
cùng một lúc và không lớn hơn một biểu đồ đối tượng. Đối với dữ liệu vượt quá một
vài megabyte, hãy xem xét một giải pháp khác; khi làm việc với dữ liệu lớn hơn, bạn
có thể kết thúc hiệu quả với một số bản sao dữ liệu do các bản sao được tuần tự hóa,
điều này có thể gây ra mức sử dụng bộ nhớ tăng đột biến.
11


Nhóm 15 - Nhà thơng minh

– Khi protobuf được tuần tự hóa, cùng một dữ liệu có thể có nhiều tuần tự hóa nhị phân
khác nhau. Chúng ta khơng thể so sánh hai thơng báo về sự bình đẳng mà khơng
phân tích cú pháp đầy đủ.
– Tin nhắn khơng được nén. Mặc dù thư có thể được nén hoặc nén giống như bất kỳ
tệp nào khác, nhưng các thuật toán nén mục đích đặc biệt như các thuật tốn được sử
dụng bởi JPEG và PNG sẽ tạo ra các tệp nhỏ hơn nhiều cho dữ liệu thuộc loại thích
hợp.
– Thơng báo đệm giao thức kém hiệu quả tối đa về cả kích thước và tốc độ đối với
nhiều mục đích sử dụng khoa học và kỹ thuật liên quan đến mảng lớn, đa chiều của

số dấu phẩy động. Đối với các ứng dụng này, FITS và các định dạng tương tự có chi
phí thấp hơn.
– Protobuf khơng được hỗ trợ tốt trong các ngôn ngữ không hướng đối tượng phổ biến
trong máy tính khoa học, chẳng hạn như Fortran và IDL.
– Thông báo bộ đệm giao thức vốn dĩ không tự mơ tả dữ liệu của chúng, nhưng chúng
có một lược đồ phản ánh đầy đủ mà bạn có thể sử dụng để triển khai tự mơ tả. Có
nghĩa là, bạn không thể diễn giải đầy đủ một cái mà khơng có quyền truy cập vào
tệp .proto tương ứng của nó.
– Protobuf khơng phải là một tiêu chuẩn chính thức của bất kỳ tổ chức nào. Điều này
làm cho chúng không phù hợp để sử dụng trong các môi trường có yêu cầu pháp lý
hoặc các yêu cầu khác để xây dựng dựa trên các tiêu chuẩn hàng đầu.

12


Nhóm 15 - Nhà thơng minh

3. Cách thức hoạt động của Protocol Buffer

Hình 2 - Cách hoạt động của protocol Buffer (1)

Sơ đồ sau đây cho thấy cách chúng ta sử dụng protobuf để làm việc với dữ liệu:

Hình 3 - Cách hoạt động của protocol Buffer (2)

Mã được tạo bởi bộ đệm giao thức cung cấp các phương thức tiện ích để truy xuất dữ
liệu từ tệp và luồng, trích xuất các giá trị riêng lẻ từ dữ liệu, kiểm tra xem dữ liệu có tồn tại
hay khơng, tuần tự hóa dữ liệu trở lại tệp hoặc luồng và các chức năng hữu ích khác.
Các mẫu mã sau đây cho thấy một ví dụ về quy trình này trong Java. Như được hiển
thị trước đó, đây là tệp .proto định nghĩa:

message Person {
optional string name = 1;
optional int32 id = 2;
optional string email = 3;

13


Nhóm 15 - Nhà thơng minh
}

Việc biên dịch tệp .proto này sẽ tạo ra một Builder mà ta có thể sử dụng để tạo các
phiên bản mới, như trong mã Java sau:
Person john = Person.newBuilder()
.setId(1234)
.setName("John

Doe")

.setEmail("")
.build();
output = new FileOutputStream(args[0]);
john.writeTo(output);

Sau đó, bạn có thể giải mã dữ liệu bằng cách sử dụng các phương thức bộ đệm giao
thức tạo bằng các ngôn ngữ khác, chẳng hạn như C ++:
Person john;
fstream input(argv[1], ios::in | ios::binary);
john.ParseFromIstream(&input);
int id = john.id();

std::string name = john.name();
std::string email = john.email();

Khi xác định tệp .proto, có thể chỉ định một trường là optional hoặc repeated(proto2
và proto3) hoặc singular(proto3). (Tùy chọn đặt trường requiredkhơng có trong proto3 và
khơng được khuyến khích trong proto2. Sau khi thiết lập tính tùy chọn / khả năng lặp lại của
một trường, bạn chỉ định kiểu dữ liệu. Bộ đệm giao thức hỗ trợ các kiểu dữ liệu nguyên thủy
thông thường, chẳng hạn như Intergers, boolean và float.
Một trường cũng có thể là:
– Một kiểu message để bạn có thể lồng các phần của định nghĩa, chẳng hạn như cho
các tập dữ liệu lặp lại.
14


Nhóm 15 - Nhà thơng minh

– Một loại enum, vì vậy có thể chỉ định một bộ giá trị để lựa chọn.
– Một kiểu oneof mà có thể sử dụng khi thư có nhiều trường tùy chọn và nhiều nhất
một trường sẽ được đặt cùng một lúc.
– Một loại map, để thêm các cặp khóa-giá trị vào định nghĩa.
Trong proto2, thơng báo có thể cho phép các phần mở rộng tự xác định các trường
bên ngồi thơng báo. Ví dụ: lược đồ thông báo nội bộ của thư viện protobuf cho phép các
tiện ích mở rộng cho các tùy chọn tùy chỉnh, sử dụng cụ thể. Sau khi thiết lập tùy chọn và
loại trường, bạn chỉ định một số trường. Số trường không thể được thay thế hoặc sử dụng
lại. Nếu bạn xóa một trường, bạn nên bảo lưu số trường của nó để tránh ai đó vơ tình sử
dụng lại số.

15



Nhóm 15 - Nhà thơng minh

4. So sánh với các loại bộ đệm
Dưới đây là những ưu và nhược điểm của bộ đệm giao thức Protobuf và một số loại khác:
PROTOBUF
– Dữ liệu rất dày đặc, đầu ra

JSON
– Con người có thể đọc

XML
– Con người có thể đọc

nhỏ.
– Khó giải mã nếu khơng biết

và chỉnh sửa dễ dàng.
– Có thể phân tích cú

và chỉnh sửa dễ dàng.
– Có thể phân tích cú

lược đồ, định dạng dữ liệu

pháp mà khơng cần

pháp mà không cần

không rõ ràng và cần biết rõ
lược đồ.

– Xử lý rất nhanh, nhỏ hơn 3 –
10 lần so với XML hoặc
JSON
– Không dành cho con người

biết lược đồ.
– Các trình duyệt được

biết lược đồ.
– Tiêu chuẩn cho

hỗ trợ rất tốt.
– Ít dài dịng hơn

SOAP…
– Hỗ trợ tốt các cơng

XML.

cụ như xsd, xslt, sax,
dom …

vì nó là Binary.
– Tạo mã truy cập dữ liệu dễ
sử dụng hơn theo chương
trình.

16



Nhóm 15 - Nhà thơng minh

5. Kết luận
Protocol Buffer cung cấp một số lợi thế hấp dẫn so với JSON, XML ... để gửi dữ liệu
qua mạng giữa các internal service. Mặc dù khơng phải là sự thay thế hồn toàn cho JSON,
XML, đặc biệt là các dịch vụ được sử dụng trực tiếp bởi trình duyệt web, Protocol Buffer
cung cấp các lợi thế rất thực tế không chỉ ở các cách được nêu ở trên, mà còn về tốc độ mã
hóa và giải mã, kích thước của dữ liệu trên dây, và nhiều hơn nữa.

17


Nhóm 15 - Nhà thơng minh

18


Nhóm 15 - Nhà thơng minh

PHẦN II:
BÀI TẬP LỚN THỰC HÀNH
Đề tài thực hành:
Thiết kế và chế tạo hệ thống nhà thông minh điều khiển qua Internet và
Google Assistant

19


Nhóm 15 - Nhà thơng minh


1. Ý tưởng
SmartHome cịn được gọi là nhà thông minh. Khái niệm này để chỉ ngôi nhà hoặc
căn hộ được trang bị các thiết bị công nghệ. Đặc biệt các thiết bị công nghệ này được kết
nối với nhau tạo thành hệ thống mạng. Người dùng sẽ kiểm soát và điều khiển các thiết bị
này từ xa thơng qua smartphone hoặc máy tính bảng. Các thiết bị này sẽ được điều khiển
một cách tự động và đồng bộ rất đơn giản, dễ dàng.
Ngoài ra một yếu tố quan trong khác của nhà thơng minh đó là tính “thơng minh”,
tức là bản thân ngơi nhà phải có khả năng phản ứng trong một số tình huống nhất định. Đây
là một yếu tố cực quan trọng nhưng thường bị bỏ qua do cách thiết kế phức tạp hoặc người
thiết kế khơng tính tốn. Đây sẽ là tơn chỉ khi thiết kế hệ thống của nhóm.
Sau khi thảo luận và thống nhất, nhóm đặt ra các tiêu chí cho hệ thống như sau:
– Tự động hóa ngơi nhà: Các thiết bị trong nhà đều có thể bật/tắt thơng qua phím bấm
vật lí trong nhà và bật/tắt từ xa thơng qua internet. Một số vị trí đặc thù như cầu
thang, gara sẽ có thể bật/tắt thơng qua cả cảm biến chuyển động.
– Đảm bảo an ninh, an toàn cho ngơi nhà: Nhà phải có các hệ thống an ninh, an tồn tại
các khu vực nhạy cảm như cửa chính, bếp, phịng tắm.

Hình 4 - Mặt bên mơ hình

20


Nhóm 15 - Nhà thơng minh

2. Phương án và kịch bản thiết kế

21


Nhóm 15 - Nhà thơng minh


2.1. Phương án
Dựa vào u cầu của khách hàng cũng như tiêu chuẩn của một SmartHome, các
nhóm chức năng được mơ tả chung như sau:






Hệ thống khóa cửa thơng minh.
Hệ thống chiếu sáng thơng minh
Hệ thống đảm bảo an tồn.
Hiển thị thơng tin, giám sát và điều khiển.
Một số chức năng khác.
Sau đây là giải pháp mà nhóm đưa ra:

– Hệ thống khóa cửa thơng minh: Sử dụng kết hợp giữa đóng/mở qua phím vật lí ở
trong nhà, thơng qua web dashboard, qua smartphone và hệ thống mật khẩu. Tất cả
các phương thức này đều đồng bộ dữ liệu với nhau. Đảm bảo việc người dùng có thể
bật/tắt bằng bất kì phương pháp nào trong bất kì lúc nào.
– Hệ thống đèn chiếu sáng thơng minh: Có thể bật/tắt thơng qua phím vật lí hoặc qua
internet. Ở các vị trí đặc biệt như cầu thang, gara, phịng tắm thì có thể tự động
bật/tắt thơng qua cảm biến chuyển động.
– Hệ thống tự động điều chỉnh ánh sáng và cửa sổ ở phòng ngủ khi chuẩn bị đến giờ đi
ngủ.
– Hệ thống đảm bảo an toàn:
o Hệ thống cảnh báo cháy.
o Hệ thống phát hiện và phân tán khí gas tự động.
o Hệ thống giàn phơi thông minh tự động cất đồ khi trời mưa.

– Hệ thống hiển thị thông tin, giám sát và điều khiển:
o App trên điện thoại (Blynk).
o Web dashboard (Blynk)
o Điều khiển bằng giọng nói (Google Assistant).

22


Nhóm 15 - Nhà thơng minh

2.2. Kịch bản phục vụ thiết kế

23


Nhóm 15 - Nhà thơng minh

2.2.1. Khóa cửa thơng minh
Cửa có thể mở bằng 4 cách:
– Mở bằng phím bấm vật lí ở trong nhà
– Mở thơng qua ứng dụng trên điện thoại hoặc web dashboard
– Mở thông qua hệ thống an ninh sử dụng password. Có 2 password được thiết đặt sẵn
phịng trường hợp qn password.
– Mở thơng qua Google Assistant với khẩu lệnh: “Unlock front door” hoặc “Open front
door”
Hệ thống cửa có 3 trạng thái:
– Khóa: Cửa bị khóa, khi này nếu muốn mở mà khơng cần sử dụng mật khẩu, người
dùng sử dụng công tắc thủ công ở phía trong nhà hoặc mở thơng qua app, web. Cịn
khách ở ngồi nhà nếu muốn mở, mặc định phải có password. Chế độ này được sử
dụng khi khơng có chủ nhà ở nhà, không muốn người lạ tự ý vào, ban đêm...

– Đóng: Cửa ở trạng thái đóng, nhưng khơng khóa. Chế độ này giống như việc chúng
ta chỉ đóng cửa chứ khơng chốt khóa. Khi này mọi người dù ở trong hay ngồi nhà
đều có thể mở cửa. Với người trong nhà thì vẫn dùng phím bấm vật lí ở trong nhà,
app, web. Với người ở ngồi thì chỉ cần nhấn phím “*” là cửa sẽ mở.
– Mở: Cửa ở trạng thái mở. Lúc này nếu muốn đóng, có thể dùng cả 3 cách trên. Trong
đó nếu đóng bằng phím bấm vật lí ở trong nhà, đóng bằng app, đóng bằng web
dashboard thì mặc định cửa sẽ chuyển sang chế độ Khóa do ngầm hiểu khi này chủ
nhà khơng có mặt ở phịng khách hoặc khơng ở vị trí có thể giám sát cửa chính. Khi
đó, sử dụng chế độ khóa để đảm bảo an tồn. Cịn nếu bấm phím “*” ở keypad thì
cửa chỉ chuyển sang chế độ Đóng vì ngầm hiểu chủ nhà có việc ra ngồi một lát nên
khơng khóa để tránh bất tiện. Cịn trong trường hợp chủ nhà muốn khóa cửa thì sẽ
bấm phím “#”.

24


Nhóm 15 - Nhà thơng minh

Lưu đồ thuật tốn:

Hình 5 - Lưu đồ thuật tốn cửa thơng minh

25


×