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

Đồ án xây dựng nghiên cứu triển khai và phát triển hệ thống smarthome IOT

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 (2.01 MB, 58 trang )

TÓM TẮT
Đề tài mà em trình bày trong bài báo cáo này cũng đồng thời là dự án em đã ấp ủ
và thực hiện trong thực tế bắt đầu từ giữa tháng 6 năm 2016. Mục tiêu của dự án là phát
triển hệ thống Smarthome theo hướng Open source hoàn toàn. Ai cũng có thể tự tay thiết
lập một căn nhà thông minh theo thói quen sử dụng và ý thích của mình dựa trên các nền
tảng tự động hóa có sẵn. Đưa khái niệm Smarthome đến gần với mọi người hơn, xây dựng
một cộng đồng những người sử dụng Smarthome để cùng nhau học hỏi, chia sẻ giúp đỡ
lẫn nhau. Thực trạng Smarthome Việt Nam ở thời điểm đó hoàn toàn Close source, các
hãng cung cấp sao người dùng chỉ lựa chọn được như vậy. Không thể tùy biến phát triển
theo nhu cầu riêng, do vậy sinh ra nhiều bất cập. Hơn nữa, giá trị đích thực của
Smarthome không chỉ nằm ở các điều khiển thông minh mà còn ở các kịch bản tự động
nữa. Với một thế thống Smarthome Close source, người dùng không thể tạo ra các kịch
bản tự động cho riêng mình.
Tại thời điểm đó trên mạng Internet có 3 nền tảng tự động hóa mã nguồn mở về
Smarthome gồm: OpenHAB được viết bằng Java, Home Assistant được viết bằng Python
3. Trong đó Home Assistant nổi bật hơn cả nhờ sử dụng Python cung cấp cho mọi người 1
mã nguồn mở có khả năng tùy biến sâu. Từ đây em quyết định lựa chọn nền tảng mã
nguồn mở này làm dự án xây dựng phát triển nhà thông minh tại Việt Nam. Dự án được
em triển khai từ thời điểm giữa năm 2016. Cho đến nay trải qua chặng đường hơn 3 năm
phát triển, dự án đã đã thu được những thành quả nhất định. Cụ thể, dự án đã tạo ra được
một cú hích lớn vào thị trường Smarthome vốn đã rất ảm đạm tại Việt Nam. Từ đây một
xu hướng mới về Smarthome Open source tại Việt Nam chính thức được khởi động.
Tạo dựng cộng đồng người sử dụng là điều quyết định sự tồn tại và phát triển của dự
án. Bằng tất cả nỗ lực của bản thân em nói riêng và sự ủng hộ của các thành viên trong
cộng đồng nói chung. Đến nay sau hơn 20 tháng chính thức đi vào hoạt động, cộng đồng
về Smarthome trên Facebook thuộc dự án của em đã vượt lên tất cả để trở thành cộng
đồng về Smarthome lớn nhất tại Việt Nam. Với hơn 15.000 thành viên, tương tác đạt
40.000 bình luận/ trên tháng. Tỉ lệ thành viên hoạt động thường xuyên của nhóm đạt trên
90% tương đương hơn 13.500 thành viên.
Nội dung bài báo cáo gồm 4 chương:
CHƯƠNG 1. TỔNG QUAN


CHƯƠNG 2. CƠ SỞ LÝ THUYẾT VỀ PYTHON VÀ SQLITE
CHƯƠNG 3. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
CHƯƠNG 4. XÂY DỰNG CHƯƠNG TRÌNH
Chương một là phần tổng quan, giới thiệu qua về tính cấp thiết của đề tài, lý do lựa chọn
đề tài, mục tiêu, nhiệm vụ và kết quả đạt được của đồ án. Chương hai trình bày những
1


kiến thức cơ bản về lập trình Python, nền tảng mã nguồn mở Home Assistant và hệ cơ sở
dữ liệu mà nền tảng mở này sử dụng. Chương ba trình bày phân tích và thiết kế hệ thống
với sự hỗ trợ của công cụ lập trình Cloud9 IDE. Chương bốn xây dựng chương trình
gồm: xây dựng hệ thống, kết quả đạt được và phương hướng phát triển.

2


LỜI CAM ĐOAN
Em xin cam đoan đồ án này là công trình nghiên cứu của riêng em và được sự
hướng dẫn của thầy giáo Lương Hoàng Anh – giảng viên Trường Đại học Công nghệ
Giao thông vận tải. Các nội dung nghiên cứu, kết quả trong đề tài là trung thực, không sao
chép bất kỳ tài liệu nào và chưa công bố nội dung này ở đâu. Các nguồn trích dẫn có chú
thích rõ ràng, có tính kế thừa, phát triển từ các tài liệu, website.
Em xin chân thành chịu trách nhiệm về lời cam đoan của mình.

Hà Nội, ngày 30 tháng 08 năm 2019
Sinh viên thực hiện

Nguyễn Ngọc Sơn

3



LỜI CẢM ƠN
Sau quá trình học tập và nghiên cứu tại trường Đại học Công nghệ Giao thông vận
tải, được sự hỗ trợ và giúp đỡ từ quý thầy cô. Trước tiên, em xin phép được gửi lời cảm
ơn chân thành đến thầy giáo Lương Hoàng Anh – là người đã tận tình hướng dẫn,
khuyến khích, chỉ bảo và tạo điều kiện tốt nhất cho em từ khi bắt đầu cho tới khi hoàn
thành đồ án của mình.
Em xin chân thành cảm ơn Ban giám hiệu nhà trường cùng các thầy cô trong khoa
Công nghệ thông tin đã cung cấp kiến thức, đào tạo tận tình và tạo điều kiện tốt nhất cho
em trong suốt quá trình học tập và nghiên cứu tại Trường.
Em xin gửi lời cảm ơn đến các thành viên lớp 66DCTM22, những người đã luôn
bên em, cùng nhau học tập rèn luyện và động viên em trong quá trình hoàn thành đồ án
của mình.
Cuối cùng, em xin gửi lời cảm ơn đến gia đình, bạn bè đã tạo mọi điều kiện để em
có thể hoàn thành tốt đồ án tốt nghiệp này.
Trong quá trình hoàn thành đồ án của mình còn có nhiều sai sót, em mong nhận
được những lời nhận xét, góp ý, chỉ bảo từ các thầy cô để hoàn thiện đồ án tốt nhất.
Em xin chân thành cảm ơn!
Hà Nội, ngày 30 tháng 08 năm 2019
Sinh viên thực hiện

