我有一个覆盆子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分钟,我没有收到任何数据。
答案 0 :(得分:1)
如果你的pi离线,你在传感器方面有什么样的持久机制?
据我所知,如果代理脱机,mqtt默认只在客户端存储少量数据。
事实上,只要客户端仍尝试向代理发送数据,我认为它会存储数据。换句话说,只要它没有达到超时。我认为默认情况下这是15秒。
修改强>
如果要增加此超时,则必须增加keep-alive
时间。使用Paho Python库它看起来像这样。
client.connect(host="localhost", port=1883, keepalive=60)
请记住,最大值保持活动时间为18小时12分15秒。
Keep Alive是以秒为单位测量的时间间隔。表达为 16位字,它是允许的最大时间间隔 在客户端发送的两个连续控制数据包之间经过。
当您将65535s(16位字的最大值)计算为更易读的格式时,您将获得18小时12分15秒。