Mqtt 多个ESP8266订阅一个RPI 3

Mqtt 多个ESP8266订阅一个RPI 3,mqtt,publish-subscribe,esp8266,Mqtt,Publish Subscribe,Esp8266,我无法向一个RPi3代理订阅2个(或更多)ESP8266。 我用过: 它只起作用。 如果我连接esp8266-1,它将检查其值,然后我连接esp8266-2以获取其值,并且esp8266-1不再可用(即使我打开esp8266-2) 如何同时订阅esp8266? 我一次只能拥有其中一个。代码需要很少的更改: import paho.mqtt.client as mqtt import datetime mqtt_topics = [("esp8266-1",0), ("esp8266-2",0)

我无法向一个RPi3代理订阅2个(或更多)ESP8266。 我用过:

它只起作用。 如果我连接esp8266-1,它将检查其值,然后我连接esp8266-2以获取其值,并且esp8266-1不再可用(即使我打开esp8266-2)

如何同时订阅esp8266?
我一次只能拥有其中一个。

代码需要很少的更改:

import paho.mqtt.client as mqtt
import datetime

mqtt_topics = [("esp8266-1",0), ("esp8266-2",0)]

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

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

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect('localhost', 1883, 60)

try:
  client.loop_forever()
except KeyboardInterrupt:
  print("CTRL-C: Terminating program.")

但是,如果一个客户端工作,而另一个客户端强制第一个客户端断开连接,那么听起来两个客户端的clientID都是相同的。客户端ID对于所有客户端都必须是唯一的。

localhost
不能是远程计算机(例如raspberry pi)的正确代理地址。Thx mate。这就是我问题的解决办法!hardillb,你能告诉我如何在这个循环之外访问msg.topic和msg.payload吗?我采取了全球行动,但它不起作用。不能使用那个值。
import paho.mqtt.client as mqtt
import datetime

mqtt_topics = [("esp8266-1",0), ("esp8266-2",0)]

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

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

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect('localhost', 1883, 60)

try:
  client.loop_forever()
except KeyboardInterrupt:
  print("CTRL-C: Terminating program.")