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

举报
二营长的意大利面。 发表于 2020/01/15 15:37:12 2020/01/15
【摘要】 使用 MQTT 协议与平台对接可能出现的问题其实只需要简单理解mqtt的消息订阅发布机制,就能用mqtt的方式和平台对接1. 工单出现的问题(1)OpenSSL Error: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failedagentLite 证书校验失败,请检查证书是否配...

使用 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.com/api-IoT/iot_06_3002.html


(4)移远BC2模块使用MQTT协议连接NB-iot平台后,如何使用MQTT的消息订阅和发布功能,以及查看发出的数据
  1. 订阅设备上报数据的topic(https://support.huaweicloud.com/api-IoT/iot_06_3010.html),往平台发送数据

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


(5)请问,设备接入那块,支持mqtt接入,我用java写了一个mqtt客户端去连接设备接入给我分配的地址和端口,一直连不上这个mqtt服务器,请问是不支持这种做法接入设备吗?还是只能通过设备本身烧写代码接入设备
  1. 自己写的客户端是可以连接到平台的,一直连不上得看下具体的报错

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


(6)mqtt直连订阅主题,下发命令接收不到,调用设备服务调用接口失败
  1. 设备想要收到下发的命令,必须订阅设备接收命令的topic(https://support.huaweicloud.com/api-IoT/iot_06_3011.html

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


(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.com/api-IoT/iot_06_0052.html) 给mqtt设备下发命令就能收到命令了


(12)使用paho mqtt模拟设备上报数据,代码如下:xxx  最终报证书错误。请问改如何在Python中设置证书?

Python示例:https://bbs.huaweicloud.com/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.com/api-IoT/iot_06_3009.html


(15)原生MQTT接口连接,控制台总是报无效客户机标识

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


(16)1、通过原生MQTT协议接入平台,能否提供不带证书的方案?像阿里云,onnet云都有不带证书的模式连接。2、是否支持多主题订阅发送。
  1. 目前都是需要带证书的

  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 的问题欢迎补充!!!





【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。