接入阿里云微消息队列mqtt教程
<h1>一、简介</h1>
<p>阿里云mqtt业务有两个大项:物联网平台 与 微消息队列MQTT版 两款。
①物联网平台:
特点:针对物联网设备上云提供的一套完整的物联网平台,开发者只需要按照产品分类、协议在设备端实现相应的功能即可(应该是具备数据存储能力,未确认);
优点:集成了物联网设备上云相关的应用层功能。缺点:成本非常高、部分协议必须按平台规范开发。
使用流程:购买实例--创建产品--注册设备--设备按照协议开发--选择认证方式联网上云。
教程:<a href="https://help.aliyun.com/zh/iot/user-guide/overview-of-device-connection-1?spm=a2c4g.11186623.0.0.76773f42VbzfsC">https://help.aliyun.com/zh/iot/user-guide/overview-of-device-connection-1?spm=a2c4g.11186623.0.0.76773f42VbzfsC</a>
②微消息队列MQTT版:
特点:与EMQX功能一样,其实就是解决自建MQTT服务器问题,仅实现消息转发,数据存储、处理还需要自建服务在应用层解决。
优点:稳定、无需维护。缺点:价格比自建稍高,但没有运维能力的还是推荐使用;
使用流程:购买实例--创建group--创建主topic--通过接口注册设备并得到登录资料--研发设备--选择认证方式上云。
注册设备等接口文档:<a href="https://help.aliyun.com/zh/apsaramq-for-mqtt/developer-reference/api-onsmqtt-2020-04-20-registerdevicecredential">https://help.aliyun.com/zh/apsaramq-for-mqtt/developer-reference/api-onsmqtt-2020-04-20-registerdevicecredential</a>
可以在帮助页面,点击“调试”按钮,在线进行接口调试。</p>
<p>[========]</p>
<h1>二、微消息队列MQTT版使用流程</h1>
<p>微消息队列MQTT版,采用“一机一密”验证方式,平台使用流程:
1、购买实例,得到实例名称【post-cn-pe33kvzxxxx】。
2、创建GROUP,得到group名称【GID_xxxx】。
3、创建topic,得到主topic,主topic有数量限制,不能动态注册,但子topic没有限制,只要总订阅数不超即可。(注意:主topic需要写入设备!)
4、通过【注册设备等接口文档】帮助文档里的调试按钮,进入【微消息队列 MQTT】接口调试页面,选择【为某个设备注册访问凭证】接口。
5、输入要生成的clientid【由:group名称@@@自定义客户端名称,两部分组成】,自定义客户端名称一般是imei或客户端sn。
6、输入实例名称InstanceId【创建实例后就能看到】。
7、选择服务器地址,根据购买实际情况选择。
8、点击“发起调用”获取注册信息。
9、根据注册信息生成mqtt登录需要的username【由一机一密鉴权模式名称DeviceCredential、DeviceAccessKeyId、Instance ID三部分组成,以竖线(|)分隔】。
10、根据注册信息生成mqtt登录需要的password【将"ClientId"使用"DeviceAccessKeySecret"作为密钥进行HMAC-SHA1加密得到“十六进制数组”,然后再用Base64编码得到最终的Password字符串】
11、在实例详情页,查询“接入点”信息,选择公网接入点,例如:post-cn-pe33kvzjx06.mqtt.aliyuncs.com 。
12、准备好下面参数:mqtt服务器地址、端口、username、password、mqttid、订阅主题、发布主题、是否采用ssl,参加第五章进行写入,即可完成设备接入。</p>
<p>[========]</p>
<h1>三、微消息队列MQTT版,一机一密使用样例</h1>
<p>示例:
1、申请到的注册信息
{
"RequestId": "5DA70F5E-3C61-5813-9615-CD5A1BC5xxxx",
"DeviceCredential": {
"InstanceId": "post-cn-pe33kvzxxxx",
"DeviceAccessKeySecret": "DC.T8HFoLKqTK6pWz3EUrxxxx",
"CreateTime": 1706065493000,
"UpdateTime": 1706065493000,
"DeviceAccessKeyId": "DC.5XU1wVkUQvKPkAYIpwxxxx",
"ClientId": "GID_xmiot@@@device1"
}
}
2、mqtt登录用户名为 “DeviceCredential|DC.5XU1wVkUQvKPkAYIpwxxxx|post-cn-pe33kvxxxx”。
3、使用在线HMAC-SHA1加密工具,将实例名"GID_xmiot@@@device1"使用"DC.T8HFoLKqTK6pWz3EUrxxxx"作为密钥加密,得到“421D947ED78ED808B4EBBE139F8CB962438FE017”得到“十六进制数组”。
4、使用在线工具进行base64编码,注意字符编码是“HEX(16进制,不编码)”,点击编码后生成“Qh2UfteO2Ai0674Tn4y5YkOP4Bc=”即得到登录密码。
5、在线工具:
<a href="https://www.toolhelper.cn/DigestAlgorithm/HMAC_SHA">https://www.toolhelper.cn/DigestAlgorithm/HMAC_SHA</a>
<a href="https://www.toolhelper.cn/EncodeDecode/Base64EncodeDecode">https://www.toolhelper.cn/EncodeDecode/Base64EncodeDecode</a></p>
<p>[========]</p>
<h1>四、微消息队列MQTT版,控制设备实例</h1>
<p>【注意:下面示例以主topic为“xmiot”为例测试,其他主topic按需修改下面topic,子topic是固定不可修改】</p>
<p><strong>服务器向设备发送消息:</strong></p>
<pre><code>设备订阅的主题:
xmiot/xm/sh/request/mqtt/GID_xmiot@@@1510100110128956/2006/v2
消息内容:【锁控开,并自动进行ms级延时关闭】
{&quot;header&quot;:{&quot;timeStamp&quot;:&quot;&quot;},&quot;payload&quot;:{&quot;devices&quot;:[{&quot;action&quot;:&quot;command&quot;,&quot;params&quot;:{&quot;11&quot;:true}}]}}
消息内容:【锁控开,指定5000ms延时关闭】
{&quot;header&quot;:{&quot;timeStamp&quot;:&quot;&quot;},&quot;payload&quot;:{&quot;devices&quot;:[{&quot;action&quot;:&quot;command&quot;,&quot;params&quot;:{&quot;11&quot;:true,&quot;46&quot;:5000}}]}}
消息内容:【继电器开,并自动进行ms级延时关闭】
{&quot;header&quot;:{&quot;timeStamp&quot;:&quot;&quot;},&quot;payload&quot;:{&quot;devices&quot;:[{&quot;action&quot;:&quot;command&quot;,&quot;params&quot;:{&quot;24&quot;:true}}]}}
消息内容:【继电器开,指定5000ms延时关闭】
{&quot;header&quot;:{&quot;timeStamp&quot;:&quot;&quot;},&quot;payload&quot;:{&quot;devices&quot;:[{&quot;action&quot;:&quot;command&quot;,&quot;params&quot;:{&quot;24&quot;:true,&quot;46&quot;:5000}}]}}</code></pre>
<p><strong>设备向服务器发送消息:</strong></p>
<pre><code>服务器订阅主题:
xmiot/xm/sh/response/mqtt/GID_xmiot@@@1510100110128956/2006/v2
设备上报心跳同步消息内容:
{&quot;header&quot;:{&quot;timeStamp&quot;:&quot;1706147471&quot;},&quot;payload&quot;:{&quot;devices&quot;:[{&quot;nodeid&quot;:&quot;000&quot;,&quot;action&quot;:&quot;sync&quot;,&quot;serviceid&quot;:&quot;20060101
[2024-01-25 09:51:10.541] &quot;,&quot;params&quot;:{&quot;15&quot;:&quot;51&quot;,&quot;20&quot;:&quot;0&quot;,&quot;11&quot;:true,&quot;24&quot;:true}}]}}
设备上报锁状态变化消息内容:
{&quot;header&quot;:{&quot;timeStamp&quot;:&quot;1706148590&quot;,&quot;session&quot;:&quot;0&quot;},&quot;payload&quot;:{&quot;devices&quot;:[{&quot;nodeid&quot;:&quot;000&quot;,&quot;action&quot;:&quot;command&quot;,&quot;params&quot;:{&quot;24&quot;:true}}]}}</code></pre>
<p><strong>V2协议详情:</strong>
<a href="https://www.showdoc.com.cn/1014034257250686/8384078571000608">https://www.showdoc.com.cn/1014034257250686/8384078571000608</a></p>
<p><strong>注意:</strong>
json内容的符合必须是英文模式,否则json解析失败不会执行。</p>
<p>[========]</p>
<h1>五、4G-CAT1设备迁移到自建MQTT服务器流程</h1>
<p>定制设备不使用迅鸣云进行控制时,可将设备迁移到私有mqtt服务器,支持自建EMQX服务器、阿里云mqtt服务器。迁移后设备将无法再进行迅鸣云控制,且该操作不支持回滚,请慎重执行。具体迁移流程如下:
1、下载设备usb驱动,[下载链接](<a href="https://pan.baidu.com/s/14KvdSZXWe6NSpWMFq_xEMw">https://pan.baidu.com/s/14KvdSZXWe6NSpWMFq_xEMw</a> "下载链接"),提取码:uvcy。
2、下载设备调试工具,并进行下面配置(请向售后人员获取)。
3、发送指令切换到自建服务器模式【注意:只能单向切换,该指令会删除迅鸣账号信息及读写保护密码,因此不能再切换回迅鸣云服务器】。
<code>rrpc,clear_pwd</code>
4、发送指令配置阿里云配置的topic主头。
<code>+comm,{&quot;header&quot;:{&quot;timeStamp&quot;:&quot;&quot;},&quot;payload&quot;:{&quot;devices&quot;:[{&quot;action&quot;:&quot;writeconfig&quot;,&quot;params&quot;:{&quot;MASTER_TOPIC&quot;:&quot;xmiot&quot;}}]}}</code>
【注意:"xmiot"是在阿里云配置的主topic,根据实际修改】
5、配置阿里云MQTT服务器地址、端口号、用户名、密码、clientid、ssl模式【注意:发送、订阅topic必须置空,设备会自动拼接】。</p>