2016-07-21 3 views
0

paho mqtt 클라이언트를 사용하여 carriots 데이터 스트림을 구독하려고합니다. 그러나 나는 캐리지로부터 어떤 데이터도 읽을 수 없다. 여기에 캐리지를 구독하기 위해 사용하는 소스 코드가 있습니다. 이 코드에 문제가 있거나 내가 cariots 스트림에 가입하는 데 필요한 몇 가지 단계를 놓친 경우Carriots Stream 구독하기

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# Client paho-mqtt CarriotsMqttServer 
# sub_carriot.py 

import paho.mqtt.subscribe as mqtt 

class CarriotsMqttClient(): 
    host = 'mqtt.carriots.com' 
    port = '1883' 
    auth = {} 
    topic = '%s/streams' 
    tls = None 

    def __init__(self, auth, tls=None): 
     self.auth = auth 
     self.topic = '%s/streams' % auth['username'] 
     if tls: 
      self.tls = tls 
      self.port = '8883' 

    #Subscribe 
    def subscribe(self): 
     try: 
      mqtt.simple(topics=self.topic, msg_count=10, hostname=self.host, port=self.port, auth=self.auth, tls=self.tls) 
     except Exception, ex: 
      print ex 
if __name__ == '__main__': 
    auth = {'username': '72cdf4ec......bbeec9d9fb4483e', 'password': ''} 
    client_mqtt = CarriotsMqttClient(auth=auth) 
    client_mqtt.subscribe() 

은 아무도 말해 줄 수.

필자는 paho mqtt를 사용하여 캐리지 웹 사이트에 제공된 참조 코드를 사용하여 성공적으로 게시 할 수있었습니다.

답변

0

mqtt.simple 기능 블록은 msg_count 메시지를 수신 한 다음 해당 메시지를 반환합니다.

그래서 코드는 10 개의 메시지를 수신 할 때까지 그냥 앉아서 출력없이 메시지를 수집하지 않으므로 종료됩니다.

콜백과 네트워크 루프를 사용하여 정상적인 구독 방법을 사용하는 것이 좋습니다. 이 같은 것 :

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# Client paho-mqtt CarriotsMqttServer 
# sub_carriot.py 

import paho.mqtt.client as mqtt 

class CarriotsMqttClient(): 
    host = 'mqtt.carriots.com' 
    port = '1883' 
    auth = {} 
    topic = '%s/streams' 
    tls = None 
    client = None 

    def __init__(self, auth, tls=None): 
     self.auth = auth 
     self.topic = '%s/streams' % auth['username'] 
     if tls: 
      self.tls = tls 
      self.port = '8883' 
     self.client = mqtt.Client() 
     self.client.on_message = self.onMessage 
     self.client.connect(self.host, self.port) 
     self.client.loop_start() 

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

    #Subscribe 
    def subscribe(self): 
     try: 
      self.client.subscribe(self.topic) 
     except Exception, ex: 
      print ex 
if __name__ == '__main__': 
    auth = {'username': '72cdf4ec......bbeec9d9fb4483e', 'password': ''} 
    client_mqtt = CarriotsMqttClient(auth=auth) 
    client_mqtt.subscribe()