Я пытаюсь собрать опубликованные данные из своей темы с помощью приложения, созданного с использованием Python. Поэтому, когда данные публикуются, они обрабатываются приложением.
Проблема в том, что подписка всегда кажется успешной, но события не извлекаются.
Я могу подключиться к брокеру с помощью клиента MQTT.
Вот мой текущий код, обрабатывающий подключение и подписку:
broker_address= "mqtt.googleapis.com"
port = 8883
client = mqtt.Client(client_id='projects/<project_id>/locations/<location>/registries/<registry_id>/devices/<device_id>',
protocol=4)
password=create_jwt(...) #works
client.username_pw_set(username='unused',password=password)
client.tls_set(ca_certs=<route_to_cert>, tls_version=ssl.PROTOCOL_TLSv1_2)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_message = on_message
client.on_subscribe = on_subscribe
client.connect(broker_address, port)
client.loop_start()
while connected_flag == 0: #changed in "on_connect" method
print("Wait until connected ", connected_flag)
time.sleep(1)
print("Connected")
topic = 'projects/<project_id>/topics/<device_id>'
client.subscribe(topic)
while subscribed_flag == 0: #changed in "on_subscribe" method
time.sleep(1)
time.sleep(5)
client.loop_stop()
client.disconnect()
Тема, на которую я пытаюсь подписаться: 'projects / _project_id_ / themes / _device_id_'.
Некоторая логика есть в методах on_connect и on_subscribe. И я знаю, что код нелогичен как есть, но я просто хочу прочитать данные, прежде чем продолжить.
Итак, когда я публикую событие в то время, когда клиент подключен и подписан, я предполагаю, что метод on_message будет запущен, но ничего не происходит.
Я никогда раньше не использовал MQTT или Google Cloud IoT, поэтому могу совершить очень простую ошибку.
ИЗМЕНИТЬ
Мне удалось получить сообщения, перейдя на библиотеки Google Cloud Pub Sub (https://cloud.google.com/pubsub/docs/reference/libraries). Необходимо было создать подписку на Google Cloud IoT и подключить ее к теме. Подписка по запросу.
Мое решение еще не идеально, но это шаг вперед. Вот мой код:
from google.cloud import pubsub;
subscriber = pubsub.SubscriberClient()
subscription_path = subscriber.subscription_path(<project_id>, <subscription_name>)
def callback(message):
print(message.data)
subscriber.subscribe(subscription_path, callback=callback)
Обратный вызов вызывается при поступлении сообщения.
on_message
код? - person Dalton Cézane   schedule 04.04.2018