Nguyễn Ngọc Sơn

4


DANH MỤC HÌNH ẢNH

5



BẢNG THUẬT NGỮ VIẾT TẮT
Ký hiệu

IEEE

PHP

HTML

Viết tắt

Giải thích

Institute of Electrical
and Electronics
Engineers
Personal Home Page

Hyper
Text
Language

Là ngôn ngữ mô hình hóa thống nhất,
dùng để đặc tả, trực quan hóa và tư liệu
hóa phần mềm hướng đối tượn
Là một ngôn ngữ lập trình kịch bản hay
một loại mã lệnh chủ yếu được dùng để
phát triển các ứng dụng viết cho máy chủ,

mã nguồn mở, dùng cho mục đích tổng
quát.

Markup Là ngôn ngữ được thiết kế ra để tạo nên
các trang web.

NAS

Network
Storage

SQL

Structured
Language

Query Là hệ quản trị cơ sở dữ liệu tự do nguồn
mở phổ biến nhất thế giới.

JS

Javascript

Là ngôn ngữ lập trình kịch bản dựa trên
đối tượng được phát triển từ các ý niêm
nguyên mẫu

HTTP

Hyper Text

Protoco

CSDL

Cơ sở dữ liệu

CSS
ACID

Attached Thiết bị lưu trữ gắn vào mạng.

Transfer Là một trong năm giao thức chuẩn của
mạng Internet.
Là một tập hợp thông tin có cấu trúc. Dữ
liệu này được duy trì dưới dạng 1 tập hợp
các tập tin trong hệ điều hành hay được
lưu trữ trong các hệ quản trị cớ sở dữ liệu.

Cascading Style Sheet

Được dùng để miêu tả cách trình bày các
tài liệu viết bằng ngôn ngữ HTML.

Atomicity, Consistency,

Đây là bốn thuộc tính quan trọng của một
6


IoT


Isolation, và Durability

hệ quản trị cơ sở dữ liệu

Internet of Things

Là mạng lưới vạn vật kết nối Internet hoặc
là mạng lưới thiết bị kết nối Internet là
một liên mạng, trong đó các thiết bị,
phương tiện vận tải, phòng ốc và các trang
thiết bị khác được nhúng với các bộ phận
điện tử, phần mềm, cảm biến…

MQTT

Message
Queue Đây là một giao thức truyền thông điệp
(message) theo mô hình publish/subscribe
Telemetry Transport
(xuất bản – theo dõi), sử dụng băng thông
thấp, độ tin cậy cao và có khả năng hoạt
động trong điều kiện đường truyền không
ổn định.

SCADA

Là một hệ thống điều khiển giám sát và
thu thập dữ liệu. Nhằm hỗ trợ con người
trong quá trình giám sát và điều khiển từ

xa.

Supervisory Control
And Data Acquisition

7


CHƯƠNG I: TỔNG QUAN
1.1. LÝ DO CHỌN ĐỀ TÀI
Khi thế giới dần tiến vào kỷ nguyên Internet of Things (IoT), sử dụng các thiết
bị thông minh như smartphone, tablet để kết nối, điều khiển mọi vật dụng thì mô
hình nhà thông minh sẽ là xu hướng nhà ở mà tất cả mọi người đều muốn sở hữu.
Về cơ bản, hệ thống nhà thông minh cho phép điều khiển các thiết bị trong nhà như
đèn chiếu sáng, rèm cửa, điều hòa nhiệt độ, ti vi, giàn âm thanh, bình nóng lạnh…
một cách tự động và tập trung, nhằm tạo ra sự tiện nghi, thoải mái, tiết kiệm năng
lượng và an ninh.
Trên phạm vi toàn cầu, nhà thông minh được xem là một lĩnh vực có dư địa
phát triển rất lớn. Các đại gia công nghệ như Microsoft, Apple, Google, Samsung…
tỏ ra sốt sắng với xu hướng này bằng một loạt vụ thâu tóm. Google mua lại Nest
(hãng sản xuất bộ điều khiển nhiệt độ thông minh và thiết bị báo khói), Samsung ra
mắt hệ thống nhà thông minh khép kín trong các thiết bị của hãng, Apple giới thiệu
nền tảng phát triển ứng dụng nhà thông minh HomeKit.
Trở lại thời điểm cách đây khoảng 10 năm, tại nước ta nhà thông minh khi đó
là 1 khái niệm rất mới mẻ. Khi ấy, do chi phí để đầu tư một hệ thống nhà thông
minh rất lớn, vượt quá khả năng của nhiều người. Hơn nữa các thiết bị chỉ có thể
lắp đặt triển khai tại những căn nhà đang trong quá trình xây dựng. Còn với những
căn nhà đã hoàn thiện thì thiết bị chưa có khả năng tương thích với hệ thống điện
có sẵn, phải thiết kế lại hầu hết hệ thống điện. Chi tiết này khiến nhiều người dù có
tiền nhưng cũng rất ngại lắp đặt do phải đục đường thi công lại đường điện cần

