订阅Carriots流

2024-10-04 11:31:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用paho mqtt客户机订阅carriots数据流。但我无法读取卡里奥特的任何数据。 下面是我用来订阅carriots的源代码。你知道吗

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

有人能告诉我,如果有什么错误的代码或我错过了一些步骤,这是需要订阅cariots流。你知道吗

在carriots网站上给出的参考代码的帮助下,我能够使用paho mqtt在carriots上成功发布。你知道吗


Tags: selfnoneauthhosttopicportdeftls
1条回答
网友
1楼 · 发布于 2024-10-04 11:31:30

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

相关问题 更多 >