2017-01-18 49 views
0

我正在爲我的項目與MQTT集成運行交通燈(pi-stop)解決方案。因此,發佈者將向用戶發送計數的數量,並且用戶將控制和改變交通信號燈。但是,我無法從發佈商那裏發送任何數據。請諮詢,謝謝爲什麼我的Python MQTT發行商不發佈任何內容

MQTT_pub.py(發佈者)

import paho.mqtt.client as mqtt 
import paho.mqtt.publish as publish 

sub_topic = "light" #recieve message on this topic 

pub_topic = "light" #send message to this topic 

Broker = "127.0.1.1" 

# when connecting to mqtt do this; 

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

# when receiving a mqtt message do this; 

def on_message(client, userdata, msg): 
    message = str(msg.payload) 
    print(msg.topic+" "+message) 
    # publish_mqtt("got your message") 

# to send a message 

def publish_mqtt(count): 
    mqttc = mqtt.Client("counting") 
    mqttc.connect(Broker, 1883) 
    mqttc.publish(pub_topic, "10") 
    #mqttc.loop(5) //timeout = 5s 

def on_publish(mosq, obj, mid): 
    print("mid: " + str(mid)) 

client = mqtt.Client() 

client.on_connect = on_connect 
client.on_message = on_message 

client.connect(Broker, 1883, 60) 
publish_mqtt(0) 

MQTT.py(用戶)

import paho.mqtt.client as mqtt 
import paho.mqtt.publish as publish 
import TrafficKit03 

sub_topic = "light" #recieve message on this topic 

pub_topic = "light" #send message to this topic 

Broker = "127.0.0.1" 


# when connecting to mqtt do this; 

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

# when receiving a mqtt message do this; 

def on_message(client, userdata, msg): 
    message = str(msg.payload) 
    print(msg.topic+" "+message) 
    # decide on traffic counting (if 5 display.. if 0 display..) 
    publish_mqtt(count) 
    TrafficKit03.call("TrafficKit03.py") 


def on_subscribe(client, userdata, mid, gqos): 
    print("subscribed: " + gpos) 
    pass 


def publish_mqtt(count): 
    mqttc = mqtt.Client("counting") 
    mqttc.connect(Broker, 1883) 
    mqttc.publish(pub_topic, "10") 
    #mqttc.loop(5) //timeout = 5s 

client = mqtt.Client() 

client.on_connect = on_connect 
client.on_subscribe = on_subscribe 
client.on_message = on_message 


client.connect(Broker, 1883, 60) 
client.loop_start() 
+1

我還沒有使用MQTT爲Python之前,但你是否應該在'publisher.py'中創建'mqtt.Client()'的兩個實例? – Tagc

+0

@Tagc對不起,我不是很確定。 – Jenni

回答

0

正如@Tagic說,你需要刪除多餘的mqtt.Client()實例

編輯這兩個文件以刪除publish_mqtt功能中的額外連接

def publish_mqtt(count): 
    #mqttc = mqtt.Client("counting") 
    #mqttc.connect(Broker, 1883) 
    mqttc.publish(pub_topic, "10") 
    #mqttc.loop(5) //timeout = 5s 

在MQTT_pub.py文件,你也應該將呼叫轉移到publish_mqtton_connect功能:

def on_connect(client, userdata, flags, rc): 
    print("Connected with result code "+str(rc)) 
    publish_mqtt(0) 

,並啓動網絡環路

client.connect(Broker, 1883, 60) 
client.loop_start() 
+0

感謝它的工作 – Jenni

相關問題