• 欢迎大家分享资料!前往留言板评论即可!

教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)

合宙 模组资料网 2年前 (2021-05-15) 363次浏览 0个评论 扫描二维码
文章目录[隐藏]

教你用Air720 模块通过AT指令以MQTTS方式连接华为云(上篇)

生成MQTTS连接参数

上篇创建了真实测试设备,需要记录下设备ID和密匙,用于生成连接参数。
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)
1.设备ID
9e352064-f339-45e3-842d-ab7b27616414
2.密匙
4aa2c87b6696ee37ce83

点击确定后进入在线调测页面
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)

点击左侧菜单设备管理,可以看到设备列表中,刚创建的设备状态是离线。一会儿使用Air720连接成功后,就变成在线状态了。
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)
点击左侧对接信息,可得到MQTT的连接ip和好、端口号
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)

MQTT连接参数

根据文档MQTT CONNECT连接鉴权,摘要如下:
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)

cliendID=9e352064-f339-45e3-842d-ab7b27616414_0_0_2019071713
Username=9e352064-f339-45e3-842d-ab7b27616414
Password=162298e5d1aee9a239ea5b5fd711c31393d1a4b05e7cea5eba912e6c26b3305e

上面的Password的值为使用“HMACSHA256”算法以时间戳为秘钥,对secret进行加密后的值。secret为注册设备时平台返回的secret,也就是上面创建设备时生成密匙。

这里给出一段使用Python生成上述参数的代码

import time
import datetime
import pytz
import hashlib
import hmac

def HMACSHA256(message,key):
    return hmac.new(key.encode('utf-8'),message.encode('utf-8'),hashlib.sha256).hexdigest()

# 本地时间转换为UTC
def local_to_utc(local_ts, utc_format='%Y%m%d%H'):
    local_tz = pytz.timezone('Asia/Chongqing')   
    local_dt = local_tz.localize(local_ts)
    utc_dt = local_dt.astimezone(pytz.utc)
    return utc_dt.strftime(utc_format)

def get_utc_timstamp():
    local_tz=pytz.timezone('Asia/Shanghai')
    local_dt=local_tz.localize(datetime.datetime.now())
    utc_dt=local_dt.astimezone(pytz.utc)
    return utc_dt.strftime('%Y%m%dT%H%M%SZ')

if __name__ == '__main__':
    deviceId='9e352064-f339-45e3-842d-ab7b27616414'
    secret = '4aa2c87b6696ee37ce83'
    utctimestamp = local_to_utc(datetime.datetime.now())
    clientId = '_'.join([deviceId , '0' , '0' , utctimestamp])
    print(clientId)
    password = HMACSHA256(secret , utctimestamp)
    print(password)

使用上述参数和地址及端口号,已经CA证书就可以成功连接到华为云了。
这时回到设备管理页面,可以看到设备状态已经变为在线。
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)

Topic订阅、发布

订阅和发布,参考文档说明
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)
根据上面描述,
设备如果要从平台获取消息和数据,需要在登录成功后发起mqtt消息订阅topic
设备订阅:订阅消息topic格式为:“/huawei/v1/devices/9e352064-f339-45e3-842d-ab7b27616414/command/json”
设备如果要通过MQTT通道上报数据,需要发给指定的topic
上报消息的topic格式为:“/huawei/v1/devices/9e352064-f339-45e3-842d-ab7b27616414/data/json”

订阅上述topic后,进入设备调试页面
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)
从应用模拟界面发toggle字段命令”ON”,点击发送
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)
从sscom的Air720串口接收可以看到,模块收到华为云平台下发的JSON格式的命令。toggle的值是“ON”
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)

Air720数据上报

教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)

根据这个说明,结合设备的Profile订阅,数据上报的格式为
MQTT Topic: /huawei/v1/devices/9e352064-f339-45e3-842d-ab7b27616414/data/json
Air720发送的payload:
{
“msgType”: “deviceReq”,
“data”: [
{
“serviceId”: “ServiceWin”,
“serviceData”: {
“Status”: 0
},
“eventTime”: ” 20170915T121603Z”
}
]
}

设备发送后,在应用模拟端收到status数据0
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)

通过上述内容,实现了一个MQTTS的连接,订阅,上报的过程,后续就可以根据业务需求具体实现一个物联网应用了。其他华为云的功能不再赘述,自己挖掘一下吧。

当然Air720模块还有其他很强大的功能,特别是支持Lua,强大的二次开发能力,实时技术支持,软件开源包括底层C代码,和Lua代码,值得我们去细细研究。

教你用Air720 模块通过AT指令以MQTTS方式连接华为云(上篇)


喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址