全端物聯網探索之旅 - 重點整理版

21
Full-Stack IoT Development 探索之旅 Simen Li [email protected] www.sivann.com.tw

Upload: simen-li

Post on 12-Apr-2017

838 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: 全端物聯網探索之旅 - 重點整理版

Full-Stack IoT Development 探索之旅

Simen Li [email protected]

www.sivann.com.tw

Page 2: 全端物聯網探索之旅 - 重點整理版

物聯網

1

異 質 混 合

機 器 區 網

同 質 網 路

獨 立 連 網

Cloud/Web

物聯網方案不會只有一種,

但它們都往

同一個地方匯流。

這意味著「 」

Page 3: 全端物聯網探索之旅 - 重點整理版

Full-Stack Web Development

2

前端 後端

全端

Example MEAN Stack

前端語言:JavaScript, HTML, CSS

前端(框架):JQuery, Bootstrap, Handlebars, Backbone, Angular, React, 五花八門

後端語言:Node.js, PHP, Ruby, Python, ...

後端框架:Express, Laravel, Rails, Django, ...

資料庫:SQL, MongoDB, …

Page 4: 全端物聯網探索之旅 - 重點整理版

Full-Stack IoT Development

3

前端

後端

機器網路

公開或專用、私有標準

通訊協定的選擇

節點硬韌體 (通訊晶片/模組)

是否需要閘道器

機器網路管理

裝置連網有簡單、也有複雜的做法

使 Web 開發者輕鬆投入 IoT 成為可能

Page 5: 全端物聯網探索之旅 - 重點整理版

不 Full-stack 都不行

4

物聯網 應用

Web/Cloud 服務 儲存設施 API Gateway

周邊裝置設計 (硬/韌體) 組織網路 (PAN/WAN) 與網管 (本地) 機器網路應用程式 閘道器之需求與設計

視覺設計 體驗設計 (跨平台)應用程式

Page 6: 全端物聯網探索之旅 - 重點整理版

Web Front End and Back End

5

Page 7: 全端物聯網探索之旅 - 重點整理版

Web Front/Back Ends

6

後端 Server

傳統架構 (Web 1.0)

前端 靜態

前端是靜態的, 它是後端 MVC 的 V

Router /Controller

前端 Client

模板引擎 (Template Engine)

Page 8: 全端物聯網探索之旅 - 重點整理版

Ajax/Comet

7

Web 2.0+:動態、即時、互動性強 前端從「頁面」走向「應用程式」

後端 Server

Router /Controller

前端

前端 Client

動態

HTML

HTTP RSP

JS

WS

SSE

AJAX JS

HTML

Web 2.0+ 前端可以獨立獲取數據, 因此有了自己的 MVC

Page 9: 全端物聯網探索之旅 - 重點整理版

在後端環境進行前端開發

8

Task Runner

Package Manager

Pre-compiler Transpiler

Bundler

Linter Dev

Server

npm, bower, spm, pip, gem

webpack, RequireJS (AMD), Browserify (CommonJS)

Non-JS Resources (via plugin, transform, loader)

Babel (ES6, ES7, JSX), less, sass

Utils

JSHint, ESHint

uglify, watchify

grunt, gulp, npm, webpack

Page 10: 全端物聯網探索之旅 - 重點整理版

Node.js

9

Node.js Core

Node.js Bindings (C++)

Google V8 (C++) libuv

JavaScript Engine Cross-platform Async I/O

Server-side, JS runtime

┌───────────────────────┐┌─>│ timers ││ └──────────┬────────────┘│ ┌──────────┴────────────┐│ │ I/O callbacks ││ └──────────┬────────────┘│ ┌──────────┴────────────┐│ │ idle, prepare ││ └──────────┬────────────┘│ ┌──────────┴────────────┐│ │ poll ││ └──────────┬────────────┘│ ┌──────────┴────────────┐│ │ check ││ └──────────┬────────────┘│ ┌──────────┴────────────┐└──┤ close callbacks │

└───────────────────────┘

[ ]

[ ]

[ ]

[ ]

[ ]

[ ]

Concurrency – Event Loop

Network I/O TCP, UDP, TTY, …

File I/O

DNS Ops.

User code

uv__io_t

epoll kqueue event ports IOCP

TRD Pool

Linux OSX/BSD SunOS Windows

Async I/O – libuv

Page 11: 全端物聯網探索之旅 - 重點整理版

設計命令行工具 (CLI Tool)

10

使用 JavaScript 寫命令行工具

process.argv[]

命令行剖析/問答式框架

node-optimist minimist (substack)

nomnom commander (tj)

yargs

inquirer, liftoff, vantage, vorpal

終端著色 / 圖形工具 / 框架

