阿裡雲物聯網套件(iot)設備間通信(M2M)在web端的實踐

来源:https://www.cnblogs.com/xuejiangjun/archive/2018/01/18/8311418.html
-Advertisement-
Play Games

之前通過nodejs連接到阿裡雲物聯網mqtt,後又用瀏覽器連接,總結一下: 由於項目是SPA,使用webpack,關鍵代碼: 同樣使用mqtt.js之前先install: npm install --save mqtt 然後在main.js導入 import mqtt from 'mqtt' 將m ...


之前通過nodejs連接到阿裡雲物聯網mqtt,後又用瀏覽器連接,總結一下: 由於項目是SPA,使用webpack,關鍵代碼: 同樣使用mqtt.js之前先install:
 npm install --save mqtt

然後在main.js導入  

import mqtt from 'mqtt'

將mqtt掛載到Vue全局  

Object.defineProperty(Vue.prototype, 'mqtt', {value: mqtt});

這時就可以在全局使用mqtt了,於是在App.vue中使用mqtt,由於之前邏輯是nodejs進行連接,那麼做簽名和HTTPS認證都是在服務端進行的,現在挪到web端流程改為由後端進行簽名和HTTPS,前端請求後端介面返回必要欄位進行mqtt連接(這裡的必要欄位包括mqtt連接需要的clientId,username,password。username對應的返回值為iotId,password對應的返回值為iotToken),拿到後端HTTPS認證之後的返回值前端進行mqtt連接:(示例) 

var host = `ws://${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:443`; //這裡需要註意,在服務端是基於TCP的連接(var host = `mqtt://${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883`;),而在web端需要是基於websocket的連接,這個地方的坑踩了兩天o(╥﹏╥)o
var options = {
    clientId: clientId, //請求後端返回的clientId
    username: iotId, //後端HTTPS認證返回的iotId
    password: iotToken //後端HTTPS認證返回的iotToken
}
var client = this.mqtt.connect(host, options); //mqtt連接
client.on('connect', function(){
    //設備連接成功
    client.subscribe(topic); //進行主題的訂閱
})
client.on('error', function(){
    //連接出錯
})
client.on('close', function(){
    //連接斷開
    //client.end(); //結束連接
    //client = null; //將client對象置空
})
client.on('message', function(topic, message){
    //topic: 主題 message: 內容
    //收到消息這裡的message是buffer,使用toString()轉換為字元串
})
以上是mqtt在web的連接關鍵代碼示例,下麵說一下M2M(iot設備之間通訊): 1.在阿裡雲物聯網套件控制台設置轉發規則,在產品->消息通信配置一個模板 /產品key/${deviceName}/m2m 許可權為發佈和訂閱 2.規則引擎創建規則:select deviceName() fromDevice, toDevice, data, messageId() mesaageId from ‘/產品key/+/m2m’ 並增加一個 repub動作:轉發到 /產品key/${toDevice}/m2m , 啟動規則; 3.設備deviceA發送消息到 /產品key/deviceA/m2m ,格式如下:(這裡發消息到自身deviceName的topic)
{
    toDevice: 'deviceB', //這裡值為需要發送的設備deviceName
    data: data //這裡data為客戶端之間約定的數據,可以為任意對象,只有大家約定好就行
}

4.設備deviceB訂閱/產品key/deviceB/m2m,(這裡訂閱的主題為deviceB自身),將收到如下格式數據: 

{
        fromDevice: 'deviceA',
        toDevice: 'deviceB',
        messageId: '',
        data: data //deviceA發來的data
}
註意,規則轉發後的消息內容取決於規則引擎Select的內容 *詳見阿裡雲文檔。 那麼我們在前端的具體操作為:
//在連接時訂閱自身topic
client.subscribe(`/${productKey}/deviceA/m2m`);

在連接或者收到消息時,當前設備為deviceA:
var msgObj = {
    toDevice: 'deviceB',
    data: data //約定的data
}
client.publish(`/${productKey}/deviceA/m2m`);

以上為物聯網套件M2M的關鍵代碼。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、讀取通信錄 1)、9.0以前:AddressBook 2)、9.0以後:Contacts 2、調用通信錄UI(不弄) 1)、9.0以前:AddressBookUI 2)、9.0以後:ContactsUI 3、參考 0、寫在前面 1)、plist 需要設置 隱私許可權描述 NSContactsUsa ...
  • 我新建了一個web前端的新手交流群,包括基礎知識和剛入職的技術分享,人還不多,期待著每一個人的加入,希望可以得到你的認同哦~你的加入是我組織交流群的一大動力哦!~ web前端交流QQ群:314439765 ...
  • 經過這四期的講解,我們從Hello World應用入手,解釋了React最重要的概念JSX,以及兩種不同模式的應用構建方法。這一講我們著重對比傳統模式和新模式下的React項目構建,從而為初學者提供學習方向。 1. 傳統模式構建 一般在傳統模式下,我們構建前端項目很簡單。就是下載各種js文件,如JQ ...
  • 一、CSS和JS為什麼帶參數(形如.css?t=與.js?t=)怎樣獲取代碼 css和js帶參數(形如.css?t=與.js?t=) 使用參數有兩種可能: 第一、腳本並不存在,而是服務端動態生成的,因此帶了個版本號,以示區別。 即上面代碼對於文件來說 等價於 但瀏覽器會認為他是 該文件的某個版本!  ...
  • 相容現象: 在App的webview裡邊,我們有時候會在頁面里寫自定義頭部,會使用到fixed定位,我們想要的效果是,頁面無論怎麼滑動,這個自定義的頭部始終是固定在頂部的,但是在ios 11以上的版本裡邊,問題來了,當我們快速滑動頁面的時候,頁面滾動期間,這個fixed定位的頭部會隨著頁面的滑動滑上 ...
  • 因為看到百度裡面這個人回答比較生動,印象比較深刻,所以轉過來做個筆記 原文鏈接 https://zhidao.baidu.com/question/1047887004693001899.html 知乎也有更清晰解答 https://www.zhihu.com/question/23374078 1 ...
  • 在jQuery中,attr()函數和prop()函數都用於設置或獲取指定的屬性,它們的參數和用法也幾乎完全相同。但是,這兩個函數的用處卻並不相同。下麵我們來詳細介紹這兩個函數之間的區別。 1、操作對象不同 attr是單詞attribute的縮寫,prop是property的縮寫,它們的都表示”屬性” ...
  • 之前我們講過JavaScript之DOM對象獲取的兩篇文章,本文是該系列文章之三,點擊回顧上兩篇文章能更好地理解本文。《JavaScript之DOM對象的獲取(一)》;《JavaScript之DOM對象的獲取(二)》接下來,開始講述本文內容。在文檔中,我們還可以通過不同的現象和特征獲取DOM對象。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...