Чи можна публікувати кілька тем MQTT в одному запиті?


10

У мене є пристрій з декількома датчиками, який публікує кожне зчитування датчика окремо на такі теми

device1-id/sensor1-id = 10.2
device1-id/sensor2-id = 15.5
[...]

Ми подаємо його на AWS IoT за допомогою Amazon AWS IoT SDK, тобто

mqtt_params.qos = QOS1;
mqtt_params.payload = payload;
mqtt_params.payloadLen = payload_len;
rc = aws_iot_mqtt_publish(&client, topic, topic_len, &mqtt_params);

Кожен виклик генерує окремий пакет TCP та окрему відповідь від брокера AWS MQTT. Проблема полягає в тому, що деякі наші вузли знаходяться в дуже повільній мережі і чекають ACK після кожного пакету затримки публікації.

Чи є спосіб з'єднати всі показання датчика разом, в один пакет TCP, публікуючи їх в окремі теми та зберігаючи QOS = 1?

Відповіді:


7

Схоже, aws IoT sdk використовує синхронну публікацію (як і використовується код повернення), тому блокує кожне повідомлення.

На рівні протоколу MQTT немає причин, що ви не можете мати декілька повідомлень під час польоту одразу, тому ви можете подивитися на використання асинхронного клієнта Paho, щоб очікування відповіді на QOS1 можна було виконати без блокування публікації наступного повідомлення.

Іншим варіантом буде опублікувати лише одне складене повідомлення з усіма значеннями датчика за один раз і розділити його на кінцевому споживача.


1
Тільки до тих пір, поки він не переймається кодом відповіді. Якщо ви не отримали 200 OKвідповіді, чи означає це, що обидві операції не вдалися? Тільки один? Якщо так, то який?
Мауг каже, що повернемо Моніку

Ви все ще можете перевірити код повернення, вам потрібно лише перевірити його на маркер, що повернувся з публікації, щоб знати, до якого він відноситься.
hardillb

Але, на відміну від SUBSCRIBE, ми не можемо налаштувати масив тем та їх відповідних повідомлень у тому ж MQTT-повідомленні, правда?
cogitoergosum

hardillb Ви сказали " Іншим варіантом буде опублікувати лише одне складене повідомлення з усіма значеннями датчика за один раз і розділити його на кінцевому споживачі". Під цим ви маєте на увазі багаторівневу підстановку ?
user170106

1
@ user170106 Ні, з'єднання всіх оновлень в одне повідомлення означатиме, що вам потрібно підписатися лише на одну тему.
hardillb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.