2016-10-15 37 views
0

MQTT Pahoプロジェクトの次のコードを使用して、mqttブローカーからのメッセージを購読しています。私はmosquitto_subを使って接続をテストし、そこにメッセージを受け取ります。しかし、次のコードを実行すると、メッセージは受信されず、出力も表示されません。トピックとホストを確認しました。MQTTクライアントがメッセージを受信して​​いません

import paho.mqtt.client as mqtt 

# The callback for when the client receives a CONNACK response from the server. 
def on_connect(client, userdata, 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("test") 

# 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("localhost", 1883, 60) 
client.loop_forever() 

次のエラーがブローカによって記録されます。古くなったMQTTバージョンを指摘し@hardillbする

Invalid protocol "MQTT" in CONNECT from ::1. 
Socket read error on client (null), disconnecting. 

EDIT感謝を。私は次のことをやった後

すべてが働いた:

  1. 須藤はapt-getをパージmosquitto
  2. 須藤はapt-アドオンリポジトリPPA:mosquitto-devの/ mosquitto-PPA
  3. 須藤はapt-getを更新apt-getのmosquitto
+0

あなたが言うことがうまくいかない場合は、何か出力が得られますか?またこれを実行しているプラ​​ットフォームは何ですか? – hardillb

+0

出力がまったくありません。 – Andrei

+0

"Connected with result code ..."というメッセージが表示されない場合は、ブローカのログをチェックして、クライアントが接続していない理由が示されているかどうかを確認する必要があります。投稿したコードがここで正常に動作しています – hardillb

答えて

1

をインストールするには、mosquittoの古いバージョンを使用しているとPythonが電子であるため、これが最も可能性が高いです

  • sudoを

    import paho.mqtt.client as mqtt 
    
    # The callback for when the client receives a CONNACK response from the server. 
    def on_connect(client, userdata, 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("test") 
    
    # The callback for when a PUBLISH message is received from the server. 
    def on_message(client, userdata, msg): 
        print(msg.topic+" "+str(msg.payload)) 
    
    # Change made HERE 
    client = mqtt.Client(protocol=MQTTv31) 
    
    client.on_connect = on_connect 
    client.on_message = on_message 
    
    client.connect("localhost", 1883, 60) 
    client.loop_forever() 
    

    ます。また、バージョンは非常に古く、番号を持っていることを、できるだけ早くあなたのブローカーをアップグレードする必要があります。MQTT 3.1.1

    が示すように、コードを変更してみてくださいサポートし、新しいビルドをxpecting既知の問題のうち、現在のバージョンは1.4.10です。

  • 関連する問題