Я моделирую устройство Интернета вещей. В рамках этого моделирования я создал класс Messenger, экземпляр которого при создании взаимодействует с виртуальным устройством в ядре Интернета вещей Google Cloud по протоколу MQTT. Клиент, который я использую, часто отключается, что приводит к потере сообщений. Я надеюсь найти способ предотвратить случайное отключение клиента.
Для этого взаимодействия используется клиент, встроенный в класс Messenger, — это клиент Python paho mqtt.
Идентификатор клиента получается из project_id, Cloud_region, Registry_id и Device_ID с использованием следующего кода
Код: Выделить всё
client_id = "projects/{}/locations/{}/registries/{}/devices/{}".format(project_id, cloud_region, registry_id, device_id)
- Он публикует данные для событий. тема
Код: Выделить всё
sub_topic = "events"
mqtt_topic = "/devices/{}/{}".format(self.device_id, sub_topic)
client.publish(mqtt_topic, payload, qos=1)
- Он подписывается на тему конфигурации виртуального устройства.
Код: Выделить всё
mqtt_config_topic = "/devices/{}/config".format(self.device_id)
sub_status = client.subscribe(mqtt_config_topic, qos=1)
- Он отправляет информацию о состоянии в тему состояния устройства с частотой не чаще одного раза в 12 секунд. (Google Cloud рекомендует не чаще одного раза в 10 секунд, поэтому я добавил еще несколько секунд для маневра).
Код: Выделить всё
sub_topic = "state"
mqtt_topic = "/devices/{}/{}".format(self.device_id, sub_topic)
payload = json.dumps(new_state)
client.publish(mqtt_topic, payload, qos=0)
Вот отрывок из файла журнала:
Код: Выделить всё
DEBUG Controller4.testA [04/Nov/2021:12:54:57.862] new client created
DEBUG Controller4.testA [04/Nov/2021:12:54:57.865] Publishing state to /devices//state
DEBUG Controller4.testA [04/Nov/2021:12:54:57.867] Sending PUBLISH (d0, q0, r0, m2), 'b'/devices//state'', ... (197 bytes)
DEBUG Controller4.testA [04/Nov/2021:12:54:57.870] Not publishing state: Previous state update 0:00:00.004303 seconds ago
DEBUG Controller4.testA [04/Nov/2021:12:54:57.870] on_publish client: userdata: None mid: 2
DEBUG Controller4.testA [04/Nov/2021:12:54:57.871] Sending PUBACK (Mid: 1)
DEBUG Controller4.testA [04/Nov/2021:12:54:57.947] Received CONNACK (0, 0)
DEBUG Controller4.testA [04/Nov/2021:12:54:57.951] on_connect Connection Accepted.
DEBUG Controller4.testA [04/Nov/2021:12:54:57.976] Received SUBACK
DEBUG Controller4.testA [04/Nov/2021:12:54:57.976] Subscribed: (1,)
DEBUG Controller4.testA [04/Nov/2021:12:54:57.978] Received PUBLISH (d0, q1, r0, m1), '/devices//config', ... (20 bytes)
INFO Controller4.testA [04/Nov/2021:12:54:57.979] Received new state message '{"osmo": 6, "pH": 4}' on topic '/devices//config' with Qos 1
DEBUG Controller4.testA [04/Nov/2021:12:54:57.980] Not publishing state: Previous state update 0:00:00.114637 seconds ago
DEBUG Controller4.testA [04/Nov/2021:12:54:57.981] Sending PUBACK (Mid: 1)
DEBUG Controller4.testA [04/Nov/2021:12:55:01.958] on_disconnect 7: The connection was lost. error code 7None
Почему клиент продолжает отключаться? Как мне устранить эту проблему?
Подробнее здесь: https://stackoverflow.com/questions/698 ... e-connecti