【问题标题】:Offline messages not being send to adafruit iot portal by mosquitto broker蚊子经纪人未将离线消息发送到 adafruit iot 门户
【发布时间】:2017-11-06 10:43:39
【问题描述】:

我有一个树莓派,我在其中安装了 mosquitto 代理和 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 分钟,我不会收到任何数据。

【问题讨论】:

    标签: mqtt mosquitto paho


    【解决方案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 位字的最大值)计算为更易读的格式时,您将得到 18h 12min 15 sec。

    【讨论】:

    • 在树莓派方面,我有一个 python 代码,它以 5 秒的延迟循环发布数据。所以我确信代码将始终发送数据,甚至我也可以从日志中看到它。你说的15sec默认值,我们可以增加它吗?
    • 更新了我的答案。希望对你有帮助
    • 好的,如果我将保持活动设置为 60,它将在 60 秒后达到超时,所以在这 60 秒之后它可能不会排队数据,因此数据将丢失。?我说的对吗?
    • 你在哪里发现的最大保活时间是18h 12min 15sec.?请添加链接
    • 已更新链接
    猜你喜欢
    • 2017-10-28
    • 2015-09-21
    • 2022-10-23
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多