使用 MQTT 协议与平台对接可能出现的问题

网友投稿 1950 2022-05-30

使用 mqtt 协议与平台对接可能出现的问题

其实只需要简单理解mqtt的消息订阅发布机制,就能用mqtt的方式和平台对接

agentLite 证书校验失败,请检查证书是否配置正确,证书一般是放置在demo中的conf目录下的rootcert.pem 文件,如果该目录下已经存在证书文件,请点击下载更换证书

参考:https://github.com/LiteOS/LiteOS/blob/develop/demos/agenttiny_mqtt/agent_tiny_demo.c

不可以,平台目前只支持MQTTS接入,原生接口参考:https://support.huaweicloud.com/api-IoT/iot_06_3002.html

订阅设备上报数据的topic(https://support.huaweicloud.com/api-IoT/iot_06_3010.html),往平台发送数据

订阅设备接收命令的topic(https://support.huaweicloud.com/api-IoT/iot_06_3011.html),接收平台下发给设备的数据

自己写的客户端是可以连接到平台的,一直连不上得看下具体的报错

Java 代码示例参考:https://bbs.huaweicloud.com/forum/thread-27358-1-1.html

设备想要收到下发的命令,必须订阅设备接收命令的topic(https://support.huaweicloud.com/api-IoT/iot_06_3011.html)

调用接口失败,请参考接口返回的错误码和错误描述解决问题

参考问题(3)

模组作为客户端连接华为云mqtt服务器,是否是mqtts的连接应该是服务端所决定,参考问题(3)

参考问题(1)

问题理解,我用mqtt协议发送数据到平台,然后我设置了回调,数据到达平台的时候应该进入到我设置的回调,告诉我数据发送出去了。 最终的问题是,使用mqtt.fx模拟器发送数据,然后订阅推送数据到应用服务器(就是问题所描述的回调)。原因:订阅了设备信息变化(deviceInfoChanged),数据一直收不到,得订阅 设备数据变化(deviceDataChanged)

可以直接调接口 设备服务调用(https://support.huaweicloud.com/api-IoT/iot_06_0052.html) 给mqtt设备下发命令就能收到命令了

Python示例:https://bbs.huaweicloud.com/forum/thread-27362-1-1.html

参考问题(11)

必须得加证书,参考 https://support.huaweicloud.com/api-IoT/iot_06_3009.html

经排查代码,发现心跳时间要设置30s以上,即options.setKeepAliveInterval(30);这个值 改为30以上

目前都是需要带证书的

上报数据的主题就一个

设备连接应该使用 设备对接信息中的IP,且是8943和8843对应的IP地址

mqtt一般来说上去的数据都是json,推荐直接以json的形式上报;如果报二进制的话topic中的codecMode要变成 binary,上报的消息要转成binary上报

可以参考java demo 示例

使用 MQTT 协议与平台对接可能出现的问题

//hexStr 就是上报的码流,比如0101

private static byte[] hexStr2Str(String hexStr) {

String str = "0123456789ABCDEF";

char[] hexs = hexStr.toCharArray();

byte[] bytes = new byte[hexStr.length() / 2];

int n;

for (int i = 0; i < bytes.length; i++) {

n = str.indexOf(hexs[2 * i]) * 16;

n += str.indexOf(hexs[2 * i + 1]);

bytes[i] = (byte) (n & 0xff);

}

return bytes;

}

原因:如果broker遇到问题重启了,所有的client端都得重启,因为服务端丢失了client的subscribe信息。(即使cleanSession=false)。为了避免服务端重启、网络短时断线影响消息的持续接收,需要做一些设置和编码

//防止 ERROR o.e.p.c.mqttv3.internal.ClientState - Timed out as no activity  错误

mqttConnectOptions.setConnectionTimeout(0);

//mqttClient.reconnect(); 这个方法或者回调已经设置了重连

mqttConnectOptions.setAutomaticReconnect(true);

//服务端记录 session (自己手动重新subscribe ,可能设置为true也行)

mqttConnectOptions.setCleanSession(false);

未完持续更新。。。

有关于 MQTT 的问题欢迎补充!!!

MQTT

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【云小课】EI第3课 官方教程:手把手教您“免费体验”ModelArts Notebook
下一篇:没别的,就聊聊以太网和交换机
相关文章