Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 33

Khoa Công nghệ thông tin 1

Thiết kế hệ thống IoT


Giảng viên: TS. Trần Tiến Công
Email: congtt@ptit.edu.vn

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)

2. Viết các bộ nối tiếp Model. Việc tuần tự


hóa cho phép chuyển đổi dữ liệu phức tạp
(chẳng hạn như mô hình học máy) thành
các kiểu dữ liệu Python nguyên gốc, sau đó
có thể dễ dàng kết xuất thành JSON, XML
hoặc các loại nội dung khác.
# Serializers – serializers.py
from myapp.models import Mode, State
from rest_framework import serializers

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

# URL Patterns – urls.py


from django.conf.urls import patterns, include, url
from django.contrib import admin
from rest_framework import routers
4. Viết mẫu URL cho các dịch vụ.
from myapp import views
admin.autodiscover() Vì ViewSet được sử dụng thay vì view nên
router = routers.DefaultRouter() chúng ta có thể tự động tạo cấu hình URL
router.register(r'mode', views.ModeViewSet) bằng cách đăng ký các viewset với một lớp
router.register(r'state', views.StateViewSet) router.
urlpatterns = patterns('',
url(r'^', include(router.urls)), Lớp router tự động xác định cách ánh xạ các
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), URL của ứng dụng tới logic xử lý các yêu cầu
url(r'^admin/', include(admin.site.urls)), đến.
url(r'^home/', 'myapp.views.home'),
)
Trang 27
Triển khai: Dịch vụ web RESTful

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=‘’

Django Application View if 'on' in


request.P
OST:
valu
e
s

{
"
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 Template <label class="input-label icon-lamp" for="lamp-state">Auto</label>


<input id="lamp-state" class="input js-lamp-state hidden" type="checkbox">
{% if currentmode == 'auto' %}
<div class="js-lamp-state-toggle ui-toggle " data-toggle=".js-lamp-state">
{% else %}
<div class="js-lamp-state-toggle ui-toggle js-toggle-off" data-toggle=".js-lamp-state">
{% endif %}
<span class="ui-toggle-slide clearfix">
<form id="my_form11" action="" method="post">{% csrf_token %}
<input name="auto" value="auto" type="hidden" />
<a href="#" onclick="$(this).closest('form').submit()"><strong class="ui-toggle-off">OFF</strong></a>
</form>
<strong class="ui-toggle-handle brushed-metal"></strong>
<form id="my_form13" action="" method="post">{% csrf_token %}
<input name="manual" value="manual" type="hidden" />
<a href="#" onclick="$(this).closest('form').submit()"><strong class="ui-toggle-on">ON</strong></a>
</form></span>
</div></div>
<div class="field clearfix">
<label class="input-label icon-lamp" for="tv-state">Light</label>
<input id="tv-state" class="input js-tv-state hidden" type="checkbox">
{% if currentstate == 'on' %}
<div class="js-tv-state-toggle ui-toggle " data-toggle=".js-tv-state">
{% else %}
<div class="js-tv-state-toggle ui-toggle js-toggle-off" data-toggle=".js-tv-state">
{% endif %}
{% if currentmode == 'manual' %}
<span class="ui-toggle-slide clearfix">
<form id="my_form2" action="" method="post">{% csrf_token %}
<input name="on" value="on" type="hidden" />
<a href="#" onclick="$(this).closest('form').submit()"><strong class="ui-toggle-off">OFF</strong></a>
</form>
<strong class="ui-toggle-handle brushed-metal"></strong>
<form id="my_form3" action="" method="post">{% csrf_token %}
<input name="off" value="off" type="hidden" />
<a href="#" onclick="$(this).closest('form').submit()"><strong class="ui-toggle-on">ON</strong></a>
</form>
</span>
{% endif %}
{% if currentmode == 'auto' %}
{% if currentstate == 'on' %}
<strong class="ui-toggle-on">&nbsp;&nbsp;&nbsp;&nbsp;ON</strong>
{% else %}
<strong class="ui-toggle-on">&nbsp;&nbsp;&nbsp;&nbsp;OFF</strong>
{% endif %}{% endif %}
</div>
</div> Trang 31
</fieldset></div></div></div>
Tích hợp hệ thống
• Thiết lập thiết bị
• Triển khai và chạy các dịch vụ REST và Native
• Triển khai và chạy Ứng dụng
• Thiết lập cơ sở dữ liệu

Django Application

REST services implemented with Django-REST framework

SQLite Database

Native service implemented in Python

OS running on Raspberry Pi

Raspberry Pi device to which sensors


and actuators are connected

Trang 32
Thank you!

Trang 33

You might also like