1、前言
内容:物聯網平台概論、裝置接入以及消息通信
官網位址時長:建議學習時長整體50分鐘,理論40分鐘,實戰10分鐘
代碼:裝置端
demo、服務端
約定:物聯網平台已經開通并登陸
https://iot.console.aliyun.com導航:
下一課2、概論
2.1、物聯網平台是什麼、能幹什麼
阿裡雲物聯網平台為裝置提供安全可靠的連接配接通信能力,向下連接配接海量裝置,支撐裝置資料采集上雲;向上提供Open API,服務端通過調用Open API将指令下發至裝置端,實作遠端控制。
物聯網平台也提供了其他增值能力,如裝置管理、規則引擎等,為各類IoT場景和行業開發者賦能。

2.2、裝置接入
物聯網平台支援海量裝置連接配接上雲,進行穩定可靠地雙向通信。
• 支援蜂窩(2G/3G/4G/5G)、NB-IoT、LoRaWAN、Wi-Fi等不同網絡裝置接入,解決企業異構網絡裝置接入管理痛點。
• 支援MQTT、CoAP、HTTP/S等多種協定的接入,既滿足長連接配接的實時性需求,也滿足短連接配接的低功耗需求。
• 開源多種平台裝置端SDK,提供跨平台移植指導,賦能企業基于多種平台做裝置接入。
2.3、裝置管理
物聯網平台提供完整的裝置生命周期管理功能,支援裝置注冊、功能定義、資料解析、線上調試、遠端配置、固件更新、遠端維護、實時監控、分組管理、裝置删除等功能。
• 提供裝置物模型,簡化應用開發。
• 提供資料存儲能力,友善使用者海量裝置資料的存儲及實時通路。
• 提供OTA更新能力,賦能裝置遠端更新。
• 提供裝置影子緩存機制,将裝置與應用解耦,解決不穩定網絡下的通信不可靠痛點。
2.4、規則引擎
物聯網平台規則引擎包含以下功能:
• 服務端訂閱:訂閱某産品下所有裝置的某個或多個類型消息,您的服務端可以通過AMQP用戶端或消息服務(MNS)用戶端擷取訂閱的消息。
• 雲産品流轉:物聯網平台根據您配置的資料流轉規則,将指定Topic消息的指定字段流轉到目的地,進行存儲和計算處理。
• 場景關聯:配置簡單規則,即可将裝置資料無縫流轉至其他裝置,實作裝置關聯。
2.5、Open API
物聯網平台提供豐富的API接口,友善您管理裝置或者給裝置發送控制指令。同樣的,Open API 也有多種語言版本的SDK。
3、基礎概念
3.1、裝置三元組
• 一個裝置包含4個資訊:productKey、productSecret、deviceName、deviceSecret,其中productKey、deviceName、deviceSecret我們稱為三元組資訊,也叫做裝置證書,在建立裝置時由物聯網平台頒發。
• productKey、productSecret 是産品資訊,産品是一類裝置的集合,productKey 是産品的唯一性辨別符,productSecret 是産品密鑰,後面動态注冊會用到。
• deviceName、deviceSecret 是裝置資訊,建立産品後建立裝置,productKey+deviceName 是裝置的唯一性辨別符,deviceSecret 是裝置密鑰,裝置接入時進行身份驗證要用到。
• 三元組這個概念是我們在使用物聯網平台的過程中一直會出現的概念,也是阿裡雲iot最重要、最基礎的概念。三元組是平台唯一的,是物聯網平台識别一個裝置的重要辨別。
3.2、接入協定
物聯網平台支援MQTT、CoAP、HTTP/S等多種協定的接入,其中MQTT是使用最廣泛的一種接入協定,本次講解裝置接入就是基于MQTT來接入的。
MQTT 接入的幾個概念
• host:裝置接入的域名,${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com:1883
• keepalive:心跳時間,30秒~1200秒,物聯網平台 1.5 倍心跳時間内沒有收到心跳會斷開裝置連接配接
• cleanSession:會話清除,0 或 1,設定為 1 時無法接收離線消息
3.3、通信機制
MQTT 是基于對 topic 的訂閱和釋出(sub/pub)來通信的。
• topic:物聯網平台提供 topic 定義功能,使用者可以自定義topic的字段,也可以使用平台預設定義好的topic。消息釋出者往topic發送消息,消息訂閱者從topic接收消息,兩者是異步的。物聯網平台的topic包含productKey和deviceName,是以可以做到裝置粒度的權限控制。裝置隻能往自己的topic釋出消息,也隻能訂閱自己的topic。topic有釋出權限和訂閱權限,這個是針對裝置視角的。
• qos:消息品質,物聯網平台支援 qos=0 和 qos=1 的消息品質。qos=0 意味着消息最多到達一次,可能丢失,裝置離線無法接收;qos=1 意味着消息至少到達一次,可能收到多次,裝置離線期間的消息在裝置上線後可以接收到。當裝置端接入時設定了cleanSession=1,那麼即使qos=1的消息,裝置重新上線後也是收不到的。
4、裝置接入及消息通信
本例将完成如下步驟,涉及的demo代碼包通過課程【前言】提供的連結下載下傳即可。開發環境的搭建不再贅述,是普通 maven 工程。
裝置端代碼:com.aliyun.alink.demo.devicesdk.chapter01.HelloWorld
服務端代碼:com.aliyun.alink.demo.openapi.chapter01.MessageDownlink
• 建立一個産品,名為:一個HelloWorld
• 建立一個裝置,名為:device_0
• 使用裝置端SDK讓裝置 device_0 上線
• 使用裝置端SDK讓裝置 device_0 發送消息給物聯網平台
• 使用 Open API 發送消息給裝置 device_0
4.1、建立産品
官網文檔:
https://help.aliyun.com/document_detail/73728.html4.2、建立裝置
https://help.aliyun.com/document_detail/73729.html4.3、裝置端 SDK 接入
啟動:com.aliyun.alink.demo.devicesdk.chapter01.HelloWorld,填寫裝置三元組資訊後直接啟動。
整體流程:初始化裝置資訊-->注冊下行監聽-->初始化SDK-->等待初始化完成-->訂閱topic。
注意:最後一步訂閱的topic是/${productKey}/${deviceName}/user/get,下面 Open API 消息下行要用到。
裝置狀态:
• 未激活:裝置剛建立,從來沒有連接配接過平台是未激活狀态;裝置連接配接到平台即可激活
• 線上:裝置和平台建立連接配接
• 離線:裝置從平台斷開連接配接
4.4、裝置端 SDK 消息上報
接上一步,裝置端調用publish接口上報消息,本例發送的topic=/${productKey}/${deviceName}/user/update,消息内容為 hello iot。
整體流程:初始化裝置資訊-->注冊下行監聽-->初始化SDK-->等待初始化完成-->釋出消息到topic
發送消息後檢視日志。
4.5、Open API 消息下行
啟動:com.aliyun.alink.demo.openapi.chapter01.MessageDownlink,填寫賬号資訊和裝置資訊後直接啟動。
整體流程:初始化賬号資訊-->初始化SDK-->發送消息給裝置。
本例發送的topic=/${productKey}/${deviceName}/user/get,消息内容為 hello world。
5、開源接入
針對不能夠使用物聯網平台提供的 SDK 來完成裝置接入和消息通信的使用者,物聯網平台也提供了開源 MQTT SDK 接入以及基于 http 請求的 Open API 調用的指導。
5.1、基于開源 paho 的裝置端接入
官網文檔
https://help.aliyun.com/document_detail/73742.html5.2、基于 http 請求的 Open API 調用
https://help.aliyun.com/document_detail/30560.html6、總結
本次課程對物聯網平台及部分基礎概念做了簡單的介紹,對裝置接入、裝置消息上報(綠色線路)、Open API 消息下行(藍色線路)的開發鍊路做了詳細的說明。實作了一個最基本的物聯網場景。
7、後續
• 裝置通過物聯網平台上報了消息,那麼消息如何展示到我的網頁上呢?
• 裝置隻能往自己的topic發送消息,那麼裝置A如何發送消息給裝置B呢?