thiết.
Hai công ty Việt Nam đứng đầu thị trường trong nước ở thời điểm đầu là BKAV và
LUMI. Cả hai công ty đều sử dụng công nghệ truyền dẫn không dây Zigbee cho
các thiết bị của mình.
Công nghệ ZigBee được xây dựng dựa trên tiêu chuẩn 802.15.4 của tổ chức
IEEE (Institute of Electrical and Electronics Engineers). Tiêu chuẩn 802.15.4 này
sử dụng tín hiệu radio có tần sóng ngắn, và cấu trúc của 802.15.4 có 2 tầng là tầng
vật lý và tầng MAC (medicum Access Control). Công nghệ ZigBee vì thế cũng
dùng sóng radio và có 2 tầng. Hơn thế nữa ZigBee còn thiết lập các tầng khác nhờ
thế mà các thiết bị của các nhà sản xuất dù khác nhau nhưng cùng tiêu chuẩn có thể
kết nối với nhau và vận hành trong vùng bảo mật của hệ thống.

8


Cụ thể với BKAV công ty này xây dựng một hệ thống Bkav Smarthome. Đây là
một hệ thống nhà thông minh hoàn chỉnh nhờ kết nối tất cả các thiết bị điện trong
nhà vào một hệ thống và điều khiển theo các kịch bản được lập trình sẵn. Hệ thống
trung tâm được trang bị hệ điều hành Bkav HomeOS có tính ổn định và mở rộng
tích hợp cao, cho phép kết nối tất cả các thiết bị điện (thiết bị chiếu sáng, bình nóng
lạnh, rèm cửa…); thiết bị an ninh; camera thành một hệ thống đồng bộ - điều mà
phần lớn các giải pháp nhà thông minh tại Việt Nam hiện nay chưa làm được (đa số
các giải pháp nhà thông minh trên thị trường phải lắp đặt hệ thống camera, hệ thống
an ninh độc lập). Các thiết bị điện thông minh của Bkav Smarthome được thiết kế
khá sang trọng.
Về tính năng, nhà thông minh của Bkav có thể điều khiển trực tiếp thông qua
thiết bị gắn trên tường hoặc điện thoại thông minh, máy tính bảng, có chức năng
điều khiển bằng giọng nói (tiếng Việt), tích hợp các kịch bản ngữ cảnh và tự thay
đổi kịch bản theo thời gian, hoàn cảnh phù hợp với thói quen của người sử dụng.
Tuy nhiên, do Bkav smarthome hiện sử dụng công nghệ truyền dẫn không dây

Zigbee của Singapore, nên giá bán khá cao so với mặt bằng chung. Cụ thể, Bkav
smarthome thế hệ 2 được chào bán với mức giá từ 30 – 70 triệu đồng, Bkav
Smarthome Luxury khoảng từ 250 - 300 triệu đồng.
Với Lumi, nhà thông minh của họ thuộc phân khúc trung cấp trên thị trường
thấp hơn so với định vị phân khúc của BKAV. Lumi Smarthome sản xuất và cung
cấp các thiết bị thông minh như chiết áp cảm ứng, cảm biến, bộ điều khiển hồng
ngoại, công tắc cảm ứng, bộ điều khiển trung tâm. Nhà thông minh của Lumi điều
khiển các thiết bị điện thông qua smartphone/máy tính bảng, điều khiển bằng giọng
nói (Sản phẩm ra mắt giữa năm 2017 nhận dạng được giọng nói tiếng Việt). Tùy
vào số lượng thiết bị, số phòng, số tầng của ngôi nhà, mỗi gia đình sẽ được trải
nghiệm nhà thông minh Lumi với giá từ 25 – 60 triệu cho một căn hộ chung cư,
hoặc từ 65 - 250 triệu cho một căn biệt thự.
Cho đến thời điểm hiện tại, hai công ty nói trên vẫn sử dụng công nghệ
Zigbee cho các sản phẩm của mình. Công nghệ này có ưu điểm là truyền dữ liệu ổn
định, tiêu thụ năng lượng cực thấp. Tuy nhiên lại có nhược điểm là giá thành phẩm
các thiết bị cao. Các thiết bị có khả năng tương thích với hệ thống điện có sẵn thấp.
Trước viễn cảnh đó em đặt ra trong đầu, hệ thống nhà thông minh tại Việt
Nam cần phải có khả năng tương thích với hệ thống điện có độ tương thích cao với
hệ thống điện có sẵn trong nhà hơn nữa. Giá thành phải rẻ hết mức có thể để hầu
hết những người đam mê đều có thể tiếp cận. Và điều đặc biệt quan trọng đó là có
9


thể thiết lập và tùy biến các Automation ( kịch bản, ngữ cảnh). Đây mới là điểm
đáng giá mà một hệ thống Smarthome cần phải có.
Smarthome không chỉ đơn thuần là tắt bật từ xa, nó còn phải tự động hóa nữa. Ví
dụ, chúng ta đi làm gần về tới nhà Bình nước nóng sẽ được bật hay máy lạnh sẽ
được mở trước.
Bên cạnh đó hệ thống còn phải liên kết được với các trợ lý ảo như Google home,
Amazon Alexa hay Apple Siri để điều khiển gia lệnh bằng giọng nói.

1.2. Mục tiêu của đề tài





Nghiên cứu xây dựng, thiết kế một hệ thống có khả năng kết nối và điều các
thiết bị Smarthome trên cơ sở nền tảng mã nguồn mở. Từ đó có thể điều
khiển các thiết bị đó trên điện thoại hoặc máy tính hay gia lệnh điều khiển
bằng giọng nói.
Thiết kế được giao diện người dùng thân thiện trực quan
Triển khai và sử dụng chương trình trong thực tế.

1.3. Giới hạn và phạm vi của đề tài




