Проблема в том, что вы вызываете client.publish () до того, как соединение будет установлено. Переместите client.publish в функцию on_connect, ПОСЛЕ client.subscribe ('SEEDQ'), и она заработает.
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
# client.subscribe("$SYS/#")
client.subscribe('SEEDQ')
client.publish('SEEDQ', 111, 0, False)
Выход:
Connected with result code 0
SEEDQ 111
К вашему сведению, я использовал общедоступный тестовый сервер на iot.eclipse.org, порт 1883.
К вашему сведению, есть очень полезный клиент браузера ЗДЕСЬ, использующий его и общедоступный тестовый сервер messagesight.demos.ibm .com порт 1883, вы можете подписаться на SEEDQ и увидеть публикацию вашего скрипта python, а также с помощью клиента браузера вы можете опубликовать его в SEEDQ из своего браузера, и ваш скрипт будет отображать сообщение, пока оно находится в loop_forever (). Очевидно, что использование этих тестовых серверов является общедоступным.
ОБНОВЛЕНИЕ вот полный код - это работает против общедоступных серверов, которые я показываю выше.
import paho.mqtt.client as mqtt
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
# client.subscribe("$SYS/#")
client.subscribe('SEEDQ')
client.publish('SEEDQ', 111, 0, False)
# The callback for when a PUBLISH message is received from the server.
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('15.xx.xx.xx', 1883, 60)
#client.connect("iot.eclipse.org", 1883, 60)
client.connect("messagesight.demos.ibm.com", 1883, 60)
#client.publish('SEEDQ', 111, 0, False)
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client.loop_forever()
person
barny
schedule
28.05.2016