華為云計算 云知識 基于華為云IoT在線開發(fā)MQTT協(xié)議的智慧路燈案例
基于華為云IoT在線開發(fā)MQTT協(xié)議的智慧路燈案例

場景說明

本文以“智慧路燈”為示例,通過MQTT.fx的設(shè)備模擬器替代真實的設(shè)備,帶您快速體驗設(shè)備上報數(shù)據(jù)到華為云 物聯(lián)網(wǎng)平臺 和遠程下發(fā)控制命令到設(shè)備的全過程。

假設(shè):路燈設(shè)備上報一條光照強度(luminance)消息;支持遠程控制路燈開關(guān)狀態(tài)的命令(switch),上報數(shù)據(jù)的格式為JSON格式。

前提條件

業(yè)務(wù)流程

基于MQTT.fx體驗平臺功能是指以在MQTT.fx模擬器為例,介紹數(shù)據(jù)上報、命令下發(fā)等業(yè)務(wù)。

  1. 創(chuàng)建產(chǎn)品。創(chuàng)建一個MQTT協(xié)議的產(chǎn)品。
  2. 開發(fā)產(chǎn)品模型。通過定義產(chǎn)品模型,在物聯(lián)網(wǎng)平臺構(gòu)建一款路燈設(shè)備,支持上報光照強度、下發(fā)路燈開關(guān)狀態(tài)命令。
  3. 注冊設(shè)備。注冊一個MQTT協(xié)議的設(shè)備,體驗數(shù)據(jù)上報業(yè)務(wù)。
  4. 連接鑒權(quán)。使用MQTT.fx激活在物聯(lián)網(wǎng)平臺上注冊的設(shè)備。
  5. 數(shù)據(jù)上報。使用MQTT.fx向物聯(lián)網(wǎng)平臺上報數(shù)據(jù)。
  6. 命令下發(fā)。在管理控制臺下發(fā)命令,遠程控制設(shè)備。

 

創(chuàng)建產(chǎn)品

  1. 登錄管理控制臺,單擊左側(cè)導(dǎo)航欄“產(chǎn)品”,單擊頁面右上角的“創(chuàng)建產(chǎn)品”。
  2. 根據(jù)頁面提示填寫參數(shù),然后單擊“確定”。

    基本信息

    所屬資源空間

    平臺自動將新創(chuàng)建的產(chǎn)品歸屬在默認資源空間下。如需歸屬在其他資源空間下,下拉選擇所屬的資源空間。如無對應(yīng)的資源空間,請先創(chuàng)建資源空間。

    產(chǎn)品名稱

    自定義。支持字母、數(shù)字、下劃線(_)、連字符(-)的字符組合。

    協(xié)議類型

    選擇MQTT。

    數(shù)據(jù)格式

    選擇JSON。

    廠商名稱

    自定義。支持中英文字符、數(shù)字、下劃線(_)、連字符(-)的字符組合。

    所屬行業(yè)

    請根據(jù)產(chǎn)品模型的所屬行業(yè)填寫。

    設(shè)備類型

    使用平臺預(yù)置的產(chǎn)品模型,會自動關(guān)聯(lián)設(shè)備類型,不需要再輸入設(shè)備類型。

    高級配置

    產(chǎn)品ID

    定制ProductID,用于唯一標識一個產(chǎn)品。如果攜帶此參數(shù),平臺將產(chǎn)品ID設(shè)置為該參數(shù)值;如果不攜帶此參數(shù),產(chǎn)品ID在物聯(lián)網(wǎng)平臺創(chuàng)建產(chǎn)品后由平臺分配獲得。

    產(chǎn)品描述

    產(chǎn)品描述。請根據(jù)實際情況填寫。

 

