XÂY DỰNG LƯU ĐỒ GIẢI THUẬT VÀ LẬP TRÌNH

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng hệ thống thông minh giám sát điều kiện môi trường và an ninh phòng máy quy mô lớn (Trang 65)

3.3.1 Module thu thập dữ liệu từ các cảm biến môi trường

Các thông số môi trường về nhiệt độ và độ ẩm định, khói định kỳ được báo cáo về Server tập trung mỗi 15 phút. Trong quá trình thu thập dữ liệu, nếu trạng thái nhiệt độ, độ ẩm hay khói thay đổi thì ngap lập tức báo cáo về server. Lưu đồ giải thuật cơ bản như sau:

Bắt đầu

Thu thập, xử lý dữ liệu nhiệt độ, độ ẩm, khói, điện lưới

Xác định trạng thái hiện tại dựa trên dữ liệu và ngưỡng giá trị cảnh báo

Trạng thái có thay đổi

Gửi Report lên Server Không Có Đã 15' chưa Rồi Chưa Reset bộ định thời Start bộ định thời Có dừng chương trình? Kết thúc Có Không

3.3.2 Module kết nối nhận sự kiện từ khối Giám sát ra vào

Yêu cầu đặt ra cho module giám sát ra vào đầu tiên là ghi nhận các sự kiện ra vào, tiếp theo là giám sát được trường hợp mất kết nối, một số hành vi xâm nhập trái phép. Lưu đồ giải thuật của module cơ bản như sau:

Bắt đầu

Có sự kiện nào không?

Gửi Report lên Server Không Có Kết nối thiết bị Ra vào Xử lý thông tin sự kiện Có dừng chương trình? Kết thúc Có Không

3.3.3 Module Giám sát an ninh, phát hiện chuyển động

Cấu hình cho đầu ghi camera cần làm các bước cơ bản: - Cấu hình mạng

- Thiết lập ghi theo chuyển động và trỏ đến server FTP trên RPi bằng tài khoản người dùng camera đã tạo ở trên.

Bắt đầu

Có file chuyển động không?

Gửi Report lên Server Không Có Xử lý thông tin sự kiện Có dừng chương trình? Kết thúc Có Không

3.3.4 Module báo cáo trạng thái về Server qua giao thức MQTT

Trong các lưu đồ giải thuật của các module chức năng có hàm Gửi Report lên

Server, hàm này sẽ thực hiện gửi thông điệp trạng thái của module chức năng về cho

server thông qua phương thức publish trên giao thức MQTT. Như vậy hàm "Gửi Report

lên Server sẽ thực hiện vai trò là client, server sẽ đóng vai trò là broker nhận và phân

phối lại các thông điệp.

Module Report sử dụng như sau:

- Bước 1: Thực hiện gọi hàm kết nối connect, kết quả kết nối sẽ được trả về thông

qua hàm callback on_connect.

- Bước 2: Thực hiện gửi thông điệp về broker thông qua hàm send_report với giá

trị đầu vào là các tham số đặc trưng của một thông điệp MQTT:

o Topic: Chủ đề mà thông điệp publish đến.

o Data: Thông điệp

o Qos (Quality of service): Ở đây ta có thể hiểu là cấp xác nhận giữa broker

và client khi trao đổi thông điệp.

o Retain: Có giữ thông điệp trên topic hay không.

Ứng dụng web giám sát cục bộ được viết bằng ngôn ngữ Python trên nền tảng mã nguồn mở Django, một nền tảng web server nhẹ, phát triển nhanh [15]. Server được chạy ngay trên board Raspberry Pi và ứng dụng web này dành cho người quản lý phòng máy để xem một số thông tin:

- Tên thiết bị: Để khỏi nhầm lẫn giữa các thiết bị giám sát ở phòng máy khác. - Thời gian hoạt động của hệ thống: Để xem thiết bị có bị khởi động lại bất thường. - Trạng thái giám sát: Các thông số môi trường, an ninh hiện tại và trạng thái kết

nối về server quản lý tập trung.

Đồng thời, module cho phép người quản lý thực hiện thiết lập các thông số về: - Tên thiết bị.

