Xây dựng thuật toán và code ứng dụng

Một phần của tài liệu Hệ thống nhà thông minh ứng dụng công nghệ zigbee (Trang 58)

3.3.1. Phần mềm quản lý và cài đặt người dùng.

Phần mềm quản lý gồm các chức năng dành cho người quản lý hệ thống người dùng. Vì vậy phần mềm này sẽ có các chức năng chính là: Tạo tài khoản mới cho người dùng, đăng nhập vào tài khoản người dùng, trình điều khiển đề kiểm tra kết nối khi lắp đặt thiết bị, trình quản lý tài khoản người dùng nhằm hỗ trợ khách hàng khi quên mật khẩu, xử lý tình huống cấp bách khi khách hàng yêu cầu.

3.3.2. thuật toán và giao diện cho form Login.

Form Login là form cơ bản của hầu hết các ứng dụng yêu cầu tài khoản User hiện nay nhằm để quản lý người dùng nhằm bảo mật thông tin dành cho người dùng và tạo sự an toàn về thông tin cho người sử dụng. Các tài khoản đăng nhập vào form login phải được đăng kí trước, có thể đăng kí trong form đăng kí của phần mềm hoặc có thể đăng kí trực tiếp trên sever firebase.

Hình 4.1 Form Login ứng dụng.

Form login bao gồm các chức năng chính là đăng nhập vào tài khoản đã có, đăng kí tài khoản mới và load tất cả tài khoản hiện có từ sever.

Phần nhập tên đăng nhập và mật khẩu là các textbox cho phép người dùng nhập dữ liệu từ bàn phím vào. Với các thuộc tính cơ bản của textbox như font size, font style, Opacity, … Và chức năng đơn giản khi người dùng click vào để nhập thì dữ liệu sẽ xóa dữ liệu hiện có.

Nếu nhấn đăng ký thì form đăng kí tài khoản sẽ mở ra để người dùng thực hiện đăng ký. Nếu nhấn Load dữ liệu người dùng thì sẽ mở ra form để load tài khoản người dùng hiện đã đăng ký từ sever.

Nếu nhấn đăng nhập thì một chuỗi thuật toán sẽ được thực hiện. Đầu tiên nó sẽ kiểm tra dữ liệu đã nhập vào các textbox hay chưa. Nếu một trong hai textbox nhập tài khoản hoặc mật khẩu trống thì khi ấn đăng nhập sẽ có thông báo “không được để trống” Nếu cả 2 đều không trống thì dữ liệu sẽ load data từ sever xuống và kiểm tra. Nếu mật khẩu nhập vào khác với dữ liệu mật khẩu từ sever thì sẽ có thông báo “mật khẩu không chính xác”. Nếu cả mật khẩu và tài khoản đều trùng khớp với dữ liệu trên sever thì form login sẽ đóng lại và mở form control app lên và truyền vào đó tài khoản người dùng vừa được đăng nhập vào từ form Login. Nếu tất cả điều trên đều không thỏa hoặc người dùng tạo ra lỗi thì sẽ hiển thị “Người dùng không tồn tại”.

Lưu đồ thuật toán:

Hình 4.2 Thuật toán cho form login.

Quá trình login sẽ kiểm tra qua nhiều giai đoạn. Tuy nhiên ở đây vẫn chưa đầy đủ. Bởi vì hàm try – catch thực hiện luôn có những lỗi phát sinh do người dung xảy ra. Nhưng ở đây em đã thực hiện việc in ra message show là tài khoản không tồn tại cho

catch. Tuy chưa hợp lý nhưng nó giúp chống lỗi do người dùng tạo ra và giúp cho chương trình vẫn tiếp tục hoạt động.

3.3.3. thuật toán và giao diện của form Register.

Form Register gồm các Label với nội dung là UserName, Password và Confirm Password, bên cạnh đó là các TextBox để ghi vào tài khoản cần tạo mới. Và các nút nhấn Register để đăng ký và nút nhấn Exit để đóng form.

Chức năng Register chỉ cung cấp cho nhà sản xuất nhằm mục đích không bị người dùng tạo nhiều tài khoản và đánh sập sever bằng cách tạo mới tại khoản liên tục và đăng nhập liên tục bằng tool. Vì vậy hiện nay các dịch vụ thường do bên phía quản lý cung cấp nhằm mục đích tránh sự phá hoại từ bên ngoài và tăng tính bảo mật cho người dùng.

Hình 4.3 Form Register

Resgister có hai nút nhấn là exit để thoát chương trình và Regis để đăng ký. Khi nhấn Register thì điều đầu tiên thực hiện là kiểm tra xem các ô nhập vào có trống hay không. Nếu trống thì thông báo cho người dùng “Mục này không thể để trống”. Nếu

không trống thì sẽ tiếp tục kiểm tra liệu password nhập vào và confirm password có giống nhau hay không. Nếu không thì thông báo cho người dùng “Confirm to not true”. Nếu confirm đúng thì sẽ load data từ người dùng chưa đăng ký để kiểm tra xem

nó có tồn tại không. Nếu có thì thông báo cho người dùng “Tài khoản đã tồn tại” Nếu tất cả đều thỏa thì việc tạo một User mới với tên đăng nhập và mật khẩu vừa nhập

được thông qua. Đồng thời sẽ khởi tạo các giá trị nhiệt độ, độ ẩm, khí ga, thiết bị 1, …. Sau khi đăng ký thì có thể ấn vào Exit để thoát form và thực hiện đăng nhập để kiểm tra. Các giá trị của nhiệt độ, độ ẩm, khí ga và các thiết bị khác sẽ lưu giá trị mặc định là “0” lúc này phần mềm chưa connect với phần cứng.

3.3.4. thuật toán và giao diện của form load account.

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,

Một phần của tài liệu Hệ thống nhà thông minh ứng dụng công nghệ zigbee (Trang 58)

Tải bản đầy đủ (PDF)

(116 trang)