2016-07-21 14 views
0

Ich versuche Carriots Datenstrom mit Paho mqtt Client zu abonnieren. Aber ich kann keine Daten von Carriots lesen. Hier ist der Quellcode, den ich verwende, um Carriots zu abonnieren.Carriots Stream abonnieren

#!/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() 

Kann jemand mir sagen, ob es etwas falsch mit dem Code ist oder ich einige Schritt fehle, die cariots Stream abonnieren erforderlich ist.

Ich konnte erfolgreich auf Carriots mit Paho MQtt, mit Hilfe der Referenz-Code auf Carriots Website gegeben veröffentlichen.

Antwort

0

Die mqtt.simple Funktionsblöcke bis msg_count Nachrichten empfangen wurden und dann diese Nachrichten zurückgibt.

So wird der Code, wie Sie es haben, nur sitzen, bis es 10 Nachrichten erhalten hat, dann wird es wahrscheinlich ohne eine Ausgabe beenden, da es nichts gibt, um die von der Funktion zurückgegebenen Nachrichten zu sammeln.

Ich würde vorschlagen, dass Sie die normale Subskriptionsmethode mit einem Rückruf und der Netzwerkschleife betrachten. Etwas wie dieses:

#!/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()