- Thông tin mô tả vị trí các loại cảm biến trong phòng. - Ngưỡng cảnh báo của các loại cảm biến (Nhiệt, độ ẩm). - Địa chỉ IP của thiết bị giám sát và xử lý cục bộ.

- Kích hoạt và thay đổi địa chỉ IP của thiết bị giám sát ra vào. - Kích hoạt và thay đổi địa chỉ IP của camera giám sát.

- Kích hoạt và thay đổi các tổ hợp (nhiệt, khói, mất điện) trạng thái làm chuông báo kêu.

Người quản lý phòng máy

Đăng nhập

Xem trạng thái

Cấu hình thông số Thay đổi tên thiết bị

<<extend>>

Thay đổi thông tin cảm biến

Thay đổi thông tin IP <<extend>> <<extend>> Thay đổi tổ hợp kích hoạt chuông báo <<extend>>

Xem thông tin

Xem tên thiết bị

Xem thời gian hệ thống hoạt động bao lâu

<<extend>>

<<extend>>

Xem nhiệt độ, độ ẩm, khói, điện

<<extend>> Xem trạng thái ra vào, camera Xem trạng thái kết nối mạng <<extend>> <<extend>> Đổi mật khẩu Xem trạng thái chuông báo <<extend>>

Giao diện trang web đáp ứng (responsive) hiển thị trên cả máy tính và các thiết bị điện thoại:

Trang đăng nhập:

Người dùng thực hiện xác thực để có thể truy cập các trang trạng thái và cấu hình (Hình 3.33).

Trang xem thông tin:

Hình 3.34: Giao diện trang xem thông tin thiết bị

Người dùng có thể xem một số thông tin thiết bị như: tên, phòng máy, giờ trên hệ thống và tổng thời gian hoạt động của hệ thống từ lúc khởi động (Hình 3.34).  Trang xem trạng thái:

Tại trang trạng thái ta có thể xem các giá trị cảm biến và trạng thái realtime của các khối chức năng. Các thông số trạng thái có màu sắc thay đổi theo trạng thái: Xanh (trạng thái bình thường – Normal), Cam (trạng thái hơi cao – Warning) và Đỏ (trạng thái báo động – Critical) như Hình 3.35.

Hình 3.35: Giao diện trang xem trạng thái

Trang cấu hình thông số:

- Thông tin điện lưới phòng máy: Có thể thiết lập tên phòng máy, số pha điện

Hình 3.36: Giao diện trang cấu hình thông tin phòng máy

- An ninh: Cấu hình kích hoạt kết nối giữa Pi với các khối giám sát ra vào và

an ninh camera (Hình 3.37).

Hình 3.37: Giao diện trang cấu hình thông tin các thiết bị an ninh

- Chuông báo: Chuông báo động có thể được cấu hình kích hoạt khi xảy ra một

trong các trạng thái mất điện lưới, nhiệt độ rất cao, phát hiện khói (Hình 3.38).

Hình 3.38: Giao diện trang cấu hình các điều kiện kích hoạt chuông báo

3.4 TRIỂN KHAI VÀ THEO DÕI KẾT QUẢ:

- Lập trình ứng dụng thu thập các thông số cảm biến, bao gồm toàn bộ các khối chức năng Giám sát. Các khối này đòi hỏi thời gian đáp ứng các sự kiện thời gian thực, nhanh nên tôi sử dụng kỹ thuật xử lý đa luồng – multithreading.

- Lập trình ứng dụng giao diện xem trạng thái và cấu hình trên nền tảng Django, bao gồm các giao diện xem, khai báo và cấu hình các thông số của các khối Giám sát.

- Thiết kế và dựng database lưu trữ nền tảng Sql Server. - Dựng Mqtt broker cho module Report.

- Lập trình dịch vụ nhận sự kiện và lưu trữ vào database lưu trữ. - Lập trình dịch vụ cảnh báo cho nhân sự quản lý.

CHƯƠNG 4: ĐÁNH GIÁ VÀ KẾT LUẬN

4.1ĐÁNH GIÁ:

4.1.1 Đánh giá kết quả thử nghiệm:

Sau thời gian thực nghiệm để kiểm tra độ ổn định của hệ thống và thực hiện một số giả lập sự kiện. Hệ thống cho kết quả hoạt động ở độ ổn định cao, các thông số định kỳ cũng như trạng thái sự kiện được báo cáo như kỳ vọng.

