2017-04-14 133 views
1

私のラップトップでMQTT Mosquittoブローカーを実行しています。それから私はそれに2パホMQTTクライアントを接続しようとしています:1)JavaのPahoを使用してAndroid携帯から2)Python Pahoを使用してラズベリーパイから。MQTT pahoクライアント接続タイムアウト・エラー

Androidからの接続は完全に行われます。問題はありません。

ただし、何らかの理由でラズベリーに接続できません。

Traceback (most recent call last): 
    File "sensorsClient.py", line 28, in <module> 
    client.connect(mqttServer, 1883) 
    File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 700, in connect 
    return self.reconnect() 
    File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 822, in reconnect 
    sock = socket.create_connection((self._host, self._port), source_address=(self._bind_address, 0)) 
    File "/usr/lib/python2.7/socket.py", line 571, in create_connection 
    raise err 
socket.error: [Errno 110] Connection timed out 

接続するためのコードは以下のとおりである:

import paho.mqtt.client as mqtt 

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

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

mqttServer = 'zzz.xxx.ccc.qqq' # Public IP of the laptop 


client = mqtt.Client("", True, None, mqtt.MQTTv31) 
client.on_connect = on_connect 
client.on_message = on_message 

client.connect(mqttServer, 1883) 
client.loop_start() 

Everythinは、WiFiを介してネットワーク内で行われる代わりclient.connect方法ブロックは、いくつかの時間後、私は、次受け取ります。モバイルデータはありません。誰かがなぜそれが起こるのか説明してもらえますか?

+0

アプリの残りのコードを含めることができますので、すべて見ることができます。あなたはpiからラップトップにpingでき、 'mqttServer'変数が正しいホスト名/ IPアドレスであることを確認しましたか(余分な空白はありません) – hardillb

+0

@hardillb私のラップトップでpingできます。 mqttServerは、標準の 'xxx.zzz.qqq.ttt'形式のIPを持つ文字列です(数回チェックします)。プライバシーのため投稿しません:) – tomkou

+0

私はあなたがPiからラップトップへの別の方法でpingできるかどうか尋ねました。また、残りのコードを追加してください。あなたが望むなら、あなたはIPアドレスを置き換えることができます(ただし、192.168.xxまたは10.xxxのアドレスはローカルネットワークからのみアクセス可能です) – hardillb

答えて

0

ブローカの設定(ブローカの場合はベンダにクレデンシャルを問い合わせる)を行って、接続のためのユーザ名/パスワードを設定しているかどうかを調べます。おそらくクライアント側の接続タイムアウトに問題があります。

それはあなただけのようなあなたのクライアント設定でユーザー名/パスワードを設定する必要がある場合されている場合:

client.username_pw_set("username_on_broker", "password_on_broker")

また、私はあなたのブローカーのURL

を行い標準化/サニタイズするために使用urlparse.urlparse("broker url")を示唆していますこれがあなたを助けない場合は手を差し伸べてください。

関連する問題