開發(fā)產(chǎn)品模型

  1. 找到創(chuàng)建產(chǎn)品章節(jié)新增的產(chǎn)品,單擊產(chǎn)品進入產(chǎn)品界面。
  2. 在產(chǎn)品詳情“模型定義”頁面,單擊“自定義模型”,配置產(chǎn)品的服務(wù)。
  3. 新增服務(wù)類型“BasicData”
    1. 在“添加服務(wù)”頁面,填寫“服務(wù)ID”、“服務(wù)類型”“服務(wù)描述”,單擊“確定”。
      • “服務(wù)ID”:BasicData
      • “服務(wù)類型”:建議和服務(wù)ID保持一致
      • “服務(wù)描述”:上報路燈數(shù)據(jù)
    2. 在“BasicData”服務(wù)列表右側(cè)區(qū)域,單擊“添加屬性”,填寫相關(guān)信息后,單擊“確定”。
      • “屬性名稱”:luminance
      • “屬性描述”:光照強度
      • “數(shù)據(jù)類型”:int(整型)
      • “訪問權(quán)限”:可讀、可寫
      • “取值范圍”:0~65535
      • “步長”:0
      • “單位”:不填寫
  4. 新增服務(wù)類型“LightControl”。
    1. 在“模型定義”下單擊“添加服務(wù)”,填寫“服務(wù)ID”、“服務(wù)類型”“服務(wù)描述”,單擊“確定”。
      • “服務(wù)ID”:LightControl
      • “服務(wù)類型”:建議和服務(wù)ID保持一致
      • “服務(wù)描述”:路燈開關(guān)控制
    2. 在“LightControl”的下拉菜單下單擊“添加命令”,輸入命令名稱“Switch”。
    3. 在“新增命令”頁面,單擊“新增輸入?yún)?shù)”,填寫相關(guān)信息后,單擊“確定”。

圖1 新增參數(shù)

注冊設(shè)備

  1. 在管理控制臺頁面,選擇左側(cè)導(dǎo)航欄“設(shè)備 > 所有設(shè)備”,單擊頁面右上角的“注冊設(shè)備”。
  2. 根據(jù)頁面提示信息填寫參數(shù),然后單擊“確定”。

    參數(shù)名稱

    說明

    所屬資源空間

    確保和步驟1創(chuàng)建的產(chǎn)品歸屬在同一個資源空間。

    所屬產(chǎn)品

    選擇步驟2創(chuàng)建的產(chǎn)品。

    設(shè)備標識碼

    即nodeID,設(shè)備唯一物理標識。可自定義,由英文字母和數(shù)字組成。

    設(shè)備名稱

    即device_name,可自定義,如streetlight。

    設(shè)備認證類型

    選擇“密鑰”。

    密鑰

    此處不填寫,物聯(lián)網(wǎng)平臺會自動生成。

  3. 成功注冊設(shè)備后,平臺會自動生成設(shè)備ID和密鑰,請妥善保管好設(shè)備ID(deviceId)和密鑰(deviceSecret),用于設(shè)備接入。

連接鑒權(quán)

使用MQTT.fx工具激活在物聯(lián)網(wǎng)平臺上注冊的設(shè)備。

  1. 下載MQTT.fx(默認是64位操作系統(tǒng),如果是32位操作系統(tǒng),單擊此處下載MQTT.fx),安裝MQTT.fx工具。
  2. 訪問這里,填寫注冊設(shè)備后生成的設(shè)備ID(DeviceId)和密鑰(DeviceSecret),生成連接信息(ClientId、Username、Password)。

    參數(shù)

    必選/可選

    類型

    參數(shù)描述

    ClientId

    必選

    String(256)

    一機一密的設(shè)備clientId由4個部分組成:設(shè)備ID、設(shè)備身份標識類型、密碼簽名類型、時間戳,通過下劃線“_”分隔。

    • 設(shè)備ID:指設(shè)備在平臺成功注冊后生成的唯一設(shè)備標識,通常由設(shè)備的產(chǎn)品ID和設(shè)備的NodeId通過分隔符“_”拼裝而來。
    • 設(shè)備身份標識類型:固定值為0,表示設(shè)備ID。
    • 密碼簽名類型:長度1字節(jié),當前支持2種類型:
      • “0”代表HMACSHA256不校驗時間戳。
      • “1”代表HMACSHA256校驗時間戳。
    • 時間戳:為設(shè)備連接平臺時的UTC時間,格式為YYYYMMDDHH,如UTC 時間2018/7/24 17:56:20 則應(yīng)表示為2018072417。

    Username

    必選

    String(256)

    設(shè)備ID。

    Password

    必選

    String(256)

    加密后的設(shè)備密鑰。Password的值為使用“HMACSHA256”算法以時間戳為密鑰,對secret進行加密后的值。

    secret為注冊設(shè)備時平臺返回的secret。

    使用生成工具生成的clientId格式,默認不校驗時間戳:設(shè)備ID_0_0_時間戳。
    • 當采用“HMACSHA256”校驗時間戳方式時,會先校驗消息時間戳與平臺時間是否一致,再判斷密碼是否正確。
    • 當采用“HMACSHA256”不校驗時間戳方式時,鑒權(quán)消息也必須帶時間戳,但不檢驗時間是否準確,僅判斷密碼是否正確。
    connect消息鑒權(quán)失敗時,平臺會返回錯誤,并自動斷開MQTT鏈路。
  3. 設(shè)備通過MQTT協(xié)議的connect消息進行鑒權(quán),對于構(gòu)造clientId的各個部分信息都必須包括進去,平臺收到connect消息時,會判斷設(shè)備的鑒權(quán)類型和密碼摘要算法。
  4. 打開MQTT.fx軟件,單擊設(shè)置圖標。

  1. 參考下表配置鑒權(quán)參數(shù),然后單擊“Apply”。

    參數(shù)名稱

    說明

    Broker Address

    填寫從設(shè)備接入服務(wù)控制臺獲取的設(shè)備對接地址,此地址為域名信息。不能通過域名接入的設(shè)備,通過在cmd命令框中執(zhí)行“ping 域名”獲取IP地址,用IP地址接入平臺。由于IP地址不固定,您需要將IP地址做成可配置項。

    Broker Port

    默認為1883。

    Cliend ID

    設(shè)備cliendID,請參考2中獲取。

    User Name

    即設(shè)備ID,請參考2中獲取。

    Password

    加密后的設(shè)備密鑰,請參考2中獲取。

  2. 單擊“Connect”,設(shè)備鑒權(quán)成功后,在物聯(lián)網(wǎng)平臺可以看到設(shè)備處于在線狀態(tài).