4.1.2 Ưu điểm của hệ thống:

Hệ thống giám sát điều kiện môi trường và an ninh phòng máy cho SCTV được xây dựng dựa trên kiến trúc công nghệ Internet of Things có nhiều ưu điểm được tóm gọn:

- Tính ứng dụng cao: Xuất phát từ nhu cầu vận hành, kết hợp các tiêu chuẩn kỹ

thuật và kinh nghiệm quản lý thực tiễn, hệ thống được xây dựng có tính ứng dụng cao giúp tối ưu nhiều công đoạn trong qui trình vận hành, sản xuất.

- Tính mở rộng: Thiết bị phần cứng gateway là Raspberry Pi và giao thức truyền

thông về phía cloud là MQTT làm cho hệ thống có tính mở không giới hạn (như đã trình bày ở chương 3).

4.1.3 Hạn chế của hệ thống:

Hệ thống có rất nhiều ưu điểm nếu như hoàn thiện, tuy nhiên trong phạm vi luận văn và tại thời điểm hiện tại hệ thống vẫn còn tồn tại nhiều hạn chế, cụ thể:

- Bảo mật: Trong kiến trúc Internet of Things, bảo mật là một trong các yếu tố được

quan tâm hàng đầu. Hệ thống hiện tại chưa triển khai một số công nghệ, phương pháp để tăng độ tin cậy cho hệ thống.

- Công nghệ: Công nghệ lớp vật lý hiện tại kết nối giữa các sensor và gateway là

có dây, cũng như tính bảo mật, công nghệ không dây cũng là một công nghệ lõi của Internet of Things, việc triển khai ứng dụng công nghệ này vào hệ thống giúp tối ưu không gian, thẩm mỹ cũng như công đoạn đi dây trong phòng máy chật chội.

- Mở rộng: Trong phòng máy hiện có rất nhiều thông số cần thu thập giám sát, dự

báo cũng như điều khiển như battery, UPS, tải điện, server, router…

4.2KẾT LUẬN:

Sự hội tụ của các công nghệ lõi hình thành công nghệ Internet of Things, đặc biệt là công nghệ vi cơ điện tử giúp việc xây dựng các hệ thống tự động như hệ thống thông

hơn bao giờ hết. Với chi phí phải chăng và tính ứng dụng cao, hệ thống khi được phát triển hoàn chỉnh giúp các doanh nghiệp viễn thông như SCTV giảm thiểu được rất nhiều nguồn nhân lực vận hành các phòng, góp phần đảm bảo an ninh, an toàn truyền dẫn phát sóng.

PHỤ LỤC

A. Chương trình mẫu lấy dữ liệu nhiệt độ và in tất cả nhiệt độ của các cảm biến nhiệt độ DS18B20 lên màn hình:

1. from subprocess import Popen,PIPE 2.

3. class Temp_Sensor(object):

4. SensorList = []

5. def __init__(self,serial):

6. self.serial = serial #serial: địa chỉ nhận dạng cảm biến 7. self.value = 0

8. Temp_Sensor.SensorList.append(self) 9.

10. def get_temp(self):

11. '''Lấy dữ liệu nhiệt độ theo độ Celsius từ cảm biến'''

12. data = Popen('cat /sys/bus/w1/devices/' + self.serial +

'/w1_slave'],shell=True,stdout=PIPE, stderr=PIPE)

13. out,err = data.communicate() 14. if err=='' and out !='':

