Professional Documents
Culture Documents
2-3- Phân Tích Thiết Kế Hệ Thống IoT
2-3- Phân Tích Thiết Kế Hệ Thống IoT
Trang 1
Nội dung chính
Phương pháp thiết kế hệ thống IoT bao gồm:
• Mục đích & Yêu cầu
• Đặc tả kỹ thuật
• Đặc tả kỹ thuật quy trình
• Đặc tả mô hình miền
• Thông số mô hình thông tin
• Thông số dịch vụ
• Đặc tả cấp độ IoT
• Đặc tả kỹ thuật chế độ xem chức năng
• Đặc tả kỹ thuật xem hoạt động
• Tích hợp thiết bị và linh kiện
• Phát triển ứng dụng
Book website: http://www.internet-of-things-book.com
Bahga & Madisetti, © 2015
Trang 2
Các bước thiết kế
Trang 3
Bước 1: Đặc tả yêu cầu
• Bước đầu tiên trong phương pháp thiết kế hệ thống IoT là xác định mục đích và yêu cầu
của hệ thống.
• Ở bước này, mục đích, hành vi và yêu cầu của hệ thống (như yêu cầu thu thập dữ liệu,
yêu cầu phân tích dữ liệu, yêu cầu quản lý hệ thống, yêu cầu về quyền riêng tư và bảo
mật dữ liệu, yêu cầu giao diện người dùng, ...) đều được ghi lại.
Trang 4
Bước 2: Đặc tả tiến trình
• Bước thứ hai trong phương pháp thiết kế IoT là xác định đặc tả tiến trình. Trong bước này,
các trường hợp sử dụng của hệ thống IoT được mô tả chính thức dựa trên và bắt nguồn
từ mục đích và thông số kỹ thuật yêu cầu.
Trang 5
Bước 3: Đặc tả mô hình miền
• Bước thứ ba trong phương pháp thiết kế IoT là xác định Mô hình miền.
• Mô hình miền mô tả các khái niệm, thực thể và đối tượng chính trong miền của hệ thống
IoT sẽ được thiết kế.
• Mô hình miền xác định các thuộc tính của đối tượng và mối quan hệ giữa các đối tượng.
Mô hình miền cung cấp sự trình bày trừu tượng về các khái niệm, đối tượng và thực thể
trong miền IoT, độc lập với bất kỳ công nghệ hoặc nền tảng cụ thể nào.
• Với mô hình miền, người thiết kế hệ thống IoT có thể hiểu được miền IoT mà hệ thống sẽ
được thiết kế.
Trang 6
Bước 4: Đặc tả mô hình thông tin
• Bước thứ tư trong phương pháp thiết kế IoT là xác định Mô hình
thông tin.
• Mô hình thông tin xác định cấu trúc của tất cả thông tin trong hệ
thống IoT, ví dụ: các thuộc tính của Thực thể ảo, các mối quan hệ,
v.v.
• Mô hình thông tin không mô tả chi tiết cụ thể về cách thông tin
được biểu diễn hoặc lưu trữ.
• Để xác định mô hình thông tin, trước tiên chúng ta liệt kê các Thực
thể ảo được xác định trong Mô hình miền. Mô hình thông tin bổ
sung thêm chi tiết cho Thực thể ảo bằng cách xác định các thuộc
tính và mối quan hệ của chúng.
Trang 7
Bước 5: Thông số dịch vụ
• Bước thứ năm trong phương pháp thiết kế IoT là xác định các
thông số kỹ thuật của dịch vụ. Thông số kỹ thuật dịch vụ xác định
các dịch vụ trong hệ thống IoT, loại dịch vụ, đầu vào/đầu ra dịch vụ,
điểm cuối dịch vụ, lịch trình dịch vụ, điều kiện tiên quyết của dịch
vụ và hiệu ứng dịch vụ.
Trang 8
Bước 6: Đặc tả cấp độ IoT
• Bước thứ sáu trong phương pháp thiết kế IoT là xác định cấp độ IoT
cho hệ thống. Trong bài trước, chúng ta đã học năm cấp độ triển khai
IoT.
Trang 9
Bước 7: Đặc tả thành phần chức năng
• Bước thứ bảy trong phương pháp thiết kế IoT là xác định thành
phần chức năng. Thành phần chức năng (Functional View) xác định
các chức năng của hệ thống IoT được nhóm thành các Nhóm chức
năng (Functional Group) khác nhau.
• Mỗi Nhóm chức năng cung cấp các chức năng để tương tác với các
đối tượng được xác định trong Mô hình miền hoặc cung cấp thông
tin liên quan đến các đối tượng này.
Trang 10
Bước 8: Đặc tả thành phần hoạt động
• Bước thứ tám trong phương pháp thiết kế IoT là xác định thông số
kỹ thuật của thành phần hoạt động. Ở bước này, các tùy chọn khác
nhau liên quan đến việc triển khai và vận hành hệ thống IoT được
xác định, chẳng hạn như tùy chọn lưu trữ dịch vụ, tùy chọn lưu trữ,
tùy chọn thiết bị, tùy chọn lưu trữ ứng dụng, v.v.
Trang 11
Bước 9: Tích hợp thiết bị
• Bước thứ chín trong phương pháp thiết kế IoT là tích hợp các thiết bị
và thành phần hệ thống.
Trang 12
Bước 10: Phát triển ứng dụng
• Bước cuối cùng trong phương pháp thiết kế IoT là phát triển ứng
dụng IoT.
Trang 13
Tự động hóa trong nhà thông minh
Chúng ta sẽ đưa ra ví dụ về phân tích thiết kế và xây dựng một ứng dụng đơn giản cho
nhà thông minh
Trang 14
Bước 1: Đặc tả yêu cầu
Ví dụ của về hệ thống tự động hóa nhà thông minh, mục đích và yêu cầu
đối với hệ thống có thể được mô tả như sau:
• Mục đích: Một hệ thống tự động hóa gia đình cho phép điều khiển đèn trong nhà từ
xa bằng ứng dụng web.
• Hành vi : Hệ thống tự động hóa gia đình nên có chế độ tự động và thủ công. Ở chế
độ tự động, hệ thống đo mức độ ánh sáng trong phòng và bật đèn khi trời tối. Ở chế
độ thủ công, hệ thống cung cấp tùy chọn bật/tắt đèn bằng tay và từ xa.
• Yêu cầu quản lý hệ thống: Hệ thống cần cung cấp chức năng giám sát và điều khiển
từ xa.
• Yêu cầu phân tích dữ liệu: Hệ thống phải thực hiện phân tích dữ liệu cục bộ.
• Yêu cầu triển khai ứng dụng: Ứng dụng phải được triển khai cục bộ trên thiết bị
nhưng có thể truy cập được từ xa.
• Yêu cầu bảo mật: Hệ thống phải có khả năng xác thực người dùng cơ bản.
Trang 15
Bước 2: Đặc tả tiến trình
Trang 16
Bước 3: Đặc tả mô hình miền
Trang 17
Bước 4: Đặc tả mô hình thông tin
Trang 18
Bước 5: Thông số dịch vụ
Trang 19
Bước 5: Thông số dịch vụ
Trang 20
Bước 6: Đặc tả cấp độ IoT
Trang 21
Bước 7: Đặc tả thành phần chức năng
Trang 22
Bước 8: Đặc tả thành phần hoạt động
Trang 23
Bước 9: Tích hợp thiết bị
Trang 24
Bước 10: phát triển ứng dụng
• Auto
• Điều khiển thiết bị chiếu sáng tự động dựa trên điều kiện ánh
sáng trong phòng
• Light
• Khi chế độ Auto tắt, chế độ này được sử dụng để điều khiển
thiết bị chiếu sáng theo cách thủ công.
• Khi chế độ Auto bật, nó phản ánh trạng thái hiện tại của thiết
bị chiếu sáng.
Trang 25
Triển khai: Dịch vụ web RESTful
Các dịch vụ REST được triển khai với Django REST Framework
# Models – models.py
from django.db import models
class Mode(models.Model):
1. Ánh xạ dịch vụ tới các mô hình. Các name = models.CharField(max_length=50)
trường mô hình lưu trữ các trạng thái
(bật/tắt, tự động/thủ công) class State(models.Model):
name = models.CharField(max_length=50)
class ModeSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Mode
fields = ('url', 'name')
class StateSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = State Trang 26
fields = ('url', 'name')
Triển khai: Dịch vụ web RESTful
# Views – views.py
# Models – models.py from myapp.models import Mode, State
from django.db import models
3. Viết ViewSets cho Model kết hợp logic cho from rest_framework import viewsets
một tập hợp các khung nhìn liên quan trong from myapp.serializers import
class Mode(models.Model): một lớp duy nhất. ModeSerializer, StateSerializer
name = models.CharField(max_length=50)
class ModeViewSet(viewsets.ModelViewSet):
class State(models.Model): queryset = Mode.objects.all()
name = models.CharField(max_length=50) serializer_class = ModeSerializer
class StateViewSet(viewsets.ModelViewSet):
queryset = State.objects.all()
serializer_class = StateSerializer
Screenshot of browsable
State REST API
Screenshot of browsable
Mode REST API
Trang 28
Triển khai : Controller Native Service
#Controller service def runAutoMode():
import RPi.GPIO as GPIO ldr_reading = readldr(LDR_PIN)
if ldr_reading < threshold:
import time switchOnLight(LIGHT_PIN)
Native service được triển khai local import sqlite3 as lite setCurrentState('on')
import sys else:
switchOffLight(LIGHT_PIN)
setCurrentState('off')
con = lite.connect('database.sqlite')
cur = con.cursor() def runManualMode():
state = getCurrentState()
GPIO.setmode(GPIO.BCM) if state=='on':
threshold = 1000 switchOnLight(LIGHT_PIN)
setCurrentState('on')
LDR_PIN = 18 elif state=='off':
LIGHT_PIN = 25 switchOffLight(LIGHT_PIN)
setCurrentState('off')
def readldr(PIN):
def getCurrentMode():
reading=0
1. Triển khai native service bằng cur.execute('SELECT * FROM myapp_mode')
GPIO.setup(PIN, GPIO.OUT) data = cur.fetchone()
Python và chạy trên thiết bị GPIO.output(PIN, GPIO.LOW) #(1, u'auto') return data[1]
time.sleep(0.1)
GPIO.setup(PIN, GPIO.IN) def getCurrentState():
cur.execute('SELECT * FROM myapp_state')
while (GPIO.input(PIN)==GPIO.LOW): data = cur.fetchone()
reading=reading+1 #(1, u'on') return data[1]
return reading
def setCurrentState(val):
query='UPDATE myapp_state set name="'+val+'"'
def switchOnLight(PIN):
cur.execute(query)
GPIO.setup(PIN, GPIO.OUT)
GPIO.output(PIN, GPIO.HIGH) while True:
currentMode=getCurrentMode()
def switchOffLight(PIN): if currentMode=='auto':
runAutoMode()
GPIO.setup(PIN, GPIO.OUT) elif currentMode=='manual':
GPIO.output(PIN, GPIO.LOW) runManualMode()
time.sleep(5)
Trang 29
Triển khai : Application
# Views – views.py
def home(request):
out=‘’
{
"
n
a
m
e
"
:
"
o
n
"
}
r=requests.put('http://127.0.0.1:8000/state/1/', data=values, auth=(‘username', ‘password'))
result=r.text
output = json.loads(result)
out=output['name']
if 'off' in request.POST:
values = {"name": "off"}
r=requests.put('http://127.0.0.1:8000/state/1/', data=values, auth=(‘username', ‘password'))
result=r.text
output = json.loads(result)
out=output['name']
if 'auto' in request.POST:
values = {"name": "auto"}
r=requests.put('http://127.0.0.1:8000/mode/1/', data=values, auth=(‘username', ‘password'))
Trang 30
result=r.text
Triển khai : Application
<div class="app-content-inner">
<fieldset>
<div class="field clearfix">
Django Application
SQLite Database
OS running on Raspberry Pi
Trang 32
Thank you!
Trang 33