Я успешно подключил Raspberry Pi к облачному IoT и смог легко переключать устройство. Но через некоторое время устройство, по-моему, перестает подключаться и показывает "(" on_disconnect "," 1: Out of memory. ")" И состояние подключения устанавливается на "Ложь". Поэтому я переустановил пакеты git (папку сообщества) и повторил те же шаги, и я снова добился успеха. Но, очевидно, та же ошибка возникла через некоторое время. Я не могу сузить это до того, что вызывает проблему. Я новичок здесь, поэтому дайте мне знать, если я должен добавить больше информации.
РЕДАКТИРОВАТЬ: Так как я пытался сузить его, я обнаружил, что повторное выполнение команды "export GOOGLE_CLOUD_PROJECT = your-project-id-123", когда возникает вышеупомянутая проблема, помогает мне установить соединение правильно (не меняя ничего). Хотя это не останавливает проблему "Недостаточно памяти", на данный момент с ней нужно работать.
РЕДАКТИРОВАТЬ: https://github.com/GoogleCloudPlatform/community/tree/master/tutorials/cloud-iot-gateways-rpi Ссылка на папку
Для тех, кто приходит сюда при испытании примера MQTT
Проблема в моем случае заключалась в том, что я просто забыл правильно установить флаг --project
в примере CLI, который разрешил имя проекта в None
что, очевидно, дает эту загадочную ошибку в восходящем направлении. Так что вы можете проверить, что ваш проект настроен правильно. Кстати, то же самое касается региона, что может привести к отказу в подключении.
Я помог автору этого вопроса решить эту проблему на другой платформе, но я публикую решение для справки.
Проблема заключается в том, что JWT, которые были сгенерированы в учебнике, которому следовал OP, истекает примерно через час, а также не содержит код для обновления токена после истечения срока его действия. Для получения дополнительной информации о создании и обновлении JWT см. Здесь.
edit: по запросу добавление фрагмента кода для обновления jwts. В этом случае get_client
создает соединение MQTT, которое также обрабатывает создание JWT. Предполагается, что срок действия JWT истекает через 60 минут, но в Cloud IoT Core JWT могут быть действительны в течение 24 часов.
seconds_since_issue = (datetime.datetime.utcnow() - jwt_iat).seconds
if seconds_since_issue > 60 * jwt_exp_mins:
print('Refreshing token after {}s').format(seconds_since_issue)
jwt_iat = datetime.datetime.utcnow()
client = get_client(
args.project_id, args.cloud_region,
args.registry_id, args.device_id, args.private_key_file,
args.algorithm, args.ca_certs, args.mqtt_bridge_hostname,
args.mqtt_bridge_port)