15. val = round(float(out.decode('utf-

8').split('\n')[1].split('=')[1])/1000,1)

16. self.value = val 17. def show_me(self):

18. print (f"-{self.serial}:{self.value}")

19.

20. def get_sensor(): 21. import os

22. rootpath = '/sys/bus/w1/devices/'

23. for temp_sensor in os.listdir(rootpath): 24. if temp_sensor.startswith("28-"):

25. Temp_Sensor(temp_sensor) 26.

27. def show_temp():

28. for sensor in Temp_Sensor.SensorList: 29. sensor.get_temp() 30. sensor.show_me() 31. 32. if __name__=="__main__": 33. get_sensor() 34. show_temp()

B. Chương trình mẫu kết nối thiết bị An ninh ra vào để lấy sự kiện.

1. #Author: Loctt

2. #Released Date: 07/06/2020 3.

4. from Constants import StatusMessage,AccessStatusDict 5. import report_service 6. 7. def run(ip): 8. import zk 9. status=0 10. event_status = '' 11. attendance_status = None 12. needReport = False

13. myClient = zk.ZK(ip,timeout=5) 14. if myClient.helper.test_ping(): 15. try: 16. myClient.connect() 17. needReport = False 18. if len(AccessControl.zkClient.get_serialnumber()): 19. status = AccessStatusDict.status_connect_sucessfully 20. for attendance,data in

AccessControl.zkClient.live_capture():#Theo dõi sự kiện

21. if attendance is None:

22. if len(data) == 16:

23. if data[9] == '1':#Quên đóng cửa

24. event_status = AccessStatusDict.status_open_door_alarm 25. elif len(data) == 8: 26. event_status =

AccessStatusDict.status_hack_device

27. print("Phát hiện hành vi tác động vào thiết bị")

28. elif len(data) == 0:

29. if not myClient.helper.test_ping(): break

30. else:

31. if attendance.status == 1: #Truy cập bằng vân tay

32. event_status = AccessStatusDict.status_access_by_finger

33. elif attendance.status == 3: #Truy cập bằng pass

34. event_status = AccessStatusDict.status_access_by_pass

35. else: #Truy cập bằng RFID card

36. event_status = AccessStatusDict.status_access_by_card 37. except Exception as e:

38. print ("Có lỗi bất thường: {}".format(e))

39. else:

40. status = AccessStatusDict.status_ping_not_ok 41. if __name__=="__main__":

42. run('192.168.1.102')

C. Chương trình mẫu kiểm tra file chuyển động của camera trong thư mục cho trước:

1. #Author: Loctt

2. #Released Date: 16/08/2020

3. import os, platform

4. import report_service 5.

6. list_files = [] 7.

8. def getFullPathOfAllFilesInFolder(rootpath):

9. '''Hàm đệ quy lấy toàn bộ đường dẫn File trong thư mục rootPath''' 10. import re,time

11. today = time.strftime("%Y-%m-%d",time.localtime())

12. for item in os.listdir(rootpath):

13. itemFullPath = os.path.join(rootpath,item)

14. if re.search("\d{4}-\d{2}-\d{2}",item) and today != item: 15. os.system (f"rm -rf {itemFullPath}")

16. else:

18. elif itemFullPath.endswith('h264'): list_files.append(itemFullPath) 19. list_files.sort() 20. return list_files 21. 22. def getbase64contentFile(contentFileInBytes):

23. '''Hàm convert dữ liệu từ Byte sang Base64 cho việc chuyển thông tin về server trong MQTT'''

24. import base64

25. return base64.b64encode(contentFileInBytes).decode('ascii')

26.

27. def run():

28. from Constants import CameraStatusDict 29. cameraName = ""

30. while True:

31. list_files = []

32. getFullPathOfAllFilesInFolder(record_files_dir) 33. today = time.strftime("%Y-%m-%d",time.localtime())

34. for recFileFullPath in list_files: 35. #Xem hom nay co file nao khong

36. if today in recFileFullPath:

37. cameraName = recFileFullPath.split('/')[-2]:

38. recFileName = recFileFullPath.split('/')[-1]

39. status = CameraStatusDict.status_motion_detect 40. contentFileInBase64 = ""

41. with open(recFileFullPath,'rb') as recFile: 42. contentFileInBytes = recFile.read() 43. contentFileInBase64 = getbase64contentFile(contentFileInBytes=contentFileInBytes) 44. report_service.reportStatusDataCamera(name=cameraName,recfilename=re cFileName,recdata=contentFileInBase64) 45. os.system('rm ' + recFileFullPath) 46. list_files.remove(recFileFullPath) 47.

D. Code thực hiện kết nối và gửi thông điệp đến broker của hàm Gửi Report lên Server

48. #Author: Loctt 49. #Released Date: 26/01/2021 50. 51. import paho.mqtt.client as mqtt 52. import time 53. 54. clientId = '1' 55. client = mqtt.Client('1') 56. broker_address='server_domain/server_ip' 57. based_topic = "gs{0}/".format(clientId) 58.

59. def on_connect(client, userdata, flags, rc): 60. if rc==0:

61. print("Connected!",rc)

62. else:

63. print("Can't connect, returned code=",rc)

64.

65. def connect():

66. global based_topic 67. global client

68. #Thực hiện khai báo các thông số và kết nối

69. client.username_pw_set(username='username',password='password')

70. client.on_connect=on_connect 71. client.loop_start()

72. client.connect(broker_address,keepalive=15)

73. #Thiết lập thông điệp di chúc cho biết thiết bị không còn kết nối

74. client.will_set(based_topic + "connected"

,payload='0',qos=1,retain=True)

75. return client 76. 77. def disconnect(): 78. global client 79. client.loop_stop() 80. client.disconnect() 81.

82. def send_report(topic='',data='',qos=0,retain=False):

83. global based_topic

84. client.publish(based_topic + topic,data=data,qos=qos,retain=retain)

TÀI LIỆU THAM KHẢO

[1]. Perry Lea (2018), Internet of Things for Architects, Packt, ISBN 978-1-78847- 059-9.

[2]. Adrian McEwen, Hakim Cassimally (2014), Designing the Internet of Things, Wiley, ISBN 978-1-118-43063-7.

[3]. Bộ Thông tin và Truyền thông Việt Nam, Thuyết minh dự thảo tiêu chuẩn quốc

gia, tiêu chuẩn về thuật ngữ, định nghĩa cho IoT,

http://mic.gov.vn/Upload_Moi/VanBan/Thuyet-minh-Du-thao-tieu-chuan- thuat-ngu-dinh-nghia-cho-IoT---25.01.2019.doc, truy cập ngày 17/06/2020. [4]. Wikipedia, Http, https://vi.wikipedia.org/wiki/Hypertext_Transfer_Protocol,

truy cập ngày 17/06/2020.

[5]. EMS Việt Nam, Giải pháp giám sát môi trường cho trung tâm dữ liệu, http://www.emsvietnam.com.vn/gioi-thieu-ve-giai-phap-giam-sat-moi-

truong-cho-trung-tam-du-lieu-va-tram-bts-cua-ems, truy cập ngày 17/03/2021. [6]. Universal Alarm System, https://sites.google.com/site/universalalarm/he-

thong-giam-sat-va-canh-bao-toan-dien, truy cập 17/03/2021.

[7]. ATPro, Hệ thống giám sát phòng máy chủ, https://atpro.com.vn/san-pham/he- thong-giam-sat-phong-may-chu-trung-tam-du-lieu-2, truy cập 17/03/2021. [8]. Hệ thống quản lý tòa nhà thông minh BMS, http://gsptech.vn/bms-systems-

thong-quan-ly-toa-nha-bms/, truy cập ngày 17/03/2021.

[9]. Huỳnh Thái Hoàng (2014), Hệ thống điều khiển thông minh, Nhà xuất bản đại học Quốc gia TP. Hồ Chí Minh.

[10]. Raspberry Pi Foundation, What is Raspberry Pi,

https://www.raspberrypi.org/help/what-%20is-a-raspberry-pi/, truy cập ngày 03/06/2020.

[11]. Raspberry Pi Foundation, Installing operating system images,

https://www.raspberrypi.org/documentation/setup/, truy cập ngày 03/12/2020. [12]. Colin Dow (2018), Internet of Things Programming Projects, Packt, ISBN

978-1-78913-480-3.

[13]. Maximim Intergrated, Programmable Resolution 1-Wire Digital Thermometer

DS18B20, https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf, truy

cập, truy cập ngày 16/06/2020.

[14]. Thomas Liu, Digital relative humidity & temperature sensor AM2302/DHT22, https://cdn-

shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+A M2302.pdf, truy cập ngày 19/06/2020.

[15]. Django Software Foundation (2020), Django Documentation,

https://media.readthedocs.org/pdf/django/3.0.x/django.pdf, truy cập ngày 03/08/2020.

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng hệ thống thông minh giám sát điều kiện môi trường và an ninh phòng máy quy mô lớn (Trang 65)

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

(80 trang)