Trong phạm vi đề tài này em sẽ nghiên cứu các vấn đề:
Nghiên cứu xây dựng và phát triển một HUB có khả năng kết nối được nhiều
thiết bị với nhau, tạo ra một hệ thống điều khiển liên kết chặt chẽ.
HUB được xây dựng bằng ngôn ngữ lập trình Python 3.x

1.4. Kết quả dự kiến đạt được





Hệ thống HUB có khả năng tương thích cao với nhiều thiết bị Smarthome

hiện nay, cho phép tùy chỉnh tạo các Automation để ngôi nhà trở nên thông
minh và tiện ích hơn.
HUB chạy trên máy tính Raspberry Pi, chi phí tiết kiệm vận hành ổn định
không tiêu tốn nhiều điện năng
Hoàn thành báo cáo chi tiết đồ án tốt nghiệp.

10


CHƯƠNG II. CƠ SỞ LÝ THUYẾT VỀ PYTHON VÀ SQLITE
2.1. CỞ SỞ LÝ THUYẾT.
2.1.1. Cơ sở lý thuyết về lập trình Python.
a. Khái niệm về Python
Python là một ngôn ngữ lập trình thông dịch do Guido van Rossum tạo ra năm 1990.
Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ tự động; do vậy nó tương
tự như Perl, Ruby, Scheme, Smalltalk, và Tcl. Python được phát triển trong một dự án mã
mở, do tổ chức phi lợi nhuận Python Software Foundation quản lý.
Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho
người mới học lập trình. Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh
với số lần gõ phím tối thiểu, như nhận định của chính tác giả Guido van Rossum trong
một bài phỏng vấn ông.
Ban đầu, Python được phát triển để chạy trên nền Unix. Nhưng rồi theo thời gian, nó đã
“bành trướng” sang mọi hệ điều hành từ MS-OS đến Mac OS, OS/2, Windows, Linux và
các hệ điều hành khác thuộc họ Unix. Mặc dù sự phát triển của Python có sự đóng góp
của rất nhiều cá nhân, nhưng Guido van Rossum hiện nay vẫn là tác giả chủ yếu của
Python. Ông giữ vai trò chủ chốt trong việc quyết định hướng phát triển của Python.
Có thể coi Python là một ngôn ngữ phiên dịch (Interpreter Language), tức là không cần
build thành file thực thi mà chạy trực tiếp như PHP.
b. Lịch sử phát triển của Python
Hiện tại Python có 2 nhánh chính là 2.x và 3.x. Ở nhánh 2.x đã dừng phát triển và đang

đứng ở phiên bản 2.7. Nhánh Python 3.x thì vẫn đang được tiếp tục phát triển.
Sự phát triển Python đến nay có thể chia làm các giai đoạn:
Python 1: bao gồm các bản phát hành 1.x. Giai đoạn này, kéo dài từ đầu đến cuối
thập niên 1990. Từ năm 1990 đến 1995, Guido làm việc tại CWI (Centrum voor
Wiskunde en Informatica - Trung tâm Toán - Tin học tại Amsterdam, Hà Lan). Vì vậy, các
phiên bản Python đầu tiên đều do CWI phát hành. Phiên bản cuối cùng phát hành tại CWI
là 1.2.
Vào năm 1995, Guido chuyển sang CNRI (Corporation for National Research
Initiatives) ở Reston, Virginia. Tại đây, ông phát hành một số phiên bản khác. Python 1.6
là phiên bản cuối cùng phát hành tại CNRI. Sau bản phát hành 1.6, Guido rời bỏ CNRI để
làm việc với các lập trình viên chuyên viết phần mềm thương mại. Tại đây, ông có ý
tưởng sử dụng Python với các phần mềm tuân theo chuẩn GPL. Sau đó, CNRI và FSF
(Free Software Foundation - Tổ chức phần mềm tự do) đã cùng nhau hợp tác để làm bản
quyền Python phù hợp với GPL. Cùng năm đó, Guido được nhận Giải thưởng FSF vì Sự
phát triển Phần mềm tự do(Award for the Advancement of Free Software). Phiên bản
11


1.6.1 ra đời sau đó là phiên bản đâu tiền tuân theo bản quyền GPL. Tuynhiên, bản này
hoàn toàn giống bản 1.6, trừ một số sửa lỗi cần thiết.
Python 2: vào năm 2000, Guido và nhóm phát triển Python dời đến BeOpen.com
và thành lập BeOpen PythonLabs team. Phiên bản Python 2.0 được phát hành tại đây. Sau
khi phát hành Python 2.0, Guido và các thành viên PythonLabs gia nhập Digital
Creations.
Python 2.1 ra đời kế thừa từ Python 1.6.1 và Python 2.0. Bản quyền của phiên bản
này được đổi thành Python Software Foundation License. Từ thời điểm này trở đi, Python
thuộc sở hữu của Python Software Foundation (PSF), một tổ chức phi lợi nhuận được
thành lập theo mẫu Apache Software Foundation.
Python 3: còn gọi là Python 3000 hoặc Py3K: Dòng 3.x sẽ không hoàn toàn tương
thích với dòng 2.x, tuy vậy có công cụ hỗ trợ chuyển đổi từ các phiên bản 2.x sang 3.x.

Nguyên tắc chủ đạo để phát triển Python 3.x là "bỏ cách làm việc cũ nhằm hạn chế trùng
lặp về mặt chức năng của Python". Trong PEP (Python Enhancement Proposal) có mô tả
chi tiết các thay đổi trong Python. Các đặc điểm mới của Python 3.0 sẽ được trình bày
phần cuối bài này.
c. Khối lệnh trong Python
Trong các ngôn ngữ khác, khối lệnh thường được đánh dấu bằng cặp kí hiệu hoặc
từ khóa. Ví dụ, trong C/C++, cặp ngoặc nhọn { } được dùng để bao bọc một khối lệnh.
Python, trái lại, có một cách rất đặc biệt để tạo khối lệnh, đó là thụt các câu lệnh trong
khối vào sâu hơn (về bên phải) so với các câu lệnh của khối lệnh cha chứa nó.
Ví dụ, dưới đây là sự khác nhau giữa C/C++ và Python