chalk, cli-color

clui, ora, cli-spinners

blessed, react-blessed

Page 12: 全端物聯網探索之旅 - 重點整理版

除錯工具

11

$ npm install iron-node -g $ iron-node app.js

$ npm install devtool -g $ devtool app.js

Chrome DevTools

IDE 內建/外掛除錯環境

WebStorm, VS Code, Cloud9, Nuclide, Eclipse, ATOM, brackets, …

break; $ node debug app.js # c, n, s, o

$ npm install node-inspector -g $ node-debug app.js

原生除錯工具

第三方工具

Page 13: 全端物聯網探索之旅 - 重點整理版

除錯訊息與日誌 (Logging)

12

stdout / stderr [ + pipe ] [ + redirect ] 時間戳

格式

層級

位置

uuid

捲動

console.log(); console.error();

$ node app.js $ node app.js > ./mylog

$ npm install winston --save $ node app.js

$ npm install bunyan --save $ node app.js | bunyan [opts]

$ npm install pino --save $ node app.js | pino-<xxx>

json

text $ npm install debug --save $ DEBUG=namespace node app.js

intel, log4js, loggly, bole

第三方模組

Page 14: 全端物聯網探索之旅 - 重點整理版

測試框架/工具

13

Test Framework

Assertions Test Double

Code Coverage

Hosted CI Services

Travis CI, Circle CI, GitLab CI, wercker, codeship

mocha, jasmie-node, tape, tap

istanbul, JSCover, blanket.js

sinon.js assert, should, expect, chai

Page 15: 全端物聯網探索之旅 - 重點整理版

物聯網大亂鬥

14

Page 16: 全端物聯網探索之旅 - 重點整理版

網路拓撲

15

E C

Point-to-Point

Star Network

C

E

E

E E

E

E

Star-of-Starts Network

C

E

G E

E

E E

G E

E

E

Mesh Network

C

E

E E

E

E

R

R

R E

R R

R E

E

Page 17: 全端物聯網探索之旅 - 重點整理版

依區域範疇劃分

16

# 空間範疇 典型距離 協定範例

1 Near Field < 10 cm NFC Forum

2 PAN 1 m ~ 50 m Bluetooth, ZigBee, Thread, IEEE 802.15.4

3 LAN 50 m ~ 1 km Wi-Fi, Ethernet

4 (LP)WAN 1 km ~ 50 km SigFix, LoRa, 5G, 4G, 3G, Internet

距離

資 料 傳 輸 率 LPWAN

WAN PAN

LAN

Page 18: 全端物聯網探索之旅 - 重點整理版

常見 PAN/WAN 之特性

17

# 協定 耗電量 室內距離 MESH 開放度 易用度 網際網路

1 EnOcean 非常低 < 30 m 否 低 中等 否

2 ZigBee 低 < 50 m 是 低 困難 否

3 Thread 低 < 50 m 是 中 中等 是

4 BLE 低 < 50 m 2016 (否) 中 中等 否

5 WiFi 高 (新低) < 30 m 否 高 簡單 是

# 協定 耗電量 距離 下行 開放度 覆蓋率

1 Weightless 非常低 20+ km 受限 中 中

2 SigFox 非常低 30+ km 受限 低 中高

3 LoRa 非常低 30+ km 受限 中 中

4 3G/4G 高 50+ km 是 高 高

5 5G 非常低 未知 未知 高 部分佈建

Page 19: 全端物聯網探索之旅 - 重點整理版

協定堆疊

18

OSI 7 Layers

Physical

Data Link

Network

Transport

Session

Presentation

Application

Internet Protocol Suite (TCP/IP)

Application

Transport

Network

Physical (Link)

FTP

TLS SSL

ZigBee

IEEE 802.15.4

6LoWPAN IPv6 IPv4

IEEE 802.3/ IEEE 802.11

(Ethernet/WiFi)

TCP UDP

HTTP MQTT MQTT-SN CoAP

SigFox LoRa

EnOcean

BLE

Thread

Page 20: 全端物聯網探索之旅 - 重點整理版

LWM2M:輕量型機器對機器協定

19

網路組織與裝置管理

Machine Server Bootstrap Server

Machine Network Management Layer (REST Interface)

register deregister update read write

write attrs execute create delete observe

bootstrap

notify

end-nodes

LWM2M URLs /{object}/{instance}/{resource}

/3303/0/5700 (= /temperature/0/sensedValue)

Page 21: 全端物聯網探索之旅 - 重點整理版

BLE

20

降低物聯網應用開發門檻。

立志以 Node.js 掀起全端物聯網開發革命!

機器網路

後端

前端

LoRa Thread

01

02

03

04

ZigBee

CoAP

MQTT