Hình 4.5 Form load account.
Form load account chỉ gồm 1 nút nhấn và 1 data grid. Khi click vào load account thì sẽ có hàm foreach. Hàm này sẽ đếm được tất cả các phần từ trong sever và load tất cả chúng ra để show trong data grid view. Tuy nhiên đây là vấn đề ảnh hưởng tới sự bảo mật của người dùng và hiện tại sản phẩm đang nằm ở mức độ đề tài. Nếu thương mại thì việc show account user là việc quan trọng chỉ dành cho một số bộ phận quan trọng trong tiếp quản hệ thống mới được sử dụng nhằm mục đích bảo vệ quyền lợi người dùng. 3.3.5. thuật toán và giao diện form control
Form Control sẽ gồm 2 TabItem trong đó có:
TabItem giao diện hiển thị nhiệt độ, độ ẩm khí ga. Ba giá trị này sẽ được liên tục cập nhập từ sever của firebase và nó hoàn toàn thỏa mãn vấn đề read time.
TabItem giao diện điều khiển các thiết bị. Ở đây mặc định là 5 thiết bị và trạng thái của 5 thiết bị đó tượng trưng cho 5 bóng đèn. Màu vàng biểu thị trạng thái On và màu đỏ biểu thị cho trạng thái Off. Các nút nhấn On, Off sẽ trực tiếp gửi giá trị sau khi được
click từ tài khoản đăng nhập hiện tại lên sever và sau đó bóng đèn trạng thái của thiết bị đó sẽ đọc các trạng thái từ sever để update trạng thái hiện tại sau đó cập nhật trạng thái bằng cách thay đổi màu của nó.
Hình 4. 6 Form load giá trị nhiệt độ phòng.
Hình 4.8 Listener event from firebase.
Mỗi lần đăng nhập thành công. Form Login sẽ bị đóng lại và bắt đầu mở form Control, việc đầu tiên sau khi form control bắt đầu mở lên là load tất cả dữ liệu từ sever của tài khoản vừa đăng nhập đó về và update vào tất cả các status hiện có.
Đối với TabItem show các giá trị nhiệt độ, độ ẩm, khí ga thì các giá trị sẽ thay đổi khi load dữ liệu lần đầu khi login thành công. Sau đó mỗi khi giá trị của chúng thay đổi trên sever (tức là giá trị đó khác chính nó) thì sever sẽ gửi một thông báo về cho ứng dụng của chúng ta và gọi đó là listener.
Đối với TabItem show các status của các thiết bị cũng tương tự như đối với TabItem show các giá trị nhiệt độ, độ ẩm, khí ga như trên. Tuy nhiên ở Tab này có thêm các nút nhấn điều khiển thiết bị và mỗi khi nhấn nút, load data sẽ thực hiện load dữ liệu về để update lại các status hiện tại của thiết bị.
3.3.6. Phần mềm dành cho người dùng.
Với sự phát triển nhanh chóng của Smartphone cũng như Tablet. Hệ thống thiết bị thông minh cầm tay ngày càng phổ biến và rộng rãi hơn. Nhu cầu Smart home thực hiện được là nhờ sự phổ biến của các thiết bị thông minh cầm tay bởi khả năng truy cập internet cũng như sự tiện dụng khi có thể sử dụng ở mọi nơi. Các phần mềm phục vụ cho thị trường này cũng ngày càng nhiều lên, chính vì vậy mà đề tài này cũng không thể thiếu việc tạo nên một ứng dụng điều khiển thân thiện và phổ biến dành cho người dùng. Việc lựa chọn xamarin là hoàn toàn hợp lý bởi ứng dụng nó tạo ra có thể chạy trên đa nền tảng
Giao diện login trên xamarin
Hình 4.9 Giao diện Login trên xamarin.
Giao diện login trên xamarin không có nút nhấn Register bởi vì tài khoản sử dụng để đăng nhập vào sẽ do nhà quản lý cung cấp. việc đăng ký tài khoản mới chỉ thực hiện trên ứng dụng của windown.
Vấn đề login trên xamarin tương tự thuật toán trên ứng dụng windown. Tuy nhiên ở Xamarin sẽ có nhiều function hỗ trợ thêm nhằm tạo sự thuận tiện cho người dùng. Ví dụ như “click here” để chuyển hướng đến trang web hỗ trợ người dùng.
Giao diện control trên xamarin.
Hình 4.10 Giao diện control trên xamarin.
Giao diện control sẽ hiển thị các giá trị của nhiệt độ, độ ẩm, khí ga và các nút nhấn để điều khiển các thiết bị. bản thân các nút nhấn vừa sử dụng để điều khiển và vừa sử dụng thuộc tính backgroud để hiển thị trạng thái thiết bị (màu vàng biểu thị cho On và màu trắng biểu thị cho Off).
Function LogOut tài khoản đã được thêm cho ứng dụng, các Function History để lưu giá thời gian của sự thay đổi trạng thái trên chưa được connect. Tuy nhiên đối với các phiên bản phần mềm thì có thể update ứng dụng lên dần dần dựa theo sự khảo sát
và đóng góp ý kiến từ người dùng nên bản demo sẽ không quá tiên quyết ở vấn đề bảo mật.
Nền tảng mono của C# cho phép việc tạo ứng dụng dễ dàng trên 2 nền tảng phổ biến nhất hiện nay đó là Android và iOS. Tuy nhiên thì việc “dễ dàng” thực hiện đó đồng thời cũng là hạn chế vì khó can thiệp sâu vào phần cứng của thiết bị cũng như chủ động trong điều khiển hoạt động của service cũng như các hoạt đồng ngầm khác của thiết bị.
Phát triển nền tảng ứng dụng trên môi trường native sử dụng ngôn ngữ Java. Các chức năng hoàn toàn tương tự dựa trên ứng dụng đã viết trên nền tảng Mono được sử dụng ngôn ngữ Java và phát triển trên Android studio.
Hai giao diện ứng dụng trong hình 4.11 và 4.10. Giao diện hoàn toàn tương tự, các chức năng cũng hoàn toàn tương tự. Nhưng có sự khác biết ở đây là ứng dụng trên Android có các nút nhấn có thể có tên khác nhau chứ không phải tên do lập trình viên định nghĩa. Để có thể thực hiện điều này. Chúng em đã sử dụng sự kiện longclick (là sự kiện nhấn giữ nút nhấn trong khoảng 3-5s) và SharedPreferences (là nơi lưu trữ dữ liệu ngầm ưu điểm lớn nhất là không mất đi khi tắt ứng dụng).
Hình 4.12 Hình ảnh sau khi xảy ra sự kiện longclick.
Sự kiện longclick xảy ra sẽ gọi hàm RenameDialog. Hàm này sẽ khởi tạo AlertDialog (hộp thoại nhập chuỗi trên hình 4.12) và đồng thời khởi tạo
SharedPreferences. Sau khi nhập dữ liệu vào editText và nhấn OK thì dữ liệu sẽ đẩy vào bên trong biến có tên biến là tên nút nhấn mặc định trong phần code. Như vậy chúng ta đã có một biến lưu dữ liệu ngầm. Sau khi hàm onCreate khởi tạo activity của
form điều khiển ta sẽ cho load dữ liệu từ SharedPreferences và set nó vào các nút nhấn tương ứng bằng hàm setText().
Ngoài ra ứng dụng trên nền tảng android còn hỗ trợ chăm sóc khách hàng khi xảy ra vấn đề không đăng nhập được và các vấn đề liên quan bằng cách click vào “here” trên màn hình đăng nhập của ứng dụng thì sẽ dẫn đến đường link trang web chăm sóc khách hàng (ở đây em sử dụng một trang Facebook) để thực hiện việc nhắn tin và gọi điện chăm sóc khách hàng.
Hình 4.13 Giao diện trang hỗ trợ khách hàng. 3.4. Đánh giá và hướng phát triển
Sau thời gian tìm hiều và dưới sự giúp đỡ nhiệt tình của thầy Nguyễn Linh Nam cũng như toàn thể giảng viên khoa điện, điện tử thì chúng em đã hoàn thành được mô hình sản phẩm và đúc kết được các kiến thức cơ bản về điện tử nói chung và hệ thống IoT nói riêng.
Node cảm biến hoạt động ổn định, đo đạt các giá trị nhiệt độ, độ ẩm một cách chính xác với sai số không đáng kể. Chức năng cảnh báo hoạt động ngay khi có dấu hiệu của việc rò rỉ khí gas. Kịp thời báo động để người dùng khắc phục sự cố đảm bảo an toàn cho ngôi nhà.
Node điều khiển tải hoạt động đúng như yêu cầu đặt ra. Có thể điều khiển các tải xoay chiều phổ thông như quạt, đèn trần, đèn ngủ. Có thể bật tắt thiết bị từ xa thông qua app trên điện thoại và máy tính hoặc có thể bật tắt bằng nút nhấn được tích hợp trên mạch để bật tắc khi không có kết nối.
Getway gửi nhận dữ liệu lên Google Firebase nhanh chóng và chính xác. Các gói tin được truyền tới các Node ngay lập tức với khoảng cách lên tới 200m. Đảm bảo khả năng giám sát và điều khiển phạm vi rộng lớn hơn so với việc truyền tín hiệu bằng sóng Wifi.
App hoạt động ổn định trên các nền tản hệ điều hành phổ biến như ios, android, windows. Thực hiện đúng chức năng điều khiển và giám sát thiết bị từ xa, các giá trị của nút nhận được đồng bộ trên app.
Hướng phát triển.
Vì Sản phẩm được làm thủ công nên chưa được nhỏ gọn cũng như đảm bảo về yêu cầu thẩm mĩ. Trong tương lai có thể gia công sản phẩm theo hướng công nghiêp để sản phẩm đẹp hơn, diện tịch nhỏ dọn phù hợp với các thiết bị điện có trên thị trường.
Node cảm biến có thể bổ sung thêm các loại cảm biến để đo đạc được nhiều thông số hơn. Qua đó cũng có thêm các chức năng tự động để đảm bảo tính năng an toàn và tiện nghi cho ngôi nhà.
Node điều khiển tải có thể gắn thêm các relay công suất lớn hơn hoặc dùng contactor để điều khiển các tải công suất lớn như điều hòa, máy bơm, …
Getway có thể tích hợp thêm trợ lý ảo để cho phép người dùng đàm thoại và ra lệnh thông qua giọng nói.
Giao diện app còn đơn giản và chưa đầy đủ chức năng. Có thể bổ sung thêm các tính năng như lưu trữ các thông số môi trường. Giám sát thói quen người dùng để điều chỉnh các thiết bị sao cho người dùng có cảm giác thoải mái nhất.
Trong thời gian chưa thể bảo vệ được đồ án thí nhóm em vẫn liên tục update thêm tiện ích cho phần mềm desktop và tạo thêm phần mềm trên android sử dụng ngôn ngữ phát triển android tốt hơn đó là Java. Trong thời gian ngắn nên chúng em sẽ cố gắng update thêm nhiều tính năng giúp tăng sự thuận tiện, thân thiện với người dung.
Với môi trường native thì chúng em có thể xây dựng ứng dụng đi sâu hơn vào phần cứng của thiết bị android để tích hợp nhiều tính năng cho người dung. Nhưng việc phát triển ứng dụng native cũng dựa trên những gì đã làm trên Xamarin nhưng sẽ có nhiều tiện ích hơn, thân thiện với người dùng hơn.
KẾT LUẬN
Đề tài xây dựng hệ thống nhà thông minh ứng dụng công nghệ ZigBee hiện đã đạt được một số mục đích nhất định, đó là sử dụng được công nghệ ZigBee, lập trình nhúng kết nối các module ZigBee tạo nên mạng lưới liên kết, ping các tín hiệu qua lại giữa các ZigBee, tạo được mạch in kết nối giữa ZigBee – arduino nano – ESP8266 – và các thiết bị điều khiển và thiết bị đầu ra relay. Hệ thống phần cứng đã kết nối được với sever firebase và đã thực hiện được ping tín hiệu từ nút nhấn lên sever và listener event khi firebase có thay đổi, thực hiện update trạng thái các nút nhấn và thiết bị đầu ra. Xây dựng được hai phần mềm với đầy đủ các tính năng cơ bản.
Đối với phần mềm dành cho nhà quản lý đã thực hiện được đăng kí tài khoản mới, đăng nhập tài khoản đã có trên sever, load trạng thái các thiết bị từ sever về ứng dụng, điều khiển thiết bị bằng các nút nhấn trên ứng dụng thông qua sever. Đối với phần mềm dành cho người dùng đã thực hiện được các chức năng, đăng nhập tài khoản sẵn có trên sever, load dữ liệu từ sever, listener sự kiện khi có tín hiệu thay đổi từ sever, tối ưu hóa nút nhấn, cải thiện giao diện sử dụng, điều khiển thiết bị bằng nút nhấn thông qua sever. Như vậy, nhóm chúng em cơ bản đã hoàn thành được việc kiểm soát sự hoạt động của cả hệ thống smart home ứng dụng công nghệ ZigBee. Nắm được công nghệ từ phần cứng đến phần mềm của một hệ thống smart home với các chức năng cơ bản. Tuy còn nhiều điểm hạn chế như mô hình thiếu thẩm mỹ, kết nối thiếu chắc chắn, phần mềm thiếu nhiều chức năng và hiện cũng còn thiếu nhiều chức năng so với các mô hình smart home của của doanh nghiệp đang thi công thực hiện nhưng nhóm đã có kết quả tương xứng với sự nổ lực suốt thời gian thực hiện đồ án.
TÀI LIỆU THAM KHẢO
[1] GSOT (2019). IoT là gì? IoT mang đến những lợi ích gì? https://gsotgroup.vn [2] Thiết bị kỹ thuật (2020). Internet of things và các đặt tính cơ bản,
https://thietbikythuat.com.vn/internet-of-things
[3]Ehealth (2020). IoT - Nền tảng công nghệ cho y tế thông minh, https://ehealthy.gov.vn
[4] Sở y tế Hồ Chí Minh (2020).10 lợi ích của IoT trong chăm sóc sức khoẻ, http://www.medinet.hochiminhcity.gov.vn/
[5] [6] internetofbusiness (2021). Retail IoT: AI firm trials autonomous smartphone checkouts, https://internetofbusiness.com/
[7] Smart industry VN (2021). Ứng dụng của IoT để số hóa nhà máy sản xuất, https://smartfactoryvn.com/
[8] ifactory (2020). Ứng dụng IoT vào doanh nghiệp sản xuất, https://ifactory.com.vn/ [9] uniadmin (2020). Top 5ứng dụng internet of things ngoài đời thực, https://lumi.vn/ [10] AITA (2020). Ứng dụng IoT trong nông nghiệp thông minh, https://aita.gov.vn/ [11] daviteq (2020). Gói IoT giám sát nhà màng, https://www.daviteq.com
[12] IZISolution (2020). Các thành phần và nền tảng IoT, https://izisolution.vn/cac- thanh-phan-va-nen-tang-cua-mo-hinh-IoT/
[13]IDeaTech (2020). Điện nhà thông minh IDeateach,
https://diennhathongminhideatech.com/nha-thong-minh-smarthome/
[14] DNATECH (2020). Tìm hiểu hệ thống nhà thông minh, https://dntech.vn/tim- hieu-he-thong-nha-thong-minh-la-gi-hoat-dong-nhu-the-nao-266-26.html
[15] Invert.vn (2020). Xu hướng nhà thông minh hiện đại đáng đầu tư, https://www.invert.vn
[16] BKAI (2020). ZigBee và các khai niệm cơ bản, https://bkaii.com.vn/ [17] Koenkk (2019). ZigBee network,
https://www.zigbee2mqtt.io/getting_started/running_zigbee2mqtt.html
[18] Sonoff (2020). ZigBee là gì? Ưu và nhược điểm của ZigBee, https://sonoff.vn/tin- tuc/zigbee-la-gi-uu-va-nhuoc-diem-cua-zigbee
[19] BKAI (2020). 5 giao thức truyền dữ liệu, https://bkaii.com.vn/tin-tuc/175-IoT- internet-of-thing-5-giao-thuc-dung-de-noi-chuyen-ma-ban-can-biet
[20] Điện tử tương lai (2019). Thông số kỹ thuật Arduino Nano, https://dientutuonglai.com/gioi-thieu-arduino-nano.html
[21] LHV- Galileo (2020). Tổng quan về ESP8266 nodeMCU,
https://lophocvui.com/IoT-internet-of-things/smart-home/openhab/tong-quan-ve- esp8266/
[22] hshop (2019). Mạch thu phát RF ZigBee UART CC2560V1, https://hshop.vn/products/mach-thu-phat-rf-ZigBee-uart-cc2530-v1
[23] arduiokit (2020). Tổng quan LCD, giới thiệu giao tiếp I2C sử dụng Arduino, https://arduinokit.vn/giao-tiep-i2c-lcd-arduino/
[24] hshop (2020). Cảm biến nhiệt độ và độ ẩm DHT22, https://hshop.vn/products/cam-bien-do-am-nhiet-do-dht22
[25] Nguyễn Quốc (2015). Nguyên lý hoạt động của relay, https://bff-tech.com/relay- la-gi-nguyen-ly-hoat-dong-cua-relay/
[26] arduinokit (2020). Arduino ide và các khái niệm, https://arduinokit.vn/arduino- ide-la-gi/
[27] Việt Nguyễn (2020). Python là gì? Giới thiệu về Python và những ưu, nhược của nó trong lập trình website, https://blog.webico.vn/python-la-gi-gioi-thieu-ve-python- va-nhung-uu-nhuoc-cua-no-trong-lap-trinh-website/
[28] Wikipedia (2004). Khái niệm về ngôn ngữ lập trình, https://vi.wikipedia.org [29] CodeGym (2020). C# là gì?Tìm hiểu ngôn ngữ lập trình C#, https://codegym.vn/ [30] Microsoft Vietnam – DPE Team (2012). Tổng quan về windows Presentation Foundation, https://tapchilaptrinh.vn/2012/07/24/
[31] Huy Nguyễn (2017). Tìm hiểu về xamarin trong lập trình mobile,
https://viblo.asia/p/tim-hieu-ve-xamarin-trong-lap-trinh-mobile-ORNZqwXN50n [32] Đỗ Đức Đình Đạt (2021). Firebase, giải pháp lập trình từ google,
PHỤ LỤC Code getway
#include <FirebaseArduino.h> #include <ESP8266WiFi.h> #define WIFI_SSID "VAN LOI"
#define WIFI_PASSWORD "@#01021981#@"
#define FIREBASE_HOST "doan-ute-k17-default-rtdb.firebaseio.com" #define FIREBASE_AUTH "QgYnR8Rs0yvZwz5lQ3jLvbCBWEpKhMZm9D5VCzgP" #include <SoftwareSerial.h> SoftwareSerial mySerial(12,13);//RX,TX String Send,Send2,giatri; String light1,light2,light3,led,led2,led3; int date,t,gas,tb1,tb2,tb3; void setup() { Serial.begin(115200); mySerial.begin(9600); // connect to wifi. WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("connected: "); Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); // thay bằng địa chỉ ứng dụng của bạn Firebase.stream("/LogUser/Test"); } void loop() { if (Firebase.failed()) { Serial.println("streaming error"); Serial.println(Firebase.error()); } if (Firebase.available()) {
FirebaseObject event = Firebase.readEvent(); String eventType = event.getString("type"); Serial.print("event: ");
Serial.println(eventType);
if (eventType == "put" || eventType == "patch") { String path = event.getString("path");
String data = event.getString("data"); Serial.print("gia tri path:");
Serial.println(path); if (path == "/") {
JsonVariant payload = event.getJsonVariant("data"); String light1 = payload["thietbi1"];
led=light1;
Serial.println(led); if(led==""){led ="x";}
String light2 = payload["thietbi2"]; led2=light2;
Serial.println(led2); if(led2==""){led2 ="x";}
String light3 = payload["thietbi3"]; led3=light3;
Serial.println(led3); if(led3==""){led3 ="x";} Send= led + led2 + led3; Serial.print("Data send"); Serial.println(Send); }
if (path == "/thietbi1") {
int payload = event.getInt("data"); led=(String)payload; Serial.print("data light1: "); Serial.println(payload); } if (path == "/thietbi2") {
int payload = event.getInt("data");