#include <math.h>
//...
delta = b * b – 4 * a * c;
if (delta > 0) {
// Khối lệnh mới bắt đầu từ kí tự { đến }
x1 = (- b + sqrt(delta)) / (2 * a);
x2 = (- b - sqrt(delta)) / (2 * a);
printf("Phuong trinh co hai nghiem phan biet:\n");
printf("x1 = %f; x2 = %f", x1, x2);
}
Hình 1: Đoạn mã trong C/C++

12


import math
#...
delta = b * b – 4 * a * c
if delta > 0:

# Khối lệnh mới, thụt vào đầu dòng
x1 = (- b + math.sqrt(delta)) / (2 * a)
x2 = (- b – math.sqrt(delta)) / (2 * a)
print "Phuong trinh co hai nghiem phan biet:"
print "x1 = ", x1, "; ", "x2 = ", x2
Hình 2: Đoạn mã trong Python
d. Lệnh và cấu trúc điều khiển
Mỗi câu lệnh trong Python nằm trên một dòng mã nguồn. Ta không cần phải kết
thúc câu lệnh bằng bất kì kí tự gì. Cũng như các ngôn ngữ khác, Python cũng có các cấu
trúc điều khiển. Chúng bao gồm:
Cấu trúc rẽ nhánh: cấu trúc if (có thể sử dụng thêm elif hoặc else), dùng để thực thi có
điều kiện một khối mã cụ thể.
Cấu trúc lặp, bao gồm:
• Lệnh while: chạy một khối mã cụ thể cho đến khi điều kiện lặp có giá trị false.
• Vòng lặp for: lặp qua từng phần tử của một dãy, mỗi phần tử sẽ được đưa vào biến cục
bộ để sử dụng với khối mã trong vòng lặp.
Python cũng có từ khóa class dùng để khai báo lớp (sử dụng trong lập trình hướng đối
tượng) và lệnh def dùng để định nghĩa hàm.
e. Hệ thống kiểu dữ liệu
Python sử dụng hệ thống kiểu duck typing, còn gọi là latent typing (tự động xác
định kiểu). Có nghĩa là, Python không kiểm tra các ràng buộc về kiểu dữ liệu tại thời điểm
dịch, mà là tại thời điểm thực thi. Khi thực thi, nếu một thao tác trên một đối tượng bị thất
bại, thì có nghĩa là đối tượng đó không sử dụng một kiểu thích hợp.
Python cũng là một ngôn ngữ định kiểu mạnh. Nó cấm mọi thao tác không hợp lệ, ví dụ
cộng một con số vào chuỗi kí tự.
Sử dụng Python, ta không cần phải khai báo biến. Biến được xem là đã khai báo
nếu nó được gán một giá trị lần đầu tiên. Căn cứ vào mỗi lần gán, Python sẽ tự động xác
định kiểu dữ liệu của biến. Python có một số kiểu dữ liệu thông dụng sau:



int, long: số nguyên (trong phiên bản 3.x long được nhập vào trong kiểu int). Độ
dài của kiểu số nguyên là tùy ý, chỉ bị giới hạn bởi bộ nhớ máy tính.
13












float: số thực
complex: số phức, chẳng hạn 5+4j
list: dãy trong đó các phần tử của nó có thể được thay đổi, chẳng hạn [8, 2, 'b', -1.5]
. Kiểu dãy khác với kiểu mảng (array) thường gặp trong các ngôn ngữ lập trình ở
chỗ các phần tử của dãy không nhất thiết có kiểu giống nhau. Ngoài ra phần tử của
dãy còn có thể là một dãy khác.
tuple: dãy trong đó các phần tử của nó không thể thay đổi.
str: chuỗi kí tự. Từng kí tự trong chuỗi không thể thay đổi. Chuỗi kí tự được đặt
trong dấu nháy đơn, hoặc nháy kép.
dict: từ điển, còn gọi là "hashtable": là một cặp các dữ liệu được gắn theo kiểu {từ
khóa: giá trị}, trong đó các từ khóa trong một từ điển nhất thiết phải khác nhau.
Chẳng hạn {1: "Python", 2: "Pascal"}
set: một tập không xếp theo thứ tự, ở đó, mỗi phần tử chỉ xuất hiện một lần.

Ngoài ra, Python còn có rất nhiều kiểu dữ liệu khác nữa.

f. Sự đa năng của ngôn ngữ lập trình Python
 Python là một ngôn ngữ lập trình đơn giản nhưng rất hiệu quả.
• So với Unix shell, Python hỗ trợ các chương trình lớn hơn và cung cấp nhiều cấu trúc
hơn.
• So với C, Python cung cấp nhiều cơ chế kiểm tra lỗi hơn. Nó cũng có sẵn nhiều kiểu dữ
liệu cấp cao, ví dụ như các mảng (array) linh hoạt và từ điển (dictionary) mà ta sẽ phải
mất nhiều thời gian nếu viết bằng C.
 Python là một ngôn ngữ lập trình cấp cao có thể đáp ứng phần lớn yêu cầu của

