1. 程式人生 > >學習筆記--MQTT協議接入Onenet伺服器(C#)

學習筆記--MQTT協議接入Onenet伺服器(C#)

一.使用.NET 開源庫

我們使用MQTTnet建立我們的MQTT通訊, 版本一直更新請下載最新版

二.Fixed header型別

名字

流向

描述

CONNECT

1

C->S

客戶端請求與服務端建立連線

CONNACK

2

S->C

服務端確認連線建立

PUBLISH

3

CóS

釋出訊息

PUBACK

4

CóS

收到釋出訊息確認

SUBSCRIBE

8

C->S

訂閱請求

SUBACK

9

S->C

訂閱確認

UNSUBSCRIBE

10

C->S

取消訂閱

UNSUBACK

11

S->C

取消訂閱確認

三.CONNECT報文連線

欄位設定

訊息示例

client_id設定為平臺建立裝置時的裝置id

username設定為“專案ID”

password設定為“鑑權資訊(auth_info)”

client_id=”123”

username=”433223”

password=”註冊的鑑權資訊”

我們就要按照上表向平臺提交我們的CONNECT報文:

引數已經修改非我真確的ID和PASSWORD

var options = new MqttClientTcpOptions
                {
                    //ProductID: 1199   userID: 83248   API-KEY: 5aldNFKeIjkmpS4XweG9=LI=
                    //DeviceID: 259262  autn-info: pub12345
                    Server = "183.230.40.39",
                    Port = 6002,
                    ClientId = "259262",                    //deviceID 
                    UserName = "1199",                      //ProductId
                    Password = "5aldNFKeIjkmpS4XwmeG9=LI=",//API-KEY or auth-info
                    KeepAlivePeriod = ts2,
                    CleanSession = true
                    
                };

除此之外我們還想要客戶端和Onenet平臺保持長連線, 否則接上就斷開連線我們就無法實現我們的功能. 我們只需要設定KeepAlive引數就好了.

平臺文件中給出: 每個客戶端可自定義設定連線保持時間,最短120秒,最長65535秒。

KeepAlivePeriod = ts2,

ts2為一個TimeSpan物件, 大家自己設定就OK啦.

四.publish報文上傳資料

參考官方文件:

PS: 官方文件一小時 > 百度+維基+csdn+github+....好多天尷尬

資料型別1格式說明:

Byte 1

資料點型別值:1    //1: json格式1字串

0

0

0

0

0

0

0

1

Byte 2

//指示後面json字串長度

固定兩位元組長度高位位元組,值為0x00

Byte 3

固定兩位元組長度低位位元組,值為0x41

Byte 4

{

 “datastreams”:[// 可以同時傳遞多個數據流

       {

“id”:”temperature”,

“datapoints”:[

{

”at”:”2013-04-22 22:22:22”,//可選

”value”: 36.5//使用者自定義

}

]

},

{

“id”:”location”

“datapoints”:[…]

}, { … }

]

}

Byte n


資料型別7(type == 7)格式說明:(每次最多500個數據流的浮點數)

Byte 1

Bit0-5資料型別指示:type=7 //可離散浮點數資料流

Bit6:保留,置0

Bit7: 時間指示位,1,攜帶6位元組時間

1

0

0

0

0

1

1

1

Byte 2

年(後兩位),例如2016年,則該位元組為16

0

0

0

1

0

0

0

0

Byte 3

月(1-12)

Byte 4

日(1-31)

Byte 5

小時(0~23)

Byte 6

分鐘(0~59)

Byte7

秒(0~59)

Byte 8

//資料流名稱(取值範圍1-65535)

高位位元組,值為0x00

Byte 9

低位位元組,值為0x01

Byte10

//資料流個數(取值範圍1-500)

高位位元組,值為0x00

Byte11

低位位元組,值為0x01

Byte 10

4位元組float型別,低位在前,高位在後

Byte 11

Byte 12

Byte 13

...

Byte n

//資料流名稱(取值範圍1-65535)

高位位元組,值為0x24

Byte n+1

低位位元組,值為0x37

Byte n+2

//資料流個數(取值範圍1-500)

高位位元組,值為0x01

Byte n+3

低位位元組,值為0x00

Byte n+2

4位元組float型別,低位在前,高位在後

Byte n+4

Byte n+5

Byte n+6


將資料釋出到$dp系統Topic上

資料傳送格式

e.g.

{
   "datastreams":[
        {
        "id":"Tempreture",
        "datapoints":[
                            "value":36
                            ]
                    }
   ]
}

執行效果:(傳送結束會自動斷開與伺服器的連線)

五.訂閱單裝置資料流

訂閱方式: 可以通過訂閱 /device_id/資料流名 的方式,及時獲取到某裝置最新的資料點資訊

PS: 注意反斜槓的方向

執行截圖:


六.執行結果

TIPS: 如果同時登陸兩個裝置是會被擠下線的哦.

登陸效果:

訂閱:

釋出:


相關推薦

學習筆記--MQTT協議接入Onenet伺服器(C#)

一.使用.NET 開源庫我們使用MQTTnet建立我們的MQTT通訊, 版本一直更新請下載最新版二.Fixed header型別名字 值 流向 描述 CONNECT 1 C->S 客戶端請求與服務端建立連線 CONNACK 2 S->C 服務端確

MQTT學習筆記——MQTT協議體驗 Mosquitto安裝和使用

0 前言    MQTT是IBM開發的一個即時通訊協議。MQTT是面向M2M和物聯網的連線協議,採用輕量級釋出和訂閱訊息傳輸機制。Mosquitto是一款實現了 MQTT v3.1 協議的開源訊息代理軟體,提供輕量級的,支援釋出/訂閱的的訊息推送模式,使裝置對裝置之間的短訊息

OneNET MQTT協議的簡單使用以及NBIOT晶片MT2625使用MQTT協議接入OneNET

一、OneNET MQTT協議的簡單使用 1、OneNET介紹 我們直接從OneNET的官網截圖: 2、建立產品和新增裝置 (1)在建立產品前,首先得有一個OneNET賬號,到OneNET註冊一個就行,註冊步驟很簡單,相信看到這篇文章的讀者都已經有了One

ROS學習筆記7-編寫簡單的伺服器和客戶端 (C++)

1 前提在/catkin_ws/src/beginner_tutorials/srv 目錄下建立好AddTwoInts.srv 1 int64 a 2 int64 b 3 --- 4 int64 sum 2 編寫server節點[~/catkin_ws/src/

Halcon學習筆記(2) VS2010 + Halcon12 C#鏈接相機

operator debug ets generic code locate != 目錄 empty 1.打開Halcon, 使用圖像采集助手獲取相機實時圖像:      1.1 獲取實時圖像:          1.2 插入采集實時圖像的Halcon代碼,並導出:    

學習筆記:設計模式之抽象工廠(C#)

sta 實體 mys actor div ted rac int c# 1.創建抽象工廠類 public abstract class AbstractFactory { public abstract Connect CreatConne

ReactiveX 學習筆記(24)使用 RxCpp + C++ REST SDK 調用 REST API

x86-64 from space ces 測試 git clone delete let ann JSON : Placeholder JSON : Placeholder (https://jsonplaceholder.typicode.com/) 是一個用於測試的

學習MQTT協議及原理

1 MQTT協議實現方式: 實現MQTT協議需要客戶端和伺服器端通訊完成,在通訊過程中,MQTT協議中有三種身份:釋出者(Publish)、代理(Broker)(伺服器)、訂閱者(Subscribe)。其中,訊息的釋出者和訂閱者都是客戶端,訊息代理是伺服器,訊息釋出者可以同時是訂閱者。

資料結構學習筆記------紅黑樹(附c++程式碼)

1、紅黑樹簡介 紅黑樹是二叉查詢樹的一種,其增刪改查的統計效能要優於AVL樹,查詢、插入、刪除演算法的複雜度都為O(log(n))。先附上紅黑樹這種資料結構的性質: 性質1、節點是紅色或黑色。 性質2、根節點是黑色。 性質3、每個葉節點(是指的空節點,nil節點)是黑色的。 性質4、

web前端學習(二)html學習筆記部分(8)--伺服器推送事件3

1.2.22  html5伺服器推送事件 1.2.22.1  html5伺服器推送事件介紹   伺服器推送事件(Server-sent Events)是HTML5規範中的一個組成部分,可以用來從伺服器端實時推送資料到瀏覽器端。   傳統的伺服器端推送資料技術:Websocket:We

MongoDB學習筆記(三)--MongoDB的C#驅動的基本使用

官方C#驅動:https://github.com/mongodb/mongo-csharp-driver/releases 在使用C#驅動時,要在專案中新增”MongoDB.Bson.dll”和”MongoDB.Driver.dll”的引用。同時要在程式碼中

資料結構學習筆記-線性表順序儲存(C語言實現)

寫了一天,終於將線性表的順序儲存實現了,順便惡補了一下指標內容。順序儲存,適合做查詢,鏈式儲存適合做增刪。新增方法主要就是將線性表從後往前遍歷,依次往後挪一位,直到空出想要插入的位置,刪除方法就是將線性表從要刪除的地方往後遍歷,依次往前挪一位。#include <std

Unity學習筆記007.Unity接入原生Android百度AR地圖

大概操作步驟按筆記006執行。 1.背景 環境: OS:Windows10 Android Studio3.2 Unity 2018.1.2f1 思路 Unity端:主調方,UI Android端:底層介面,打包aar方式 2.步驟 2.1 Android S

《組合語言程式設計》學習筆記(3)三、C與組合語言

3.1 80x86彙編與C語言-1 3.1.1 80x86彙編與C語言-1 - 彙編程式設計師眼中的系統結構 彙編程式設計師眼中的系統結構 如何從C程式碼生成彙編程式碼 gcc -O2 -S code.c -m32 -fno-omit-frame

TCP/IP詳解學習筆記——IP協議

一 概述 IP協議是TCP/IP協議簇中最核心的協議,所有的TCP、UDP、ICMP以及IGMP資料都以IP資料報格式傳輸。IP協議提供不可靠、無連線的資料傳輸服務。不可靠的意思是它不能保證IP資料報能成功到達目的地。IP僅僅提供最好的傳輸服務。意思就是,我盡我所能傳輸資料

學習筆記:windows下,用c語言來建立執行緒

#include <stdio.h>#include <windows.h> typedef void * HANDLE;#define SEMAPHORE HANDLE#define THREADHANDLE HANDLE#define THREAD

iOS學習筆記56(Runtime)-Objective-C Runtime 執行時之三:方法與訊息

前面我們討論了Runtime中對類和物件的處理,及對成員變數與屬性的處理。這一章,我們就要開始討論Runtime中最有意思的一部分:訊息處理機制。我們將詳細討論訊息的傳送及訊息的轉發。不過在討論訊息之前,我們先來了解一下與方法相關的一些內容。 基礎資料型別 SEL

h5學習筆記:vue 路由部署伺服器子目錄問題

《Egret 引擎入門》 這兩天一直在查詢vue經過打包後部署伺服器一直顯示不出來的問題。前端沒有報錯,資源載入也很正常。找了很多回答,最後定位在vue的訪問路由出了問題。 出現的現象 前端vuejs+vue-router+webpack的組合,打包是由w

BT協議學習筆記3--協議擴充套件

前段時間參考我在上一篇部落格裡面的內容,將BT協議的主要內容看了一看。 主要有: 一、Bencode and Metadata File Structure 二、Tracker HTTP Protocol/THP 三、Peer Wire Protocol/PWP 四、Alg

Java6學習筆記64——UDP客戶端/伺服器

客戶端: import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import