上報數(shù)據(jù)

使用MQTT.fx工具向物聯(lián)網(wǎng)平臺上報數(shù)據(jù)。

設(shè)備若通過MQTT通道上報數(shù)據(jù),需要發(fā)給指定的topic,上報消息的topic格式為:$oc/devices/{device_id}/sys/properties/report,其中deviceId的值,對一機一密設(shè)備,使用deviceId接入時填寫為設(shè)備注冊成功后返回的deviceId值。

  1. 填寫接口地址,此處以$oc/devices/{device_id}/sys/properties/report為例,如$oc/devices/5e4e2e92ac-164aefa8fouquan1/sys/properties/report。
  2. 在工具中間的空白處填寫上報的數(shù)據(jù)。請求參數(shù)ServiceProperty定義表:請求示例{ "services": [{ "service_id": "BasicData", "properties": { "luminance": 30 } } ] }

    字段名

    必選/可選

    類型

    參數(shù)描述

    service_id

    必選

    String

    設(shè)備服務(wù)的ID。

    properties

    必選

    Object

    設(shè)備服務(wù)的屬性列表,具體字段在設(shè)備關(guān)聯(lián)的產(chǎn)品模型中定義。

    eventTime

    可選

    String

    設(shè)備采集數(shù)據(jù)UTC時間(格式:yyyyMMddTHHmmssZ),如:20161219T114920Z。

    設(shè)備上報數(shù)據(jù)不帶該參數(shù)或參數(shù)格式錯誤時,則數(shù)據(jù)上報時間以平臺時間為準。

    字段名

    必選/可選

    類型

    參數(shù)描述

    services

    必選

    List

    設(shè)備服務(wù)數(shù)據(jù)列表(具體結(jié)構(gòu)參考下表ServiceProperty定義表)

  3. 單擊“Publish”,可以在物聯(lián)網(wǎng)平臺上查看設(shè)備是否成功上報數(shù)據(jù)。

命令下發(fā)

在管理控制臺下發(fā)命令,遠程控制設(shè)備。

  1. 選擇“設(shè)備 > 所有設(shè)備”,找到注冊設(shè)備章節(jié)新建的設(shè)備,單擊“查看”進入設(shè)備詳情頁面。
  2. 單擊“命令”頁簽,下發(fā)同步命令。說明:MQTT協(xié)議設(shè)備僅支持同步命令下發(fā),NB-IoT設(shè)備僅支持異步命令下發(fā)。
  3. 您可以在MQTT.fx模擬器端查看到下發(fā)的命令。說明:
    • 由于MQTT.fx模擬器不支持查看下發(fā)的命令參數(shù)。具體下發(fā)內(nèi)容,請參考平臺命令下發(fā)。
    • 界面提示命令下發(fā)失敗,是因為下發(fā)的同步命令需要設(shè)備側(cè)及時回響應(yīng),響應(yīng)內(nèi)容請參考平臺命令下發(fā)

進階體驗

按照本頁面的指導(dǎo),使用MQTT.fx模擬MQTT設(shè)備接入物聯(lián)網(wǎng)平臺后,您應(yīng)該已經(jīng)基本了解MQTT設(shè)備調(diào)用物聯(lián)網(wǎng)平臺開放的接口與平臺交互。

若您想要進一步體驗設(shè)備接入服務(wù),可參考開發(fā)指南開發(fā)真實應(yīng)用和真實設(shè)備,并接入物聯(lián)網(wǎng)平臺,體驗更多功能。