lập trình viên:
• Python thích hợp với các chương trình lớn hơn cả AWK và Perl.
• Python được sử dụng để lập trình Web. Nó có thể được sử dụng như một ngôn ngữ kịch
bản.
• Python được thiết kế để có thể nhúng và phục vụ như một ngôn ngữ kịch bản để tuỳ biến
và mở rộng các ứng dụng lớn hơn.
• Python được tích hợp sẵn nhiều công cụ và có một thư viện chuẩn phong phú, Python
cho phép người dùng dễ dàng tạo ra các dịch vụ Web, sử dụng các thành phần COM hay
CORBA, hỗ trợ các loại định dạng dữ liệu Internet như email, HTML, XML và các ngôn
ngữ đánh dấu khác. Python cũng được cung cấp các thư viện xử lý các giao thức Internet
thông dụng như HTTP, FTP,…
• Python có khả năng giao tiếp đến hầu hết các loại cơ sở dữ liệu, có khả năng xử lí văn
bản, tài liệu hiệu quả, và có thể làm việc tốt với các công nghệ Web khác.
14


• Python đặc biệt hiệu quả trong lập trình tính toán khoa học nhờ các công cụ Python
Imaging Library, pyVTK, MayaVi 3D Visualization Toolkits, Numeric Python,
ScientificPython,…
• Python có thể được sử dụng để phát triển các ứng dụng desktop. Lập trình viên có thể
dùng wxPython, PyQt, PyGtk để phát triển các ứng dụng giao diện đồ họa (GUI) chất

lượng cao. Python còn hỗ trợ các nền tảng phát triển phần mềm khác như MFC, Carbon,
Delphi, X11, Motif, Tk, Fox, FLTK, …
• Python cũng có sẵn một unit testing framework để tạo ra các các bộ test (test suites).
2.1.2. Home Assistant và lập trình Python 3.x
a. Khái niệm về Home Assistant?
Home Assistant là một nền tảng tự động hóa ngôi nhà mã nguồn mở chạy
trên Python 3.x, được thiết kế để dễ dàng triển khai trên bất kỳ máy tính nào từ Raspberry
Pi đến các thiết bị lưu trữ trên mạng (NAS) hay thậm chí là một container Docker để triển
khai trên các hệ thống khác một cách dễ dàng.

Hình 3:Mô hình hoạt động của Home Assistant
Home Assistant tích hợp với một số lượng lớn các sản phẩm mã nguồn mở cũng
như thương mại, cho phép chúng ta liên kết các thiết bị, dữ liệu với nhau, ví dụ như
IFTTT (if this then that - công cụ để tự động hóa các thao tác), thông tin thời tiết hay
Amazon Echo, để kiểm soát phần cứng trong nhà, từ khóa cửa cho đến đèn điện.
Một số nền tảng tự động hóa nhà chỉ hỗ trợ Python như một phần mở rộng, nhưng
Home Assistant có thể chạy trên bất cứ thiết bị, dịch vụ nào có thể chạy Python 3, từ máy
tính để bàn đến Raspberry Pi. Dự án Home Assistant ra đời năm 2013, do Paulus
Schoutsen khởi xướng. Hiện tại, dự án này đã thu hút được 20 người hoạt động tích cực
và phát hành cập nhật 2 lần mỗi tuần.
b. Ưu điểm của việc sử dụng nền tảng mã nguồn mở như Home Assistant với thiết lập nhà
thông minh
15




Giống như hầu hết các hệ thống tự động, Home Assistant cung cấp bản client trên
điện thoại và máy tính để điều khiển các thiết bị nhà thông minh từ xa.




Home Assistant cũng không có các thành phần điện toán đám mây, hạn chế các khả
năng bị lộ hay hack vào hệ thống.



Vì Home Assistant không hoàn toàn khác biệt so với các framework IoT khác nên
nó dễ dàng kết nối với nhiều nền tảng khác nhau từ Nest đến Ardunio hay Kodi.



Có một điểm mạnh của Home Assistant do Python mang tới đó là: Việc mở rộng
hệ thống rất dễ dàng. Python là ngôn ngữ năng động, nó cho phép tạo ra sự linh
hoạt mà những nhà lập trình Java luôn thèm khát. Với Python thật dễ dàng để kiểm
tra và tạo các mẫu thử cho từng phần mới trên bản cài đặt hiện có mà không bị ảnh
hưởng vĩnh viễn đến các thành phần khác. Đặc biệt là với phiên bản Python mới
mà MicroPython vừa đưa ra dành cho các hệ thống nhúng, như Arduino và
ESP8266 thì khả năng nó sẽ trở thành ngôn ngữ chung cho tất cả các mức độ IoT,
từ cảm biến đến tự động hóa để tích hợp với các dịch vụ của bên thứ ba.

c. Khả năng thiết lập tùy biến tính năng mà Home Assistant cung cấp
Giám sát: Home Assistant sẽ theo dõi tình trạng của tất cả các thiết bị trong nhà
bạn thay cho bạn, miễn là các thiết bị đó nằm trong danh sách được Home
Assistant hỗ trợ. Tính tới thời điểm viết bài nền tảng này hỗ trợ hơn 1000 thiết bị
đến từ Nest, IFTTT, Google, Hue, MQTT,Facebook, Microsoft,…
• Điều khiển: Điều khiển tất cả các thiết bị từ một giao diện duy nhất, thân thiện với
điện thoại. Đặc biệt, nền tảng này không lưu trữ bất kỳ dữ liệu nào của người dùng
trên máy chủ, vì thế đảm bảo tính riêng tư khá cao.
• Tự động hóa: Thiết lập các quy tắc tiên tiến để kiểm soát thiết bị. Và từ đó biến

ngôi nhà của bạn thành một thiên đường sống đáng mơ ước.


2.1.3. Cơ sở lý thuyết về hệ quản trị CSDL SQLite
a. Mối liên hệ giữa Home Assistant và SQLite
Cơ sở dữ liệu mặc định được Home Assistant sử dụng là SQLite và tệp cơ sở dữ liệu được
lưu trữ trong thư mục cấu hình (config/.homeassistant/home-assistant_v2.db )

16


Hình 4:Cách thức xây dựng cơ sở dữ liệu trong Sqlite trong Home Assitant

17


b. Khái niệm về Sqlite

