使用 MQTT 协议与平台对接可能出现的问题
其实只需要简单理解mqtt的消息订阅发布机制,就能用mqtt的方式和平台对接
1. 工单出现的问题
(1)OpenSSL Error: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
agentLite 证书校验失败,请检查证书是否配置正确,证书一般是放置在demo中的conf目录下的rootcert.pem 文件,如果该目录下已经存在证书文件,请点击下载更换证书
(2)我现在使用移远的EC20模块连接贵平台,通过使用MQTT3.1.1协议,那我该以什么方式向贵平台发送证书
参考:https://github.com/LiteOS/LiteOS/blob/develop/demos/agenttiny_mqtt/agent_tiny_demo.c
(3)请问mqtt可以不使用证书连接平台吗?
不可以,平台目前只支持MQTTS接入,原生接口参考:https://support.huaweicloud.cn/api-IoT/iot_06_3002.html
(4)移远BC2模块使用MQTT协议连接NB-iot平台后,如何使用MQTT的消息订阅和发布功能,以及查看发出的数据
订阅设备上报数据的topic(https://support.huaweicloud.cn/api-IoT/iot_06_3010.html),往平台发送数据
订阅设备接收命令的topic(https://support.huaweicloud.cn/api-IoT/iot_06_3011.html),接收平台下发给设备的数据
(5)请问,设备接入那块,支持mqtt接入,我用java写了一个mqtt客户端去连接设备接入给我分配的地址和端口,一直连不上这个mqtt服务器,请问是不支持这种做法接入设备吗?还是只能通过设备本身烧写代码接入设备
自己写的客户端是可以连接到平台的,一直连不上得看下具体的报错
Java 代码示例参考:https://bbs.huaweicloud.cn/forum/thread-27358-1-1.html
(6)mqtt直连订阅主题,下发命令接收不到,调用设备服务调用接口失败
设备想要收到下发的命令,必须订阅设备接收命令的topic(https://support.huaweicloud.cn/api-IoT/iot_06_3011.html)
调用接口失败,请参考接口返回的错误码和错误描述解决问题
(7)物联网平台能支持物联网设备使用MQTT协议接入吗,我看使用MQTT.fx接入时要是用证书,能不用证书的接入吗?
参考问题(3)
(8)教程文档里存在mqtt接入华为云的方式,但是现在我公司的使用的模组不支持mqtts,只支持mqtt,请问如何使用mqtt接入华为云
模组作为客户端连接华为云mqtt服务器,是否是mqtts的连接应该是服务端所决定,参考问题(3)
(9)ERROR MqttBase: MqttBase_onConnectFailure() error, messageId 0, code -1, message TCP/TLS connect failure
参考问题(1)
(10)我用mqtt推送消息到华为云平台消息收到了,但是她没有向我设备的回调接口发送数据
问题理解,我用mqtt协议发送数据到平台,然后我设置了回调,数据到达平台的时候应该进入到我设置的回调,告诉我数据发送出去了。 最终的问题是,使用mqtt.fx模拟器发送数据,然后订阅推送数据到应用服务器(就是问题所描述的回调)。原因:订阅了设备信息变化(deviceInfoChanged),数据一直收不到,得订阅 设备数据变化(deviceDataChanged)
(11)设备通过MQTT连接平台成功后,订阅主题 /huawei/v1/devices/c9c645c9-56a2-4d2b-a299-40d4aeb2e537/command/json,但是平台给该设备发送命令,设备没有收到消息,可能是什么原因?
可以直接调接口 设备服务调用(https://support.huaweicloud.cn/api-IoT/iot_06_0052.html) 给mqtt设备下发命令就能收到命令了
(12)使用paho mqtt模拟设备上报数据,代码如下:xxx 最终报证书错误。请问改如何在Python中设置证书?
Python示例:https://bbs.huaweicloud.cn/forum/thread-27362-1-1.html
(13)我已经用MQTT.fx模拟接入了Iot平台,并实现了数据上报到平台。请问怎样能从平台上下发数据给MQTT.fx?我订阅了/huawei/v1/devices/{deviceId}/command/json这个topic,但不知道怎样从平台把数据下发到设备端,谢谢!
参考问题(11)
(14)使用MQTT方式连接物联网平台,必须加载ca证书才能连接上华为云,但是我看平台支持MQTT(S),不知道是怎么才能MQTT连接(不用加载CA证书)
必须得加证书,参考 https://support.huaweicloud.cn/api-IoT/iot_06_3009.html
(15)原生MQTT接口连接,控制台总是报无效客户机标识
经排查代码,发现心跳时间要设置30s以上,即options.setKeepAliveInterval(30);这个值 改为30以上
(16)1、通过原生MQTT协议接入平台,能否提供不带证书的方案?像阿里云,onnet云都有不带证书的模式连接。2、是否支持多主题订阅发送。
目前都是需要带证书的
上报数据的主题就一个
(17)使用模拟器快速体验(MQTT设备),按照文档指示:应用对接IP地址,填写从设备接入服务从管理控制台 获取的应用对接IP地址。但进入管理控制台,并未看到对应的IP,我尝试使用ping 对应的域名获取IP,填入依然连接失败。
设备连接应该使用 设备对接信息中的IP,且是8943和8843对应的IP地址
(18)设备管理服务采用MQTT协议接入,消息格数为二进制码流 模拟设备调试可以成功 问真实设备怎么调试,是否支持二进制码流
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;
}
(19)我这边使用的java 集成sdk , 对接的iot 数据上报服务 报如下错误:2020-01-05 18:36:39.541 ERROR 2473 Timed out as no write activity
原因:如果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 的问题欢迎补充!!!
- 点赞
- 收藏
- 关注作者
评论(0)