2016-11-01 56 views
2

私はMQTTブローカーMosquittoを自分のPCにインストールしました。私のネットワーク内のボックスで動作させるにはいくつか問題があります。ローカルでは、RPQにMosquitto MQTTブローカを実行しても問題ありません。私はクライアントコマンド(mosquitto_sub, mosquitto_pub)を購読してトピックに公開することができます。問題はありません。しかし、別のボックスから接続しようとすると、Win2k12サーバーにPythonスクリプトがあり、接続できないことが示されます。mqttブローカーに接続できません

  • 私は
  • 私のルータのファイアウォールをオフにしようとした私は私のWin2k12サーバ
  • でファイアウォールをオフにしようとした私は、アウトバウンド私Win2k12サーバ
  • から許可されたポートにTCP 1883を追加しました

ザ・Pythonスクリプト:

import paho.mqtt.client as mqtt 

def on_connect(client, userdata, flags, rc): 
    client.publish("test_mqtt", "test") 
    client.subscribe("test") 

def on_disconnect(client, userdata, rc): 
    print("Disconnect, reason: " + str(rc)) 
    print("Disconnect, reason: " + str(client)) 

client = mqtt.Client("testclient") 
client.on_connect = on_connect 
client.on_disconnect = on_disconnect 
client.connect("192.168.1.20", 1883, 60) 
client.loop_forever() 

ここで出力が

です
Disconnect, reason: <paho.mqtt.client.Client object at 0x01F41EF0> 
Disconnect, reason: 1 

私はthe documentationを見ようとしましたが、それはフラグだけを述べていて、それが何であるかは定義していません。

Mosquittoを実行しているラズベリーパイもNode-redを実行しています。 MQTTブローカーへの接続に問題はありません(両方とも同じrpiで稼動しています)

MQTTをRaspberry Piでセットアップして他のデバイスと連携させましたか? NodeMCUで動作させたいのですが、問題が発生したら、Pythonスクリプトを使って問題をさらにデバッグする作業を始めました。

+0

クライアントIDを再利用していますか? ( "testclient")すべてのクライアントが一意のIDを必要とする – hardillb

+0

@hardillb私は、pythonスクリプトで同じ結果を持つランダムなクライアントIDでテストを実行しました。 – Jason94

+0

実行中のモスキートのバージョン。 pahoの新しいバージョンはMQTT 3.11を使用し、古いバージョンのmosquittoは3.13をサポートします。 – hardillb

答えて

3

あなたはmqtt.Clientのconstuctorにオプションを追加することにより、プロトコルの3.1レベルを使用するPAHOクライアントを強制することができます。

import paho.mqtt.client as mqtt 

def on_connect(client, userdata, flags, rc): 
    client.publish("test_mqtt", "test") 
    client.subscribe("test") 

def on_disconnect(client, userdata, rc): 
    print("Disconnect, reason: " + str(rc)) 
    print("Disconnect, reason: " + str(client)) 

client = mqtt.Client("testclient", protocol=mqtt.MQTTv31) 
client.on_connect = on_connect 
client.on_disconnect = on_disconnect 
client.connect("192.168.1.20", 1883, 60) 
client.loop_forever() 
+0

は問題を解決していませんでしたが、以前と同じエラーが発生しました。追加しなければならなかった "" MQTTv31 " – Jason94

+0

私の間違いは、今すぐになるはずです – hardillb

+0

@hardillib ALLRIGHT! protocol = mqtt.MQTTv31は違いを作って、私のpythonスクリプトは現在動作しています!わーい! – Jason94

0

まず、あなたはラズベリーPiに接続できることを確認する必要があります。 Paho以外のライブラリを使用するか、MQTTクライアントを1つ使用してみることができます。 http://www.hivemq.com/blog/seven-best-mqtt-client-tools

もう1つの方法は、クライアントとブローカの両方がポート80を使用してそのポートを介して通信できるかどうかを設定することです。

関連する問題