Hình 5:Lược đồ cơ sở dữ liệu của Sqlite
SQLite là phần mềm quản lý cơ sở dữ liệu (DBMS) tương tự như Mysql, PostgreSQL...
Đặc điểm của SQLite là gọn, nhẹ, đơn giản. Chương trình gồm 1 file duy nhất vỏn vẹn
chưa đến 400kB, không cần cài đặt, không cần cấu hình hay khởi động mà có thể sử dụng
ngay. Dữ liệu Database cũng được lưu ở một file duy nhất. Không có khái niệm user,
password hay quyền hạn trong SQLite Database.
SQLite không thích hợp với những hệ thống lớn nhưng ở quy mô vừa tầm thì SQLite phát
huy uy lực và không hề yếu kém về mặt chức năng hay tốc độ. Với các đặc điểm trên
SQLite được sử dụng nhiều trong việc phát triển, thử nghiệm … và là sự lưa chọn phù
hợp cho những người bắt đầu học Database.
SQLite Engine không là một Standalone Process giống như các cơ sở dữ liệu khác, chúng
ta có thể liên kết nó một cách tĩnh hoặc một cách động tùy theo yêu cầu với ứng dụng của

bạn. SQLite truy cập các file lưu giữ của nó một cách trực tiếp.
c. Ưu điểm của SQLite


SQLite không yêu cầu một tiến trình Server riêng rẽ để hoạt động.



SQLite không cần cấu hình, nghĩa là không cần thiết phải cài đặt.



Một SQLite Database đầy đủ được lưu giữ trong một disk file đơn.



SQLite là rất nhỏ gọn, nhỏ hơn 400kB đã đươc cấu hình đầy đủ hoặc nhỏ hơn
250kB khi đã bỏ qua các tính năng tùy ý.
18




SQLite là tự chứa, nghĩa là không có sự phụ thuộc vào ngoại vi.



Các Transaction trong SQLite là tuân theo đầy đủ chuẩn ACID, đảm bảo truy cập
an toàn từ nhiều tiến trình hoặc thread.




SQLite hỗ trợ hầu hết các tính năng của một ngôn ngữ truy vấn trong chuẩn
SQL92.



SQLite được viết bằng ANSI-C và cung cấp API đơn giản và dễ dàng sử dụng.



SQLite là có sẵn trên UNIX (Linux, Mac OS-X, Android, iOS) và Windows
(Win32, WinCE, WinRT).

2.2. CÔNG CỤ SỬ DỤNG
2.2.1 Tìm hiểu giao thức MQTT trong IoT
a. Khái niệm về MQTT?
MQTT : Message Queue Telemetry Transport
Đây là một giao thức truyền thông điệp (message) theo mô hình publish/subscribe
(xuất bản – theo dõi), sử dụng băng thông thấp, độ tin cậy cao và có khả năng hoạt động
trong điều kiện đường truyền không ổn định. MQTT là một giao thức nhắn tin gọn nhẹ
được thiết kế để liên lạc nhẹ giữa các thiết bị và hệ thống máy tính. MQTT được thiết kế
ban đầu cho các mạng SCADA, các kịch bản sản xuất và băng thông thấp, MQTT đã trở
nên phổ biến gần đây do sự phát triển của Internet-of-Things (IoT).
b. Kiến trúc mức cao (high-level) của MQTT

Hình 6:Kiến trức mức cao của MQTT
19



Kiến trúc mức cao (high-level) của MQTT gồm 2 phần chính là Broker và
Clients.Trong đó, broker được coi như trung tâm, nó là điểm giao của tất cả các kết nối
đến từ client. Nhiệm vụ chính của broker là nhận mesage từ publisher, xếp các message
theo hàng đợi rồi chuyển chúng tới một địa chỉ cụ thể. Nhiệm vụ phụ của broker là nó có
thể đảm nhận thêm một vài tính năng liên quan tới quá trình truyền thông như: bảo mật
message, lưu trữ message, logs,…
Client thì được chia thành 2 nhóm là publisher và subscriber. Client là các software
components hoạt động tại edge device nên chúng được thiết kế để có thể hoạt động một
cách linh hoạt (lightweight). Client chỉ làm ít nhất một trong 2 việc là publish các
message lên một topic cụ thể hoặc subscribe một topic nào đó để nhận message từ topic
này.
MQTT Clients tương thích với hầu hết các nền tảng hệ điều hành hiện có: MAC
OS, Windows, Linux, Androids, iOS…Chúng ta có thể hình dung broker giống như một
sạp báo. Publisher là các tòa soạn báo. Tòa soạn in báo và chuyển cho sạp báo. Người đọc
báo đến sạp báo, chọn tờ báo mình cần đọc (subscriber). Bởi vì giao thức này sử dụng
băng thông thấp trong môi trường có độ trễ cao nên nó là một giao thức lý tưởng cho các
ứng dụng M2M (Machine to machine).
c. Ưu điểm của MQTT
Giao thức MQTT cho phép hệ thống SCADA của bạn truy cập dữ liệu IoT. MQTT mang
lại nhiều lợi ích mạnh mẽ cho quy trình của bạn:


Chuyển thông tin hiệu quả hơn



Tăng khả năng mở rộng




Giảm đáng kể tiêu thụ băng thông mạng



Giảm tốc độ cập nhật xuống giây



Rất phù hợp cho điều khiển và do thám



Tối đa hóa băng thông có sẵn



Chi phí cực nhẹ



Rất an toàn với bảo mật dựa trên sự cho phép



Được sử dụng bởi ngành công nghiệp dầu khí, Amazon, Facebook và các doanh
nghiệp lớn khác



Tiết kiệm thời gian phát triển




Giao thức publish/subscribe thu thập nhiều dữ liệu hơn với ít băng thông hơn so
với giao thức cũ.
20


d. MQTT Bridge

