Xây dựng hệ thống giám sát toà nhà dựa trên thingsboard iot platform

78 31 0
Xây dựng hệ thống giám sát toà nhà dựa trên thingsboard iot platform

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ Xây dựng hệ thống giám sát tòa nhà dựa Thingsboard IoT Platform HỒ ĐÌNH TÂN Ngành: Kỹ thuật điều khiển tự động hóa Giảng viên hướng dẫn: TS Trần Hồng Hải Viện: Viện Cơng nghệ thơng tin Truyền thông HÀ NỘI, 2020 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ Xây dựng hệ thống giám sát tòa nhà dựa Thingsboard IoT Platform HỒ ĐÌNH TÂN Ngành: Kỹ thuật điều khiển tự động hóa Giảng viên hướng dẫn: TS Trần Hồng Hải Chữ ký GVHD Viện: Viện Công nghệ thông tin Truyền thông HÀ NỘI, 2020 LỜI CẢM ƠN Đầu tiên, xin gửi lời cảm ơn sâu sắc tới Thầy giáo - TS Trần Hoàng Hải - Giảng viên, Viện Công nghệ thông tin Truyền thông, Trường Đại học Bách Khoa Hà Nội hướng dẫn cho tơi lời khun q trình thực luận văn Tiếp theo, xin chân thành cảm ơn thầy cô Viện Công nghệ thông tin truyền thông, Viện đào tạo sau đại học, Trường Đại học Bách Khoa Hà Nội tạo điều kiện cho tơi suốt q trình học tập nghiên cứu trường Cuối cùng, xin bày tỏ lịng cảm ơn tới người thân gia đình, bạn bè đồng nghiệp động viên giúp đỡ để tơi hồn thành luận văn Hà Nội, ngày… tháng… năm 2020 Tác giả Hồ Đình Tân MỤC LỤC MỞ ĐẦU Chương 1: TỔNG QUAN VỀ HỆ THỐNG GIÁM SÁT TÒA NHÀ 1.1 Tổng quan hệ thống giám sát sử dụng công nghệ IoT 1.1.1 Mục đích tính tăng hệ thống giám sát 1.1.2 Mơ hình hệ thống giám sát 1.2 Khái niệm hệ thống IoT 1.2.1 Khái niệm IoT 1.2.2 Thành phần mô hình hệ thống IoT 1.3 Giao thức MQTT sử dụng IoT 1.3.1 Giới thiệu giao thức MQTT 1.3.2 Một số khái niệm 1.3.3 Cách hoạt động 11 1.3.4 Bảo mật 11 1.4 Giới thiệu số tảng IoT 12 1.4.1 Nền tảng Amazon web service IoT Platform 12 1.4.2 Nền tảng IoT Google cloud platform 13 1.4.3 Nền tảng Thingsboard IoT Platform 14 1.5 Kết luận chương 15 Chương 2: IOT PLATFORM MÃ NGUỒN MỞ 17 2.1 Nền tảng IoT mã nguồn mở Thingsboard 17 2.1.1 Cấu trúc hệ thống Thingsboard 17 2.1.2 Các hoạt động Thingsboard 19 2.2 Kết luận chương 21 Chương :THỰC NGHIỆM XÂY DỰNG TRIỂN KHAI GIÁM SÁT TÒA NHÀ 22 3.1 Mục tiêu giám sát cảnh báo tòa nhà Thư viện Tạ Quang Bửu 22 3.2 Thiết kế tổng thể 23 3.2.1 Giả lập hệ thống cảm biến, thiết bị 28 3.2.2 Tạo thiết bị Thingsboard liên kết tương ứng thực tế 35 3.2.3 Thiết kế Widgets giao diện ứng dụng 38 3.2.4 Kết nối liệu đến Thingsboard 42 i 3.3 Vận hành kết thu 44 3.3.1 Một số kịch thực 44 3.3.2 Kết giao diện vận hành .49 3.4 Đánh giá hệ thống giám sát sử dụng Thingsboard IoT Platform 51 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 52 TÀI LIỆU THAM KHẢO 53 PHỤ LỤC 55 ii DANH MỤC KÝ HIỆU, CÁC CHỮ VIẾT TẮT Từ viết tắt Nghĩa tiếng Anh Nghĩa tiếng Việt IoT Internet of Things Internet Vạn Vật AI Artificial Intelligence Trí tuệ nhân tạo MQTT Message Queue Telemetry Transport Giao thức mạng nhẹ, vận chuyển tin nhắn thiết bị Giao thức thường chạy TCP / IP CE Community Edition Phiên cộng đồng PE Professional Edition Phiên chuyên nghiệp BMS Building Management System Hệ thống quản lý tòa nhà M2M Machine to Machine Tương tác máy với máy QoS Qualities of Service Chất lượng dịch vụ AWS Amazon Web Service Dịch vụ web Amazon GCP Google Cloud Platform Nền tảng dịch vụ điện toán đám mây Google HTTP HyperText Transfer Protocol Giao thức truyền tải siêu văn HLS HTTP Live Streaming Truyền trực tiếp qua HTTp IP Internet Protocol Địa giao thức internet DBMS Database Management System Hệ quản trị sở liệu ODBC Open Database Connectivity Kết nối sở liệu mở iii DANH MỤC CÁC BẢNG BIỂU Bảng 3.1 Danh sách IoT Hub thiết bị kết nối 31 iv DANH MỤC HÌNH VẼ Hình 1.1 Kết nối vật Hình 1.2 Các thành phần mơ hình hệ thống IoT Hình 1.3 Mơ tả giao thức MQTT hệ thống IoT Hình 1.4 Mô tả hoạt động QoS giao thức MQTT 10 Hình 1.5 Mơ tả chế hoạt động giao thứ MQTT 11 Hình 1.6 Hệ thống AWS IoT Amazon 12 Hình 1.7 Hệ thống IoT Core Google Cloud Platform 13 Hình 1.8 Hệ thống Thingsboard IoT Platform 14 Hình 1.9 So sánh Thingsboard với số IoT Platform mã nguồn mở đánh giá cao 15 Hình 2.1 Cấu trúc tổng quan high-level Thingsboard 17 Hình 2.2 Sơ đồ kết nối thiết bị với Thingsboard 19 Hình 2.3 Hệ thống Rule chain Thingsboard IoT Platform 20 Hình 2.4 Giao diện thiết kế Rule Chain 21 Hình 3.1 Tịa nhà thư viện Tạ Quang Bửu 22 Hình 3.2 Mơ tả xây dựng hệ thống quản lý giám sát 23 Hình 3.3 Mơ tả thiết kế vi điều khiển tích hợp cảm biến nhiệt độ, độ ẩm 25 Hình 3.4 Mơ tả thiết kế tích hợp cảm cảm biến cảnh báo cố 26 Hình 3.5 Mơ tả thiết bị kết nối với IoT Hub 27 Hình 3.6 Quy trình tạo hệ thống cảm biến, thiết bị thingsboard 29 Hình 3.7 Thiết lập vị trí thiết bị, cảm biến sử dụng labelme 30 Hình 3.8 Quy trình tạo thiết bị, cảm biến thingsboard 33 Hình 3.9 Các thiết bị tạo từ tầng 34 Hình 3.10 Thơng số thiết bị sau tạo vị trí 34 Hình 3.11 Tạo thiết bị liên kết tương ứng thực tế 35 Hình 3.12 Minh họa mức nhiệt độ 36 Hình 3.11 Minh họa trạng thái báo cháy 36 Hình 3.12 Minh họa trạng thái báo khói 37 Hình 3.13 Minh họa trạng thái phun nước 37 Hình 3.14 Minh họa trạng thái điều hòa 37 Hình 3.15 Minh họa Camera giám sát 38 v Hình 3.16 Giao diện thiết kế bảng giám sát cho thư viện Tạ Quang Bửu 39 Hình 3.17 Giao diện thể trạng thái vị trí thiết bị, cảm biến 39 Hình 3.18 Biểu đồ nhiệt độ 40 Hình 3.19 Trạng thái thiết bị tầng 40 Hình 3.20 Thông báo cảnh báo nhiệt độ cao, cố 41 Hình 3.21 Camera giám sát 41 Hình 3.22 Hình ảnh Root Rule chain 42 Hình 3.23 Hình ảnh Rule chain dành cho cảnh báo nhiệt độ 42 Hình 3.24 Tiến hành chạy liệu giả lập 43 Hình 3.25 Thiết bị giả lập nhận thông số lên thiết bị tương ứng Thingsboard 44 Hình 3.26 Giả lập trạng thái cảm biến nhiệt độ cao 45 Hình 3.27 Hiển thị cảnh báo nhiệt độ cao 45 Hình 3.28.Cảnh báo nhiệt độ cao thơng qua email Line 46 Hình 3.29 Giả lập trạng thái cảm biến khói báo có khói 46 Hình 3.30 Hiển thị cảnh báo có cảnh báo khói 47 Hình 3.31 Cảnh báo có báo khói thơng qua email Line 47 Hình 3.32 Giả lập cảnh báo báo cháy 48 Hình 3.33 Hiển thị cảnh báo báo cháy 48 Hình 3.34 Cảnh báo báo cháy thông qua Email LINE 49 Hình 3.35 Kết đầu vào Thingsboard, nhận thông qua POST TELEMETRY 50 Hình 3.36 Hình ảnh tổng hợp thơng số liệu từ thiết bị tầng 50 Hình 3.37 Hình ảnh tồn giám sát tầng thư viện Tạ Quang Bửu 51 vi MỞ ĐẦU Đặt vấn đề Cuộc cách mạng công nghiệp 4.0 diễn với tốc độ nhanh theo cấp số nhân làm thay đổi bối cảnh toàn cầu có tác động ngày gia tăng đến tất quốc gia, để thay đổi kịp theo xu hướng giới cần phải cập nhật học hỏi liên tục công nghệ cốt lõi hàng đầu Trí tuệ nhân tạo học máy (AI and Machine Learning), Internet vạn vật (IoT), Dữ liệu lớn (Big Data), Blockchains, Cloud, Trong học viên nhận thấy Internet vạn vật (IoT) ứng dụng thực tế phù hợp với môi trường Việt Nam đà phát triển nhanh phải cần có an tồn tính ổn định để kiểm sốt, quản lý chặt chẽ phịng ngừa rủi ro, tòa nhà cao tầng tiềm ẩn nhiều nguy Đồng thời làm quen với hệ thống IoT kết hợp công nghệ 4.0 khác tương lai AI, Big Data, Cloud, Vì lẽ đó, kết hợp với tình hình thực tế công việc thân, học viên xin chọn đề tài: “Xây dựng hệ thống giám sát tòa nhà dựa Thingsboard IoT Platform.” Nhiệm vụ đặt - Tìm hiểu tổng quan hệ thống giám sát tịa nhà (yêu cầu từ người sử dụng, vấn đề kỹ thuật, mơ hình triển khai.) - Tìm hiểu kiến thức lý thuyết hệ thống IoT, công nghệ sử dụng - Tìm hiểu Thingsboard IoT Platform, chức năng, đặc trưng - Triển khai thử nghiệm hệ thống giám sát, cảnh báo cho tòa nhà Thư viện Tạ Quang Bửu Phương pháp thực Hiện có nhiều hệ thống IoT platform cơng cụ giám sát hỗ trợ cho công việc người quản lý tòa nhà Chức chúng giám sát trạng thái hoạt động thiết bị cảnh báo, thiết bị giám sát, hệ thống cảm biến tòa nhà gửi thơng tin đến hình giám sát để cảnh báo cho người quản lý có cố có khả xảy cố, tích hợp liệu đến Cloud hay Big Data, tích hợp hệ thống AI, ML PHỤ LỤC Các mã nguồn sử dụng dự án: [20] Cấu trúc JSON sau sử dụng labelme { "version": "3.16.7", "flags": {}, "shapes": [ { "label": "BaoChay", "line_color": null, "fill_color": null, "points": [ [ 254.04123711340208, 415.55670103092785 ] ], "shape_type": "point", "flags": {} }, { "label": "Camera", "line_color": null, "fill_color": null, "points": [ [ 261.2577319587629, 141.3298969072165 ] ], "shape_type": "point", 55 "flags": {} }, … } [21] Mã nguồn tạo vị trí thiết bị từ labelme # liên kết thư viện import argparse import paho.mqtt.client as mqtt import os.path import json import time import base64 from utils.constants import * # Tạo chương trình class Labelme2TB: def init (self): self.genData = {} def checkConfigFile(self, cfg_file): try: with open(cfg_file, 'rt') as f: data = json.load(f) if(data): return data else: return 56 except Exception as e: print('[ERROR] Invalid JSON file') print(e) def doiToaDo(self, points, h ,w): p = points return [p[0][0]/w, p[0][1]/h] # getLabelList : Tạo id thiết bị tầng def getLabelList(self, label, data, name, h, w): print(label, data, name, h,w) l = [] i=1 for item in data: if item['label'] == label: n = name + label + str(i) # Id thiết bị theo cấu trúc toado = self.doiToaDo(item['points'], h ,w) x = {"name": n, "label":n, "xPos": toado[0], "yPos": toado[1], "type": label} l.append(x) i +=1 return l def run(self, cfg_file, name): # chạy tạo tọa độ cho thingsboard config try: data = self.checkConfigFile(cfg_file) # print(data) if not data: raise Exception genData = {} genData['Tang'] = name 57 genData['ToaNha'] = "TVTQB" n = name s = data['shapes'] h = data['imageHeight'] w = data['imageWidth'] lBaoChay = self.getLabelList("BaoChay", s, n, h, w) lBaoKhoi = self.getLabelList("BaoKhoi", s, n, h, w) lPhunNuoc = self.getLabelList("PhunNuoc", s, n, h, w) lNhietDo = self.getLabelList("NhietDo", s, n, h, w) lCamera = self.getLabelList("Camera", s, n, h, w) lDieuHoa = self.getLabelList("DieuHoa", s, n, h, w) genData['BaoChay'] = lBaoChay genData['BaoKhoi'] = lBaoKhoi genData['PhunNuoc'] = lPhunNuoc genData['NhietDo'] = lNhietDo genData['Camera'] = lCamera genData['DieuHoa'] = lDieuHoa print(genData) with open(name +"_config.json", 'w') as f: json.dump(genData, f, indent=2) return genData except Exception as e: print (e) 58 [22] Mã nguồn tạo thiết bị thingsboard # Tên file: mqtt.py # Tham số: mqtt.py –file host # token import argparse import paho.mqtt.client as mqtt import os.path import json import time import base64 import imghdr THINGSBOARD_HOST = '' MQTT_PORT = 1883 ACCESS_TOKEN = '' gateway_topic = 'v1/devices/me/attributes' node_topic = 'v1/gateway/attributes' payload = {} gateway_payload = {} def on_connect(client, userdata, flags, rc): if(rc == 0): print('[INFO] Connected succesfully [OK]') client.connected_flag = True else: print('[ERROR] Connection Failed') raise ValueError('Connection Problem') 59 def on_disconnect(client, userdata, rc): console.log('Disconnection : {}' format(rc)) def connectThingsboard(): client = mqtt.Client() client.username_pw_set(ACCESS_TOKEN) client.on_connect = on_connect client.connected_flag = False client.connect(THINGSBOARD_HOST, MQTT_PORT, 60) client.loop_start() return client def checkConfigFile(args): try: with open(args.file, 'rt') as file: data = json.load(file) if(data): return data else: return except Exception as e: print('[ERROR] Invalid JSON file') print(e) def configDataParser(config): print("GOC", config) payload = {} try: for BaoChay in config['BaoChay']: 60 payload[BaoChay['name']] = { 'xPos' : BaoChay['xPos'], 'yPos' : BaoChay['yPos'], 'entityLabel' : BaoChay['label'], 'deviceType' : 'baochay' } for BaoKhoi in config['BaoKhoi']: payload[BaoKhoi['name']] = { 'xPos' : BaoKhoi['xPos'], 'yPos' : BaoKhoi['yPos'], 'entityLabel' : BaoKhoi['label'], 'deviceType' : 'baokhoi' } for PhunNuoc in config['PhunNuoc']: payload[PhunNuoc['name']] = { 'xPos' : PhunNuoc['xPos'], 'yPos' : PhunNuoc['yPos'], 'entityLabel' : PhunNuoc['label'], 'deviceType' : 'phunnuoc' } for DieuHoa in config['DieuHoa']: payload[DieuHoa['name']] = { 'xPos' : DieuHoa['xPos'], 'yPos' : DieuHoa['yPos'], 'entityLabel' : DieuHoa['label'], 'deviceType' : 'dieuhoa' } for NhietDo in config['NhietDo']: payload[NhietDo['name']] = { 'xPos' : NhietDo['xPos'], 'yPos' : NhietDo['yPos'], 61 'entityLabel' : NhietDo['label'], 'deviceType' : 'nhietdo' } for Camera in config['Camera']: payload[Camera['name']] = { 'xPos' : Camera['xPos'], 'yPos' : Camera['yPos'], 'entityLabel' : Camera['label'], 'deviceType' : 'camera' } except Exception as e: print('[ERROR] Parsing Error') print(e) gateway_payload['ToaNha'] = config['ToaNha'] print(payload) return payload, gateway_payload def sendPayload(client, topic, payload): try: ret, cnt = client.publish(topic, json.dumps(payload), 1) if(ret != 0): print('[ERROR] message cant be able to sent') print('[INFO] Resending ') time.sleep(1) ret, cnt = sendPayload(client, gateway_topic, gateway_payload) if (ret != 0): print('[ERROR] sending again failed') return False else: 62 return True else: return True except Exception as e: print('[ERROR] sending message') # file mqtt.py [23] Mã nguồn giả lập liệu cảm biến thiết bị """ @filename : sensors simulator @author : TanHo @date : 29 August 2020 @organization : hust.edu.vn @version : v1.0 @description : Sensors simulation """ import argparse import paho.mqtt.client as mqtt import json import time import random from datetime import datetime from utils.constants import * class Simulator(): def init (self, tb_name, json_file): self.gw_telemetry = 'v1/gateway/telemetry' self.tb_name = tb_name 63 self.json_data = self.parseFile(json_file) #print (self.json_data) self.payload = self.createDataTelemetry(self.json_data) def tbInstantce(self, token): print("create tb instance") try: client = mqtt.Client(self.tb_name) client.username_pw_set(token) client.connect(THINGSBOARD_HOST, MQTT_PORT, 60) client.loop_start() return client except Exception as e: print('[ERROR] : {}' format(e)) def genDataNhietDo(self): a = {} normal = [] for t in range(21,30,1): for i in range(100): normal.append(t) rare = [0,5,10,40,45,50] choices = normal + rare print (" - temp choices") print (choices) a['value'] = random.choice(choices) a['ts'] = time.time()*100000 return a def genDataDieuHoa(self): a = {} a['value'] = random.choice(["on", "off"]) 64 a['ts'] = time.time()*100000 return a def genDataBaoChay(self): a = {} normal = ["normal"] * 1000 warning = ["warning"] * fire = ["fire"] choices = normal + warning + fire print (" - fire choices") print (choices) a['value'] = random.choice(choices) a['ts'] = time.time()*100000 return a def genDataBaoKhoi(self): a = {} normal = ["normal"] * 1000 warning = ["warning"] * fire = ["smoke"] choices = normal + warning + fire print (" - smoke choices") print (choices) a['value'] = random.choice(choices) a['ts'] = time.time()*100000 return a def createDataTelemetry(self, json_data): print("create data") payload = {} #print (json_data) for idx, v in json_data.items(): #print(idx, v) 65 if idx in DEVICES: for y in v: payload[y['label']] = [] a = {} if idx == "BaoChay": a = self.genDataBaoChay() elif idx == "BaoKhoi": a = self.genDataBaoKhoi() elif idx == "NhietDo": a = self.genDataNhietDo() elif idx == "DieuHoa": a = self.genDataDieuHoa() else: continue payload[y['label']].append(a) return payload def parseFile(self, fd): print("parse file: ", fd) with open(fd, 'rt') as file: data = json.load(file) if(data): return data else: return def sendTelemetry(self, client, topic, payload): ret = client.publish(topic, json.dumps(payload), 1) if (ret[0] == 0): print('{} Telemetry sent [OK]' format(datetime.now().strftime("%d/%m/%Y, %H:%M:%S"))) time.sleep(0.5) 66 else: raise ValueError('Telemetry Send') def run(self, token): client = self.tbInstantce(token) try: while True: self.sendTelemetry(client, self.gw_telemetry, self.payload) time.sleep(INTERVAL_TIME) self.payload = self.createDataTelemetry(self.json_data) print(self.payload) except KeyboardInterrupt as e: print('[INFO] program exiting ') client.loop_stop() client.disconnect() [24]Mã nguồn Javascript cho lọc Check Alarm Rule Chain var relations = []; if(msg.value >= 40){ // Nếu nhiệt độ lớn 40 độ phát cảnh báo relations.push("NewTempAlarm"); } else { relations.push("ClearTempAlarm"); } if(msg.value == "fire"){ // Phát cảnh báo có báo cháy relations.push("NewFiredAlarm"); } else { relations.push("ClearFiredAlarm"); } 67 if(msg.value == "smoke"){ // Phát cảnh báo có báo khói relations.push("NewSmokedAlarm"); } else { relations.push("ClearSmokedAlarm"); } return relations; 68 [23]Mã nguồn chạy giả lập kiểm thử # test.py Chạy giả lập gửi liệu lên thingsboard from utils import simulator from utils.constants import * from threading import Thread s1 = simulator.Simulator('tang1', "tang1_config.json") s2 = simulator.Simulator('tang2', "tang2_config.json") s3 = simulator.Simulator('tang3', "tang3_config.json") s4 = simulator.Simulator('tang4', "tang4_config.json") s5 = simulator.Simulator('tang5', "tang5_config.json") t1 = Thread(target=s1.run, args=(TOKEN_TANG_1,)) t2 = Thread(target=s2.run, args=(TOKEN_TANG_2,)) t3 = Thread(target=s3.run, args=(TOKEN_TANG_3,)) t4 = Thread(target=s4.run, args=(TOKEN_TANG_4,)) t5 = Thread(target=s5.run, args=(TOKEN_TANG_5,)) t1.start() t2.start() t3.start() t4.start() t5.start() t1.join() t2.join() t3.join() t4.join() t5.join() 69 ... QUAN VỀ HỆ THỐNG GIÁM SÁT TÒA NHÀ 1.1 Tổng quan hệ thống giám sát sử dụng cơng nghệ IoT 1.1.1 Mục đích tính tăng hệ thống giám sát 1.1.1.1 Mục đích hệ thống giám sát Hiện ngày có nhiều tịa nhà cao... TỔNG QUAN VỀ HỆ THỐNG GIÁM SÁT TÒA NHÀ 1.1 Tổng quan hệ thống giám sát sử dụng công nghệ IoT 1.1.1 Mục đích tính tăng hệ thống giám sát 1.1.2 Mơ hình hệ thống giám sát ... nhiều hệ thống IoT platform hoạt động tốt đạt mục tiêu hệ thống giám sát tòa nhà Thingsboard, DeviceHive, Thinger.io Trong luận văn này, học viên tiếp cận dựa Thingsboard, hệ thống IoT platform

Ngày đăng: 07/12/2021, 23:18

Mục lục

  • TÀI LIỆU THAM KHẢO

Tài liệu cùng người dùng

Tài liệu liên quan