由mosquitto经纪人发送的离线消息不会发送到adafruit iot门户网站

时间:2017-11-06 10:43:39

标签: mqtt mosquitto paho

我有一个覆盆子pi,其中我安装了mosquitto broker和mqtt。 Pi连接到传感器,我需要将此数据发送到adafruit IOT protal。我可以在连接pi时发送所有数据但是当pi离线时,我只能传输20-30秒的数据。如果pi离线超过2-3分钟,则该数据不会传输到门户网站。

我创建了一个bridge.conf文件,并添加了我的mosquitto使用的所有配置。以下是内容:

connection iothub
address io.adafruit.com:1883
remote_username <username>
remote_password <password>
remote_clientid sensor1
bridge_cafile /etc/ssl/certs/ca-certificates.crt
try_private false
cleansession false
start_type automatic
bridge_insecure false
bridge_protocol_version mqttv311
bridge_tls_version tlsv1
notifications false
max_queued_messages 0
autosave_interval 5

topic # out 2 /sensors/sensor1
topic # in 2 /sensors/sensor1 

我已将cleansession设置为false并使用QOS 2.我还将max_queued_messages设置为0,这意味着最大值。我面临的问题是,如果pi离线仅1-2分钟,我能够获得所有离线数据但是如果它离线超过3-4分钟,我没有收到任何数据。

1 个答案:

答案 0 :(得分:1)

如果你的pi离线,你在传感器方面有什么样的持久机制?

据我所知,如果代理脱机,mqtt默认只在客户端存储少量数据。

事实上,只要客户端仍尝试向代理发送数据,我认为它会存储数据。换句话说,只要它没有达到超时。我认为默认情况下这是15秒。

修改

如果要增加此超时,则必须增加keep-alive时间。使用Paho Python库它看起来像这样。

client.connect(host="localhost", port=1883, keepalive=60)

请记住,最大值保持活动时间为18小时12分15秒。

来自OASIS documentation

  

Keep Alive是以秒为单位测量的时间间隔。表达为   16位字,它是允许的最大时间间隔   在客户端发送的两个连续控制数据包之间经过。

当您将65535s(16位字的最大值)计算为更易读的格式时,您将获得18小时12分15秒。