2017-04-14 1 views
1

내 노트북에서 MQTT Mosquitto 중개인을 실행 중입니다. 그런 다음 Java Paho를 사용하는 Android 폰에서 2) Python Paho를 사용하는 Raspberry Pi에서 2 Paho MQTT 클라이언트를 연결하려고합니다.MQTT paho 클라이언트 연결 시간 초과 오류

안드로이드 연결에서 완벽하게 이루어집니다. 아무 문제 없습니다.

그러나 Raspberry는 연결할 수 없습니다.

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() 

모든 게는 WIFI를 통해 하나의 네트워크 내에서 수행되는 대신 client.connect 방법 블록과 잠시 후 나는 다음과 같은받을 수 있습니다. 모바일 데이터가 없습니다. 왜 그런 일이 일어날 지 설명해 주실 수 있습니까?

+0

앱의 나머지 코드를 포함하여 모든 정보를 볼 수 있습니까? 파이에서 노트북을 ping 할 수 있고'mqttServer' 변수가 올바른 호스트 이름/IP 주소 (추가 공백없이)인지 확인 했습니까 – hardillb

+0

@hardillb 내 랩톱으로 핑할 수 있습니다. mqttServer는 표준 'xxx.zzz.qqq.ttt'형식의 IP가있는 문자열입니다 (여러 번 선택). 개인 정보 보호 정책 이후 게시하지 않을 것입니다. – tomkou

+0

Pi에서 랩톱으로 다른 방법으로 핑할 수 있는지 물어 보았습니다. 또한 나머지 코드를 추가하십시오. 원하는 경우 IP 주소를 바꿀 수 있습니다 (단 192.168.xx 또는 10.xxx 주소는 로컬 네트워크에서만 액세스 가능) – hardillb

답변

0

실행할 수있는 첫 번째 검사 중 하나는 브로커 구성 (브로커 인 경우 공급 업체에 자격 증명을 요청)을 통해 연결을위한 사용자 이름/암호를 설정했는지 확인하는 것입니다. 아마도 그것은 클라이언트의 연결 시간 초과 문제입니다. 그건 당신이처럼 클라이언트 구성에서 사용자 이름/암호를 설정해야하는 경우라면

: 나는 소독하기 위해 사용 urlparse.urlparse("broker url")을 제안

또한

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

/브로커의 URL

마 표준화 이것이 도움이되지 않을 경우를 대비하여 연락하십시오.