CHƯƠNG 2 : LINK KIỆN VÀ MODULE SỬ DỤNG
3.3 Bảo mật của giao thức MQTT
MQTT broker có thể yêu cầu tên người dùng và mật khẩu xác thực từ client để kết nối. Để đảm bảo tính bảo mật, kết nối TCP có thể được mã hóa với SSL/TLS (Transport Layer Security (TLS) protocol, Secure Sockets Layer (SSL) protocol).
Mặc dù MQTT được thiết kế gọn nhẹ, nó có hai nhược điểm làm hạn chế các thiết bị:
Mỗi client MQTT phải hỗ trợ TCP và thường sẽ giữ một kết nối mở đến broker ở mọi thời điểm. Đối với một số môi trường mà xác suất mất bản tin cao hay khơng có sẵn máy tính thì đây là cả một vấn đề.
Tên kênh MQTT thường là các chuỗi dài làm chúng không thỏa đáng với tiêu chuẩn 802.15.4 Cả hai thiết sót được giải quyết bằng giao thức MQTT-SN, trong đó xác định một ánh xạ UDP của MQTT và thêm khả năng lập chỉ mục (indexing) tên các kênh cho broker.
3.4 Cài đặt hệ điều hành và phần mềm cho Raspberry pi 2 3.4.1 Cài đặt hệ điều hành Raspberry pi 2
Công cụ chuẩn bị:
- Raspberry pi 2và Adapter nguồn (lưu ý điện áp đầu ra 5V và dòng 1.5A đến 2A) - Usb ttl PL2303 hoặc có thể dùng con Cp2102
- Driver PL2303 (nếu bạn dùng win 10 64bit) - Dây Breadboard
- Micro SD 8Gb và Adapter (có thể dùng đầu đọc thẻ bất kì) - Hệ điều hành Rasbian
- Phần mềm Rawrite32 - Phần mềm Putty
Chép file armbian vào thẻ nhớ bằng phần mềm Rawrite
Bước 1: Các bạn giải nén file Raspberry vừa tải về vào một thư mục, để ý file .raw dung lượng 1.5GB
Hinh 3. 4 Hình ảnh file Rasbian tải về
Bước 2: Bỏ thẻ nhớ vào Adapter hoặc đầu đọc thẻ sau đó kết nối vào máy tính. Bước 3: (Optional) Format thẻ nhớ, chọn FAT32 sau đó chọn OK.
Hinh 3. 5 Hình ảnh minh họa cho bước 3
Bước 4: Mở phần mềm Rawrite32 và chọn Open tìm thư mục đã giải nén Armbian chọn All file để hiển thị tất cả, click file .raw có dung lượng lượng 1.5GB nó sẽ tự động đọc.
Bước 5: Sau đó chọn thẻ nhớ ở Target và sau đó ấn vào Write to disk để tiến hành chép vào thẻ nhớ, mất khoảng 3-4 phút cho thao tác này.
Hinh 3. 6 Hình minh họa cho bước 5
Bước 6: Sau khi chép xong bạn có thể tắt phần mềm, tháo thẻ cẩn thận khỏi máy tính khơng tháo đột ngột nhé tránh lỗi thẻ khi cài về sau.
Đồ án tốt nghiệp đại học Chương 3 Tổng quan về mơ hình smart home
Kết nối USB TTL và cài đặt driver :
Bước này xảy ra nếu máy bạn không nhận driver của Usb ttl PL2303, thường xảy ra trên win10 các bạn tiến hành các thao tác sau:
Bước 1: Giải nén thư mục PL2303 vừa tải và chạy file .exe để cài đặt.
Bước 2: Kết nối Usb ttl vào máy tính, vào trình quản lý chọn Manage -> chọn Device Manager -> ở mục Ports (COM & LPT) ta sẽ thấy lỗi chưa nhận thiết bị có dấu chấm thang, click chuột phải vào dấu chấm thang chọn Update Driver Software.
Hinh 3. 7 Hinh minh họa cho bước trên
Bước 3: Chọn Browser my computer for driver software -> chọn Let me pick from a list of drivers on my computer -> chọn phiên bản 3.3.2.105 [10/27/2008] -> và kết thúc bằng Next. Lúc này driver sẽ nhận và khơng cịn dấu chấm thang bạn hãy ghi nhớ tên COM.
Tiến hành cài đặt hệ điều hành:
Bước 1: Gắn thẻ nhớ vào Raspberry pi 2-> kết nối các dây breadboard giữa Usb ttl và Raspberry pi theo bảng bên dưới -> Cắm Usb ttl vào máy tính.
Hinh 3. 8 Sơ đồ chân kết nối usb ttl và module Raspberry pi2
Bước 2: Mở phần mềm Putty -> chọn kết nối Serial (mặc định là SSH) -> nhập tên COM bạn đã ghi nhớ trong mục cài driver lúc nãy (ví dụ của mình là COM6, nếu bạn quên hãy vào lại Divice Manager xem Ports) -> nhập tốc độ truyền 115200 (mặc định là 9600) -> nhấn Open để mở.
Đồ án tốt nghiệp đại học Chương 3 Tổng quan về mơ hình smart home Bước 3: Lúc này cắm nguồn vào cho Raspberry pi 2, sẽ thấy trên màn hình Putty chương trình sẽ tự động cài đặt trong khoản 1 phút (nếu như bước này không thực hiện được hãy cẩn thận rút nguồn -> rút Usb ttl sau đó tháo thẻ lau sạch và tiến hành lại Bước 1 .
Hinh 3. 10 Hình ảnh minh họa cho bước 3
Bước 4: Tiếp theo tiến hành đăng nhập (tắt Vietkey để tránh bị dấu gây lỗi), nhập vào dòng login: root, dòng Password: 1234, dòng (current) UNIX password: nhập lại 1234, tiếp đến sẽ yêu cầu nhập pass mới và nhập lại xác nhận pass mới chọn một mật khẩu an toàn và độ dài ít nhất 8 kí tự.
Bước 5: Tiếp tục đăng nhập login lại lần nữa với lệnh root và password là pass mới tạo ở bước trên, màn hình giao diện debian sẽ xuất hiện như bên dưới. Nó sẽ yêu cầu bạn tạo cái username nhập tên muốn vào (ví dụ: arduino), tiếp đến nó tạo một loạt các thông tin cho bạn điền như: Full Name, Room Number, Work Phone, Home Phone, Other bạn có thể điền vào tùy thích hoặc có thể Enter bỏ qua cũng được. Dịng kế tiếp là xác nhận thơng tin bạn nhập Y để đồng ý, tiếp đến nó hỏi bạn có muốn thay đổi cài đặt màn hình hiện tại bạn chọn N để tiết kiệm năng lượng. Như vậy là bạn đã hoàn thành bước cơ bản cho việc cài đặt hệ điều hành cho Raspberry pi 2
Hinh 3. 12 Hình minh họa cho bươc 5
Thiết lập vào mạng lần đầu tiên cho Raspberry pi 2:
Để tiện lợi cho việc sử dụng về sau, sẽ cho con Orange Pi này kết nối vào mạng wifi lúc đó bạn sẽ không cần phải dùng con Usb ttl để đăng nhập Putty qua Serial nữa mà thông qua SSH. Các bạn thực hiện command các lệnh sau:
Bươc 1 : thực hiện lệnh command, vi /etc/network/interfaces
Đồ án tốt nghiệp đại học Chương 3 Tổng quan về mơ hình smart home Bước 2: Các bạn dùng phím xuống di chuyển con trỏ xuống cuối sau đó bạn nhấn phím Insert (hoặc tổ hợp fn + insert) để nhập lệnh sau:
- auto wlan0
- iface wlan0 inet dhcp
- wpa_conf /etc/wpa_supplicant/wpa_supplicant.conf
Hinh 3. 14 Hình ảnh minh họa cho bước 2
Bước 3: Bạn nhấn phím Insert (hoặc tổ hợp fn + insert) để nhập các dòng sau: network={
ssid="tên wifi nhà bạn" psk="mật khẩu wifi" }
Hinh 3. 15 Hình ảnh mơ tả cho bước 3
Bước 4: Nhấn phím ESC sau đó tổ hợp phím Shift + Z Z về lại chế độ command bạn nhập lệnh sau:
- ifconfig wlan0 up - ifup wlan0
Đồ án tốt nghiệp đại học Chương 3 Tổng quan về mơ hình smart home Bước 5: Nhập lệnh ifconfig để kiểm tra lại IP hiện tại, sau khi có IP mở lại Putty và nhập vào khung IP address của loại kết nối SSH, ô Port nhập vào 22 (mặc định) và Open và tiến hành đăng nhập bình thường .
Hinh 3. 17 Hình ảnh mơ tả cho bước 5
3.4.2 Cài đặt phần mềm mosquitto để đưa Raspberry pi trở thành MQTT Broker Broker
Mosquitto là một MQTT broker nguồn mở, đóng vai trị trung gian giúp cho các chương trình và thiết bị dễ dàng trao đổi data với nhau. Data được truyền và nhận thông qua các channel (hay còn gọi là topic). Với các channel, ta có thể gửi data tới đó hoặc đăng ký nhận bất kỳ dữ liệu nào gửi tới nó.
Ví dụ: có 1 channel cho mỗi thiết bị cảm biến trong nhà được nhóm lại theo phịng: /FirstFloor/Living/Temperature
/FirstFloor/Living/Humidity /FirstFloor/Kitchen/Temperature ...
Trên OpenHAB ta sẽ tao ra giao diện gồm các item và cấu hình cho các item này đăng ký nhận dữ liệu từ các thiết bị cảm biến dùng các channel tương ứng.
Để cài đặt Mosquitto trên Orange pi one, copy paste các lệnh sau vào cửa sổ Putty console kết nối tới Pi:
Kiểm tra mosquitto: Mosquitto sẽ tự động chạy sau khi được cài đặt. Để kiểm tra, mở 1 terminal khác (terminal 2) kết nối vào Pi.
Trong terminal 1 chạy lệnh lắng nghe data trên channel tên là hello/world (“-d” là yêu cầu in ra thông tin debug, “-t” là tên channel hay còn gọi là topic):
mosquitto_sub -d -t hello/world
Cho terminal 2 gửi data bất kỳ vào channel cùng tên hello/world như đăng ký trong terminal 1(“- m” là nội dung data cần gửi):
mosquitto_pub -d -t hello/world -m "Greetings from Terminal window 2"
Nếu Mosquitto đang chạy thì ta sẽ thấy tin nhắn gửi đi từ terminal 2 trong terminal 1
3.4.3 Giới thiệu về phần mềm quản lý thiết bị vào giao diện người dùng openhab openhab
OpenHAB là phần mềm miễn phí nguồn mở có chức năng là bộ điều khiển trung tâm với khả năng nói chuyện và điều khiển rất nhiều các loại thiết bị khác nhau trong hệ thống Smart Home, kể cả các thiết bị thương mại đang bán trong lĩnh vực này.
OpenHAB được cài đặt dưới dạng một website trên máy tính Raspberry pi (hoặc chạy trên Windows cũng được). Khi truy cập vào website này từ các thiết bị như PC, smart phone hay tablet, ta có thể xem trạng thái căn nhà và điều khiển các thiết bị. Ngồi ra OpenHAB cịn có một engine quản lý và thực thi các rules giúp cho căn nhà thông minh hơn bằng cách tự động điều chỉnh khi trạng thái các cảm biến thay đổi.
3.4.4 Cài đặt openhab trên Raspberry pi 2
Cài đặt OpenHAB trong thư mục /opt/openhab: cd /opt/openhab
Tải về OpenHAB ở của OpenHAB dùng version mới nhất (là 1.8.2 tại thời điểm bài viết). Nếu tải về phiên bản mới hơn thì chỉ cần thay “1.8.2” trong các command dưới đây thành version đó là được. Trước tiên ta sẽ tải về file core runtime, giải nén và xóa file zip:
sudo wget https://bintray.com/artifact/download/openhab/bin/distribution-1.8.2-runtime.zip sudo unzip distribution-1.8.2-runtime.zip
sudo rm distribution-1.8.2-runtime.zip
Tiếp đến là các addons, ta sẽ download hết và bỏ vào folder riêng. Sau đó ta sẽ copy những addon nào cần mà thôi, giảm thời gian khởi động của OpenHAB:
sudo mkdir addons_repo cd addons_repo
sudo wget https://bintray.com/artifact/download/openhab/bin/distribution-1.8.2-addons.zip sudo unzip distribution-1.8.2-addons.zip
sudo rm distribution-1.8.2-addons.zip
Trước mắt ta chỉ cần addon binding cho MQTT: cd /opt/openhab
Đồ án tốt nghiệp đại học Chương 3 Tổng quan về mơ hình smart home
3.4.5 Cấu hình MQTT Binding
Tạo ra file config cho OpenHAB từ file config default và sửa lại: sudo cp /opt/openhab/configurations/openhab_default.cfg /opt/openhab/configurations/openhab.cfg
sudo nano /opt/openhab/configurations/openhab.cfg
Trong cửa sổ editor, scroll xuống phần MQTT Transport section (trong mục Transport
Configurations), bỏ qua phần MQTT Persistence. Tìm đến dịng <broker>.url và <broker>.retain, bỏ dấu # ở đầu mỗi dịng và sửa thành:
mqtt:mymosquitto.url=tcp://localhost:1883 mqtt:mymosquitto.retain=true
Thốt và lưu lại (CTRL + X, Y, Enter).
3.4.6 Cấu hình các thiết bị (item) và giao diện (site map) cho openhab
Sau khi OpenHAB được cài đặt, ta cần cấu hình 2 file:
- Items file, chứa danh sách các thiết bị ta cần OpenHAB theo dõi và điều khiển.
- Sitemap file, chứa layout sắp xếp các thiết bị hiển thị trên giao diện website của OpenHAB. Upload toàn bộ các thư mục con và file openhab.cfg vào trong thư mục
/opt/openhab/configurations/ trên Orange pi. Sử dụng phần mềm WinSCP để dễ dàng chuyển file qua lại giữa PC Windows và Orange pi one .
Sau khi đăng nhập: host name (IP của Orang pi) và user name, password của Raspberry ơi ->Login
Hinh 3. 19 Hinh ảnh đăng nhập vào Raspberry pi băng winSCP
Hinh 3. 20 Hình mơ tả cho bước trên
Trong file demo.item, file demo.sitemap file cấu hình giao diện web cho openhab và cấu hình điều khiển hoạt động giao tiếp của MQTT broker với MQTT client
- Cho 3 phịng trong nhà nằm trong nhóm “All”: Group All
Group Living "Living Room" <sofa> (All) Group Kitchen "Kitchen" <kitchen> (All)
Group Bedroom1 "Main Bedroom" <bedroom> (All) Group Bedroom2 "Second Bedroom" <bedroom> (All) /*Living room */
Number Temperature1 "Temperature [%.1f C]" <temperature> (Living) {mqtt="<[mymosquitto:/Living/Temperature:state:default]"}
Switch Light1 "Light" (Living)
{ mqtt="<[mymosquitto:/Living/Light/Status:state:default],>[mymosquitto:/Living/Light/Comma nd:command:ON:1],>[mymosquitto:/Living/Light/Command:command:OFF:0]" }
/*Kitchen */
Number Temperature2 "Temperature [%.1f C]" <temperature> (Kitchen) {mqtt="<[mymosquitto:/Kitchen/Temperature:state:default]"}
Switch Light2 "Light" (Kitchen)
{ mqtt="<[mymosquitto:/Kitchen/Light/Status:state:default],>[mymosquitto:/Kitchen/Light/Com mand:command:ON:1],>[mymosquitto:/Living/Light/Command:command:OFF:0]" }
/*Main Bedroom */
Number Temperature3 "Temperature [%.1f C]" <temperature> (MainBedroom) {mqtt="<[mymosquitto:/MainBedroom/Temperature:state:default]"}
Đồ án tốt nghiệp đại học Chương 3 Tổng quan về mơ hình smart home Switch Light3 "Light" (MainBedroom)
{ mqtt="<[mymosquitto:/MainBedroom/Light/Status:state:default],>[mymosquitto:/MainBedroo m/Light/Command:command:ON:1],>[mymosquitto:/Living/Light/Command:command:OFF:0]" }
/*Second Bedroom */
Number Temperature4 "Temperature [%.1f C]" <temperature> (SecondBedroom) {mqtt="<[mymosquitto:/SecondBedroom/Temperature:state:default]"}
Switch Light4 "Light" (SecondBedroom)
{ mqtt="<[mymosquitto:/SecondBedroom/Light/Status:state:default],>[mymosquitto:/SecondBed room/Light/Command:command:ON:1],>[mymosquitto:/Living/Light/Command:command:OFF :0]" }
Mỗi phịng đều có 1 cơng tắc đèn và cảm biến nhiệt độ. Ý nghĩa các tham số của cảm biến nhiệt độ:
Number: loại dữ liệu mà sensor này gửi/nhận, ta dùng Number vì nhiệt độ là số. Temperature1/2/3/4: tên của thiết bị (item).
“Temperature [%.1f C]”: format data mình muốn hiển thị. “%.1f” là hiển thị data là số thập phân 1 số lẻ và C là độ C).
<temperature>: icon hiển thị kèm với thiết bị này (hình nhiệt kế). (Living): nhóm mà thiết bị này thuộc về.
{mqtt=”<[mymosquitto:/Living/Temperature:state:default]”}: nguồn lấy dữ liệu. OpenHAB sẽ sử dụng MQTT tên là “mymosquitto” (giống như mình cấu hình ở phần trên) và lắng nghe data gửi tới channel tên là /Living/Temperature. “state” là loại, thể hiện là OpenHAB hiển thị trạng thái (một loại khác là “command” yêu cầu OpenHAB điều khiển) và “default” là công thức chuyển đổi data . Dấu < ở đầu ý nghĩa là yêu cầu OpenHAB đọc data từ channel thay vì gửi tới đó. Ý nghĩa các tham số của công tắc đèn:
Switch: thiết bị này là loại công tắc On/off Light1/2/3/4: Tên thiết bị
(Living): nhóm mà thiết bị này thuộc về
<[mymosquitto:/Living/Light/Status:state:default]: Dấu < là báo cho OpenHAB biết nguồn lấy trạng thái của công tắc. OpenHAB sẽ lắng nghe trạng thái của công tắc ở channel tương ứng để cập nhật lên giao diện người dùng. Sau này chúng ta sẽ lập trình cho các cơng tắc điện trong phịng gửi trạng thái On/Off (khi có người bật/tắt bằng cơng tắc) đến cho OpenHAB ở channel tương ứng
>[mymosquitto:/Living/Light/Command:command:ON:1]: Dấu > là báo cho OpenHAB biết khi người dùng bật công tắc trên giao diện web, OpenHAB sẽ gửi lệnh tên là 1 tới channel tương ứng. Khi đó ta sẽ lập trình cho cơng tắc điện lắng nghe trên channel này và bật lên nếu nhận được command 1 từ OpenHAB
>[mymosquitto:/Living/Light/Command:command:OFF:0]: Tương tự cho trường hợp OFF, OpenHAB sẽ gửi đến channel tương ứng command là 0
File sitemap nằm trong thư mục /opt/openhab/configurations/sitemaps/default.sitemap
Trong sitemap, ta sẽ add một frame cho toàn bộ giao diện. Bên trong gồm 4 frame dành cho 4 phòng tương ứng:
sitemap default label="My Smart Home" {
Frame label="Living Room" { Text item=Temperature1 Switch item=Light1 } Frame label="Kitchen" { Text item=Temperature2 Switch item=Light2 }
Frame label="Main Bedroom" { Text item=Temperature3 Switch item=Light3 }
Frame label="Second Bedroom" { Text item=Temperature4 Switch item=Light4 } } Bật OpenHAB bằng command: sudo /opt/openhab/start.sh
OpenHAB có thể cần 1-2 phút để khởi động. Màn hình hiển thị khi chạy của OpenHAB:
Đồ án tốt nghiệp đại học Chương 3 Tổng quan về mơ hình smart home Mở trình duyệt và đến URL http://192.168.1.80:8080/openhab.app (thay 192.168.1.80 bằng IP của Raspberry pi) và sẽ thấy giao diện OpenHAB.
Hinh 3. 22 Hình ảnh giao diện Openhab
Tự khởi động openhab khi Raspberry pi khởi động:
Bước trên mình chạy OpenHAB bằng lệnh nhưng ta muốn OpenHAB sẽ tự động bật khi Pi khởi động. Khi đó khơng phải chạy lệnh mỗi khi mất điện hay tắt mở Pi.
Tạo ra file tên là openhab trong thư mục /etc/init.d sudo nano /etc/init.d/openhab
Copy và paste nội dung script này vào cửa sổ editor và save lại. Gán quyền execute choa script: sudo chmod 777 /etc/init.d/openhab
Bật script này chạy khi Pi khởi động: sudo update-rc.d openhab defaults
Bạn có thể dùng các lệnh sau để start, stop, restart và xem status hiện tại của OpenHAB: sudo /etc/init.d/openhab start
sudo /etc/init.d/openhab status sudo /etc/init.d/openhab stop sudo /etc/init.d/openhab restart
Có thể xóa script đi nếu muốn làm lại: sudo update-rc.d -f openhab remove
CHƯƠNG 4 CHƯƠNG TRÌNH HOẠT ĐỘNG CỦA CLIENT TRONG MƠ HÌNH MART HOME
4.1 Mạch thiết kế điều khiển thiết bị
Hình 4. 1 Mạch in điều khiển thiết bị bằng wifi trong mơ hình smart home, mặt top