MQTT链接阿里云

MQTT链接阿里云

1.创建产品及设备,

image-20210319144840789

产生三元组

三元组

{ "ProductKey": 标示产品
  "DeviceName": 标识设备
  "DeviceSecret":密钥
  
  "ProductKey": "a1pC3rpU4xF",
  "DeviceName": "Lock_1",
  "DeviceSecret": "cba236e94094a0399060a9fe355bef88"
}

访问远程主机的域名格式

   ${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com:1883


即 IP地址

​    a1pC3rpU4xF.iot-as-mqtt.cn-shanghai.aliyuncs.com

mqttClientId 格式:

clientId(DeviceName)+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"
		securemode=3,TCP直连
Lock_1|securemode=3,signmethod=hmacsha1|

mqttUsername 格式: deviceName(DeviceName)+"&"+productKey

	Lock_1&a1pC3rpU4xF

mqttPassword 格式: sign_hmac(deviceSecret,content)

哈希算法(A,B)
A  要加密的字符串  content
	clientId*deviceName*productKey#
	*->DeviceName
	#->ProductKey
	  
	  clientIdLock_1deviceNameLock_1productKeya1pC3rpU4xF
	  
B  密钥  DeviceSecret
     
cba236e94094a0399060a9fe355bef88
bc5f3a9e47c628ed91c74054bc33a1bd9ff25a7c
/Topic 报文/

image-20210319152735838

通配符 # +

image-20210319152106212

Topic 列表

image-20210319153416292

属性上报(客户机向服务器发报文)

   /sys/ProductKey/${deviceName}/thing/event/property/post
	发布
   设备属性上报
	/sys/a1pC2rpU4xF/Lock_1/thing/event/property/post

属性上报(服务器响应客户机)

 /sys/ProductKey/${deviceName}/thing/event/property/post_reply
	订阅
	云端响应属性上报
	/sys/a1pC2rpU4xF/Lock_1/thing/event/property/post_reply

属性设置(服务器下发报文)

  /sys/ProductKey/${deviceName}/thing/service/property/set
 	订阅
	设备属性设置
	/sys/a1pC2rpU4xF/Lock_1/thing/service/property/set

2.MQTT格式

image-20210321091058682

//固定报头(报文类型+标志位+剩余长度)
1字节 1字节

报文类型+标志位
  CONNECT 第0字节:0X10(CONNECT) ->  0001 0000    
剩余长度(最多127个字节)
	表示当前报文剩余部分的字节数,包括可变报头和负载的数据。
    剩余长度不包括用于编码剩余长度字段本身的字节

//可变报头(报文标识符MSB+报文标识符LSB+协议名(Protocol Name)+协议级别(Protocol Level)+连接标志(Connect Flags)+保持连接(Keep Alive))
1字节 1字节 6字节 1字节 1字节 2字节
CONNECT(不需要报文标识符)从协议名开始
//有效载荷(客户端标识符 (ClientId),遗嘱主题,遗嘱消息,用户名,密码 )

CONNACK(需要)

MQTT 数据报类型

image-20210321091922064

image-20210321092010613

/CONNECT:连接报文**/

固定报头:

1byte:	0x10
	2byte:	??

可变报头:

image-20210321093627513

	1byte:	0x00  ->0
	2byte:	0x04  ->4
	3byte:	0x4D  ->M(81)
	4byte:	0x51  ->Q(81)
	5byte:	0x54  ->T(84)
	6byte:	0x54  ->T(84)
	7byte:	0x04  ->4
	8byte:	0xC2  ->(1100 0010)     连接标志:(密码标志 Password Flag+用户名标志 User Name Flag+清理会话 Clean Session)
	9byte:	0x00  ->0
	10byte:	0x3C  ->60(保持连接(Keep Alive)共60秒)

有效载荷:客户端标识符 (ClientId)+用户名+密码

image-20210321093916947

ClientID_Len+ClientID+UserName_Len+UserName+PassWord_Len+PassWord
   39(0X27)		17(0X11)	       40(0X28)		

ClientID:temp1|securemode=3,signmethod=hmacsha1|

74 65 6D 70 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 

UserName:temp1&a13GwFISwtD

74 65 6D 70 31 26 61 31 33 47 77 46 49 53 77 74 44

PassWord:00606113052b472fd762acd90dd2268c61450673

30 30 36 30 36 31 31 33 30 35 32 62 34 37 32 66 64 37 36 32 61 63 64 39 30 64 64 32 32 36 38 63 36 31 34 35 30 36 37 33 

   27 74 65 6D 70 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 
   11 74 65 6D 70 31 26 61 31 33 47 77 46 49 53 77 74 44
   28 30 30 36 30 36 31 31 33 30 35 32 62 34 37 32 66 64 37 36 32 61 63 64 39 30 64 64 32 32 36 38 63 36 31 34 35 30 36 37 33 

CONNECT(完整)

 10 ?? 00 04 4D 51 54 54 04 C2 00 3C 27 74 65 6D 70 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 
  11 74 65 6D 70 31 26 61 31 33 47 77 46 49 53 77 74 44
  28 30 30 36 30 36 31 31 33 30 35 32 62 34 37 32 66 64 37 36 32 61 63 64 39 30 64 64 32 32 36 38 63 36 31 34 35 30 36 37 33 
/****CONNACK-确认连接 ******/

注意: CONNACK 报文没有有效负荷。 image-20210321094451788

image-20210321094827353

若正常链接 收到的 CONNACK 报文为:0x20,0x02,0x00,0x00。

/****SUBSCRIBE 订阅主题 ******/

image-20210321095341038

image-20210321095643610

/****SUBACK-订阅确认 ******/

image-20210321095929985

允许的返回码值:
0x00 - 最大 QoS 0
0x01 - 成功 – 最大 QoS 1
0x02 - 成功 – 最大 QoS 2

0x80 - Failure 失败
0x00, 0x01, 0x02, 0x80 之外的 SUBACK 返回码是保留的,不能使用。

/****UNSUBSCRIBE-取消订阅 ******/

image-20210321100340504

/****UNSUBACK-取消订阅确定 ******/

UNSUBACK 报文没有有效负荷。

image-20210321100530974

/****PUBLISH-发布消息 ******/

//固定报头(MQTT数据包类型+重发标志+服务质量等级+保留标志)

​ 4位 1位 2位 1位

image-20210321101231903

目前流行的共享单车智能锁,智能锁可以定时使用 QoS level 0 质量消息请求服务器,发送单车的
当前位置,如果服务器没收到也没关系,反正过一段时间又会再发送一次。之后用户可以通过 App 查询周
围单车位置,找到单车后需要进行解锁,这时候可以使用 QoS level 1 质量消息,手机 App 不断的发送解锁消息给单车锁,确保有一次消息能达到以解锁单车。最后用户用完单车后,需要提交付款表单,可以使用 QoS
level 2 质量消息,这样确保只传递一次数据,否则用户就会多付钱了。  

//可变报头(主题名+报文标识符)

image-20210321102259689

//有效负荷 Josn格式

//整合

image-20210321102518831

image-20210321102609558

/****PUBACK-发布确认 ******/

发布信息用的为Qos0 未用到

/****PINGREQ-心跳请求 ******/

未用到

/****PINGRESP-心跳响应 ******/

未用到

/****DISCONNECT-断开连接 ******/

未用到

注意: DISCONNECT 报文没有可变报头和有效负荷

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值