Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Paho Mqtt客户端发布和订阅_Python_Raspberry Pi_Mqtt_Paho - Fatal编程技术网

Python 使用Paho Mqtt客户端发布和订阅

Python 使用Paho Mqtt客户端发布和订阅,python,raspberry-pi,mqtt,paho,Python,Raspberry Pi,Mqtt,Paho,在我的raspberry pi上安装paho mqtt客户端并将我的android应用程序和arduino与我的代理连接之后。我希望在收到来自应用程序或arduino客户端的消息后,将此消息重新发布到此客户端,例如,如果我在收到“关闭”后收到“打开”,则下一次发布将是“打开”“关闭”“打开”“关闭”。。。或者我只需要“开”或“关” 嗯 下面的代码将订阅主题f并重新发布主题f2 我想这可能对你有帮助 import threading import paho.mqtt.client as mqtt

在我的raspberry pi上安装paho mqtt客户端并将我的android应用程序和arduino与我的代理连接之后。我希望在收到来自应用程序或arduino客户端的消息后,将此消息重新发布到此客户端,例如,如果我在收到“关闭”后收到“打开”,则下一次发布将是“打开”“关闭”“打开”“关闭”。。。或者我只需要“开”或“关”

下面的代码将订阅主题f并重新发布主题f2


我想这可能对你有帮助

import threading
import paho.mqtt.client as mqtt

def publish_1(client,topic):
    message="on"
    print("publish data")
    client.publish(topic,message)
    publish_1(client,topic)


broker="test.mosquitto.org"
topic_pub='/temperature123'
topic_sub='$SYS/#'

def on_connect(client, userdata, rc):
    print("Connected with result code "+str(rc))
    client.subscribe(topic_sub)


def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(broker, 1883, 60)
thread1=threading.Thread(target=publish_1,args=(client,topic_pub))
thread1.start()

client.loop_forever()
此程序使用线程和传递客户端对象。
但问题是,这是递归发布的。

您可以研究这段代码并自己使用

import RPi.GPIO as GPIO
import time
import paho.mqtt.client as mqtt

GPIO.setmode(GPIO.BOARD)

GPIO.setup(13,GPIO.IN)

mqttc=mqtt.Client()
mqttc.connect("iot.eclipse.org",1883,60)
mqttc.loop_start()

def reading1():
    a=GPIO.input(13)
    print(a)
    return a

while 1:
    t=reading1()
    (result,mid)=mqttc.publish("paho/temp_ab",t,2)
    time.sleep(1)

mqttc.loop_stop()
mqttc.disconnect()

你能再解释一下你到底想达到什么目的吗?还不完全清楚。请确保在on_connect回调中订阅,否则这是一个bug。请参阅此处的“入门”部分:我以前尝试过这一点,但我的问题是发布方法不正确subscribe@hardillb我想重新发布从我在《哈利兄弟》中转载的主题中收到的每一条消息,但我希望它与同一主题相同,因为我的目标是将收到的消息分享给我的客户(安卓,arduino)谁订阅了f而不是F2在同一个主题上重新发布相同的值是没有意义的,因为你将进入一个持续的反馈循环。没有什么可以阻止android和arduino订阅同一个主题。所以你认为我只需要订阅主题并发布到我的代理和我的所有客户中。你应该可能会将命令与不同主题上的状态分开
import threading
import paho.mqtt.client as mqtt

def publish_1(client,topic):
    message="on"
    print("publish data")
    client.publish(topic,message)
    publish_1(client,topic)


broker="test.mosquitto.org"
topic_pub='/temperature123'
topic_sub='$SYS/#'

def on_connect(client, userdata, rc):
    print("Connected with result code "+str(rc))
    client.subscribe(topic_sub)


def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(broker, 1883, 60)
thread1=threading.Thread(target=publish_1,args=(client,topic_pub))
thread1.start()

client.loop_forever()
import RPi.GPIO as GPIO
import time
import paho.mqtt.client as mqtt

GPIO.setmode(GPIO.BOARD)

GPIO.setup(13,GPIO.IN)

mqttc=mqtt.Client()
mqttc.connect("iot.eclipse.org",1883,60)
mqttc.loop_start()

def reading1():
    a=GPIO.input(13)
    print(a)
    return a

while 1:
    t=reading1()
    (result,mid)=mqttc.publish("paho/temp_ab",t,2)
    time.sleep(1)

mqttc.loop_stop()
mqttc.disconnect()