Raspberry-pi mqttc.publish()在20个条目后溢出节点红色

时间:2014-07-07 13:01:27

标签: python node.js raspberry-pi

我正在使用我的python代码通过mqttc将消息发布到node-red。问题是在20 mqttc发布后,数据未发布到node-red。

这是我用于发布到node-red的python代码:

mqttc.connect("nodered&mqtt_server_ip",1883)
i=1
while True:

    i=i+1
    mqttc.publish("sensor",i,1)
    time.sleep(1)

我也试过了:

 i=1
 while True:

    mqttc.connect("nodered&mqtt_server_ip",1883)
    i=i+1
    mqttc.publish("sensor",i,1)
    mqttc.disconnect()
    time.sleep(1)

无论如何,代码将前20个值发布到node-red,然后停止。

我的节点 - 红色工作流程如下。

enter image description here

2 个答案:

答案 0 :(得分:1)

  mqttc.connect("nodered&mqtt_server_ip",1883)
    i=1
    while True:

        i=i+1
        mqttc.publish("sensor",i,0)//corrected code
        time.sleep(1)

答案 1 :(得分:1)

http://mosquitto.org/man/mqtt-7.html

MQTT定义了三个级别的服务质量(QoS)。 QoS定义了代理/客户端尝试确保收到消息的难度。消息可以在任何QoS级别发送,并且客户端可以尝试订阅任何QoS级别的主题。这意味着客户端选择它将接收的最大QoS。例如,如果在QoS 2发布消息并且客户端使用QoS 0订阅,则消息将以QoS 0传递到该客户端。如果第二个客户端也订阅了相同的主题,但具有QoS 2,则它将收到相同的消息,但具有QoS 2.对于第二个示例,如果客户端订阅了QoS 2并且在QoS 0上发布了消息,则客户端将在QoS 0上接收它。

更高级别的QoS更可靠,但涉及更高的延迟并且具有更高的带宽要求。

0:经纪人/客户端将发送一次消息,但没有确认。

1:经纪人/客户将至少发送一次消息,并需要确认。

2:代理/客户端将使用四步握手将消息传递一次。