Hình 7:Mô hình MQTT Bridge
MQTT Bridge là một tính năng của MQTT Broker cho phép các MQTT Broker có thể kết
nối và trao đổi dữ liệu với nhau. Để sử dụng tính năng này, ta cần tối thiểu 2 Broker, trong
đó, một Broker bất kỳ sẽ được cấu hình thành Bridge. Khi cấu hình MQTT bridge, ta cần
lưu ý tới các thông số sau:


address: địa chỉ của broker cần kết nối



bridge_protocol_version: phiên bản của giao thức MQTT đang sử dụng chung
cho 2 broker



topic: phần này định nghĩa 3 thong số: tên topic được trao đổi giữa 2 broker, chiều
trao đổi (1 chiều hay 2 chiều) và topic mapping giữa 2 broker

21



e. Bảo mật của MQTT

Hình 8:Ứng dụng của MQTT trong Smarthome

MQTT được thiết kế một cách nhẹ và linh hoạt nhất có thể. Do đó nó chỉ có 1 lớp bảo mật
ở tầng ứng dụng: bảo mật bằng xác thực (xác thực các client được quyền truy cập tới
broker).
Tuy vậy, MQTT vãn có thể được cài đặt kết hợp với các giải pháp bảo mật đa tầng khác
như kết hợp với VPN ở tầng mạng hoặc SSL/TLS ở tầng transport.
MQTT được thiết kế nhằm phục vụ truyền thông machine-to-machine nhưng thực tế
chứng minh nó lại linh hoạt hơn mong đợi. Nó hoàn toàn có thể áp dụng cho các kịch bản
truyền thông khác như: machine-to-cloud, cloud-to-machine, app-to-app. Chỉ cần có một
broker phù hợp và MQTT client được cài đặt đúng cách, các thiết bị xây dựng trên nhiều
nền tảng khác nhau có thể giao tiếp với nhau một cách dễ dàng.
Giao thức MQTT ra đời năm 1999 và tính đến thời điểm hiện tại, MQTT phiên bản 3.1.1
được công nhận chuẩn OASIS.

22


2.2.2. Tìm hiểu về môi trường thiết kế trực tuyến Cloud9 IDE
a. Khái niệm về Cloud9 IDE.

Hình 9:Cloud9 IDE trên Home Assistant

Cloud9 là 1 IDE online, khi chúng ta đăng nhập vào Cloud 9 , IDE sẽ cung cấp cho
chúng ta một workspace để làm việc. Công cụ này giống như một máy ảo đã cài đặt hầu
như đầy đủ những gì có thể code (php, git, ...). Với tài khoản free thì cấu hình máy ảo này

cũng khá khiêm tốn, 2GB HDD, 512 MB RAM, 1 CPU - tạm đủ để sử dụng IDE online
phục vụ cho việc lập trình các tính năng trên Home Assistant. Chúng ta chỉ cần open
workspace và có thể bắt đầu code và chạy luôn trên đấy mà không cần phải cài đặt gì cả.
b. Ưu điểm của Cloud9 IDE





Có thể code mọi lúc mọi nơi, chỉ cần máy và trình duyệt cài sẵn là đủ
Không cần cài đặt môi trường phức tạp, chỉ cần create workspace clone project về
là đã có thể bắt tay vào code được ngay.
Có riêng một máy ảo để làm việc và cài đặt thêm mọi thứ mình muốn
Deploy được lên host public có thể cho người khác xem luôn thành quả
23




Có thể làm việc nhóm, code chung với người khác khá tiện lợi

c. Hạn chế của việc sử dụng Cloud9 IDE



Cấu hình workspace của tài khoản free khá yếu
Vì là trình IDE online nên đôi lúc gõ code cảm giác vẫn có độ lag nhất định

24



CHƯƠNG III. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
3.1. KHẢO SÁT HỆ THỐNG
3.1.1. Lập mục tiêu cho hệ thống
Hệ thống nhà thông minh sẽ giúp chủ nhà làm chủ được căn nhà của mình.






Bật/tắt các thiết bị điện từ xa dễ dàng bằng Smartphone và điều khiển bằng giọng
nói
Theo dõi được trạng thái hoạt động của các thiết bị điện trong nhà từ xa
Thiết lập các kịch bản tự động khiến ngôi nhà trở nên hiểu chủ nhân hơn
Kiểm soát an ninh của nhà tốt hơn khi có thể tích hợp camera và các cảm biến
chuyển động, cảm biến cửa vào hệ thống.
Tiết kiệm điện năng, an toàn khi sử dụng

3.1.2. Lên kế hoạch cho dự án
Trình tự các bước thực hiện cho dự án





Bước 1: Tiến hành khảo sát hiện trạng căn nhà.
Bước 2: Tiến hành phân tích và thiết kế các chức năng.
Bước 3: Tiến hành xây dựng hệ thống.
Bước 4: Kiểm thử và đánh giá hệ thống.


3.1.3. Phát biểu bài toán
Chủ nhà cần một căn nhà có thể kiểm soát các thiết bị điện trên Smartphone và
máy tính, gia lệnh điều khiển bằng giọng nói. Bên cạnh đó căn nhà cần phải được tích hợp
hệ thống an ninh vào hệ thống như : Hệ thống camera giám sát, hệ thống cảm biến chuyển
động…
Với hệ thống khi hoàn thành, nếu chủ nhà phải đi công tác xa nhà, đi du lịch hay đi
làm, chỉ bằng cách sử dụng giao diện dardboard được thiết kế trên điện thoại và máy tính,
chủ nhà có thể bật/tắt các thiết bị điện tử một cách nhanh chóng chỉ với thao tác chạm.
Ngoài ra chủ nhà còn có thể điều khiển bằng giọng nói theo dõi trạng thái đang đóng hay
đang mở của thiết bị điện.

25


×