掌握excel线性回归技巧助力数据分析与决策优化
2021
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 示例
//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小时内删除侵权内容。