• 欢迎大家分享资料!前往留言板评论即可!

AIR202模块配合ONENET平台发送心跳包失败问题

合宙 模组资料网 4年前 (2021-05-15) 359次浏览 0个评论 扫描二维码
                        现实用AIR202_S5最小系统板做一个小开发,配合移动的onenet物联网平台。

air202的开发使用lua脚本,对mqtt的配置如下:

local subTopic = “/lock/176766/45967572/get” –设备端需要订阅的topic
local mqttIp,mqttPort = “mqtt.heclouds.com”,“6002” –定义onenet的服务器域名和端口
local clientId = “xxx” –在onenet平台创建设备时,系统自动生成的设备id
local userName = “xxx” –在onenet平台创建设备时,系统生成的产品id
local passWord = “xxxx=” –onenet平台的APIkey
local keepAlive = 600

上面的keepAlive单位是秒,也就是多少秒后发送心跳包来保持长连接。

设备启动后,一切正常,然而在10分钟(600秒)后,LuaTool界面提示错误日志如下:

[2018-10-23 08:42:06.827]: [I]-[mqtt.client:checkKeepAlive] pingreq send fail

[2018-10-23 08:42:06.827]: [D]-[mqtt.client:write] C000 2

[2018-10-23 08:42:06.827]: [W]-[socket.client:send] error 6, SEND FAIL

当出现上面错误提示的时候,AIR202会重连,也会连接成功,经过多次观察,发现重连成功后10分钟又再次出现该问题,这样是严重影响正常使用的。

上面问题周期性出现,且间隔都是10分钟,因此基本可以断定,是模组每隔600s发送心跳包,但是发送失败了。

模组使用的是移动的手机卡,考虑到mqtt是基于tcp的长连接,要想维持长连接必须间隔性的发送心跳包来告诉运行商,这个tcp连接我还要用,不要给我切断,所以怀疑是不是600秒发一次心跳包时间间隔太久了呢?

于是,将600s,修改为120s,也就是让模组每隔2分钟就发心跳包,然后进行测,问题得以解决。

总结:

[2018-10-23 08:42:06.827]: [I]-[mqtt.client:checkKeepAlive] pingreq send fail

[2018-10-23 08:42:06.827]: [D]-[mqtt.client:write] C000 2

[2018-10-23 08:42:06.827]: [W]-[socket.client:send] error 6, SEND FAIL

出现上面问题的原因,与模组无关,与onenet物联网平台无关,只跟自己程序里心跳包发送间隔时间太长有关,时间改短点。

有人会觉得心跳包间隔时间短,那发送频率高,多么浪费流量啊?其实不然,你长时间不发送数据,你即使发送几个字节,那么运营商也会按照1K来计算的。


喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址