物聯網系統開發:從0到1構建iot平台
內容描述
這是一本從技術原理、工程實踐、設計模式和最佳實踐4個維度講解物聯網系統開發的著作,是作者10餘年實踐經驗的總結。
首先,通過代碼實例循序漸進、深入淺出地介紹了物聯網協議的原理與實踐;
然後,以一個功能完備的綜合性物聯網平台的搭建過程為例,講解瞭如何從0到1搭建一個物聯網平台,
同時總結了物聯網平台開發中常用的設計模式和最佳實踐。
全書一共12章,邏輯上可分為3大部分:
第一部分(第1-2章)物聯網基礎
對物聯網的一些關鍵常識和各種協議進行了詳細的介紹。
第二部分(第3-5章)物聯網協議
通過大量實例代碼詳細分析和講解了MQTT協議的規範、特性、原理和應用。
第三部分(第6-12章)物聯網平台開發
詳細講解瞭如何使用開源組件和雲服務從0到1搭建一個具備完備功能的物聯網平台。
目錄大綱
前言
第一部分?物聯網基礎
第1章?什麼是物聯網2
1.1物聯網和人工智能3
1.2物聯網的現狀與前景4
第2章?常見的物聯網協議6
2.1 MQTT協議6
2.2 MQTT-SN協議7
2.3 CoAP協議8
2.4 LwM2M協議9
2.5 HTTP協議9
2.6 LoRaWAN協議9
2.7 NB-IoT協議10
2.8本章小結10
第二部分?MQTT協議詳解與實戰
第3章?MQTT協議基礎13
3.1 MQTT協議的通信模型13
3.2 MQTT Client 14
3.3 MQTT Broker 15
3.4 MQTT協議數據包格式17
3.5本章小結19
第4章?MQTT協議詳解20
4.1建立到Broker的連接20
4.1.1 CONNECT數據包20
4.1.2 CONNACK數據包23
4.1 .3關閉連接25
4.1.4代碼實踐26
4.2訂閱與發布28
4.2.1 PUBLISH數據包30
4.2.2代碼實踐:發布消息31
4.2.3訂閱一個主題32
4.2.4代碼實踐:訂閱主題35
4.2.5取消訂閱36
4.3 QoS及其最佳實踐39
4.3.1 MQTT協議中的QoS等級39
4.3.2 QoS0 40
4.3.3 QoS1 40
4.3.4 QoS2 42
4.3.5代碼實踐:使用不同的QoS發布消息44
4.3.6實際的Subscribe QoS 48
4.3.7 QoS的最佳實踐48
4.4 Retained消息和LWT 49
4.4.1 Retained消息49
4.4.2代碼實踐:發布和接收Retained消息50
4.4.3 LWT 51
4.4.4代碼實踐:監控Client連接狀態52
4.5 Keepalive與連接保活54
4.5.1 Keepalive 54
4.5.2代碼實踐55
4.5.3連接保活57
4.6 MQTT 5.0的新特性58
4.6.1用戶屬性59
4.6.2共享訂閱59
4.6.3消息過期60
4.6.4重複主題60
4.6.5 Broker能力查詢60
4.6.6雙向DISCONNECT 61
4.7本章小結61
第5章?MQTT協議實戰62
5.1 “AI+IoT”項目實戰62
5.1.1用TensorFlow在Android系統上進行物體識別62
5.1.2如何在MQTT協議里傳輸大文件63
5.1.3消息去重64
5.1.4最終的消息數據格式64
5.1.5代碼實踐:上傳識別結果64
5.1.6在瀏覽器中運行MQTT Client 66
5.1.7代碼實踐:接收識別結果67
5.1.8搭建私有MQTT Broker 68
5.1.9傳輸層安全69
5.2 MQTT常見問題解答70
5.3開發物聯網應用,學會MQTT協議就夠了嗎71
5.4本章小結72
第三部分?實戰:從0搭建一個IoT平台
第6章?準備工作台75
6.1安裝需要的組件75
6.2 Maque IotHub的組成部分76
6.3項目結構76
6.3.1 IotHub Server 77
6.3.2 IotHub DeviceSDK 77
6.4本章小結79
第7章?設備生命週期管理80
7.1設備註冊80
7.1. 1設備三元組80
7.1.2 EMQ X的認證方式81
7.1.3設備接入流程84
7.1.4 Server API:設備註冊84
7.1.5調整EMQ X配置87
7.1.6修改DeviceSDK 87
7.1.7 Server API:設備信息查詢88
7.1.8 Server API:獲取接入IotHub的一次性密碼(JWT) 89
7.1.9完善細節91
7.2設備連接狀態管理93
7.2.1 Poor man's Solution 93
7.2.2使用EMQ X的解決方案94
7.2.3管理設備的連接狀態97
7.3設備的禁用與刪除101
7.3.1禁用設備101
7.3.2刪除設備105
7.4設備權限管理106
7.4.1為什麼要控制Publish和Subscribe 106
7.4.2 EMQ X的ACL功能106
7.4 .3集成EMQ X ACL 110
7.5給IotHub加一點擴展性111
7.5.1 EMQ X的縱向擴展112
7.5.2 EMQ X的橫向擴展113
7.6本章小結114
第8章?上行數據處理115
8.1選擇一個可擴展的方案115
8.1.1完全基於MQTT協議的方案116
8.1.2基於Hook的方案117
8.1.3數據格式118
8.1.4主題名規劃118
8.1.5上行數據存儲118
8.1.6通知業務系統119
8.1.7上行數據查詢119
8.1.8上行數據處理流程120
8.2實現上行數據處理功能120
8.2.1 DeviceSDK的功能實現121
8.2.2 IotHub Server的功能實現122
8.2.3代碼聯調125
8.2.4通知業務系統127
8.2. 5 Server API歷史消息查詢129
8.3設備狀態上報130
8.3.1設備狀態130
8.3.2 DeviceSDK的實現131
8.3.3 IotHub Server的實現131
8.3.4 Server API:查詢設備狀態134
8.3.5代碼聯調134
8.3.6為何不用Retained Message 135
8.4時序數據庫135
8.4.1時序數據136
8.4.2時序數據庫136
8.4.3收集設備連接狀態變化的數據137
8.5本章小結140
第9章?下行數據處理141
9.1選擇一個可擴展的方案142
9.1.1完全基於MQTT協議的方案142
9.1.2基於EMQ X RESTful API的方案143
9.1.3下行數據格式143
9.1.4主題名規劃144
9.1.5如何訂閱主題145
9.1.6設備端消息去重145
9.1.7指令回复146
9.2 DeviceSDK端的實現146
9.2.1消息去重146
9.2.2提取元數據147
9.2.3處理指令148
9.2. 4回復指令149
9.3服務端的實現150
9.3.1更新ACL列表150
9.3.2 EMQ X發布功能150
9.3.3 Server API:發送指令151
9.3.4服務器訂閱152
9.3.5通知業務系統154
9.3.6代碼聯調155
9.4本章小結158
第10章?IotHub的高級功能159
10.1 RPC式調用159
10.1.1主題規劃160
10.1.2等待指令回复161
10.1.3服務端實現161
10.1.4 Server API:發送RPC指令163
10.1.5更新設備ACL列表164
10.1.6更新服務器訂閱列表164
10.1.7 DeviceSDK端實現165
10.1.8代碼聯調166
10.2設備數據請求167
10.2.1更新設備ACL列表168
10.2.2服務端實現168
10.2.3 DeviceSDK端實現169
10.2.4代碼聯調170
10.3 NTP服務171
10.3.1 IotHub的NTP服務172
10.3.2 DeviceSDK端實現172
10.3.3服務端實現173
10.3.4代碼聯調174
10.4設備分組175
10.4.1功能設計175
10.4.2服務端實現177
10.4.3 DeviceSDK端實現180
10.4.4代碼聯調183
10.5 M2M設備間通信185
10.5.1主題名規劃185
10.5.2服務端實現186
10.5.3 DeviceSDK端實現186
10.5.4代碼聯調187
10.6 OTA升級188
10.6.1功能設計189
10.6.2服務端實現191
10.6.3 DeviceSDK端實現194
10.6.4代碼聯調196
10.7設備影子199
10.7.1什麼是設備影子199
10.7.2設備影子的數據結構200
10.7. 3設備影子的數據流向200
10.7.4服務端實現202
10.7.5 DeviceSDK端實現208
10.7.6代碼聯調209
10.8 IotHub的狀態監控211
10.8.1使用RESTful API 211
10.8.2使用系統主題212
10.8. 3 EMQ X的Listener Zone 213
10.8.4代碼演示214
10.9本章小結215
第11章?擴展EMQ X Broker 216
11.1 EMQ X的插件系統217
11.1.1 Erlang語言217
11.1.2安裝Erlang編譯工具218
11.2我們會用到的Erlang特性218
11.2.1 Erlang簡介218
11.2.2變量和賦值219
11.2.3特殊的Erlang數據類型220
11.2.4模式匹配221
11.2.5模塊與函數221
11.2.6宏定義222
11.2.7 OTP 222
11.3搭建開發和編譯環境222
11.3.1下載和編譯EMQ X222
11.3.2使用插件模板223
11.3.3插件的代碼結構224
11.3.4修改模板插件226
11.4實現基於RabbitMQ的Hook插件:emqx-rabbitmq-hook 227
11.4.1代碼結構227
11.4.2建立RabbitMQ連接和連接池227
11.4.3處理client.connected事件228
11.4.4處理client.disconnected事件230
11.4.5處理message.publish事件230
11.4.6編譯插件231
11.4.7插件的配置文件233
11.4.8應用配置項235
11.5使用emqx-rabbitmq-hook 236
11.5.1發布emqx-rabbitmq-hook插件236
11.5.2集成emqx-rabbitmq-hook 238
11.5.3 IotHub的全新架構239
11.6本章小結240
第12章?集成CoAP協議241
12.1 CoAP協議簡介241
12.1.1 CoAP協議的消息模型242
12.1.2 CoAP協議的請求/應答機制243
12.1.3 CoAP OBSERVE 244
12.1.4 CoAP HTTP Gateway 244
12.2集成CoAP協議245
12.2.1 EMQ X的CoAP插件245
12.2.2 CoAP設備端代碼246
12.2.3代碼聯調247
12.2.4 CoAP協議的連接狀態247
12.3本章小結248
結語?我們學到了什麼249
附錄?如何運行Maque IotHub 253
作者介紹
付強
資深物聯網技術專家,有10餘年從業經驗,專注於物聯網平台和產品的設計與開發,
非常熟悉各種物聯網協議和物聯網系統的架構與開發。
現就職於某智慧社區解決方案企業的聯合創始人兼CTO,曾就職於趨勢科技、諾基亞中國,以及德國和美國矽谷的初創公司。
從C語言到Web開發,從微服務架構到移動開發,都有涉獵。
GitChat專欄作者,撰寫了多篇物聯網和AI相關的專欄文章。