Предположим, что существуют многочисленные слабые датчики (например, устройства уровня Arduino), которые полагаются на BLE в качестве средства связи и что эти устройства подключены к более мощному шлюзу (например, устройства Raspberry pi уровня).
Я хотел бы знать, считается ли MQTT подходящим протоколом для передачи их показаний (короткие, частые пакетные сообщения).
Многие блоги / документы считают MQTT подходящим для «приложений IoT», поскольку он имеет меньший вес по сравнению с HTTP и экономит энергию. Однако, насколько я понимаю, требуется, чтобы соединение оставалось открытым, что не относится к BLE или другим протоколам связи, подходящим для IoT. BLE не поддерживает соединение открытым в течение длительных периодов времени для резервирования энергии. Очевидно, MQTT подходит, когда используется протокол уровня MAC, такой как WiFi. Это почти нарушает обоснование использования MQTT в первую очередь (т. Е. Если устройство вычислимо обрабатывает протокол, такой как WiFi, тогда ему может не понадобиться протокол, такой как MQTT). Видите ли вы недостаток в этой логике?
Есть ли альтернативный протокол прикладного уровня для этой цели? Какова наиболее часто встречающаяся структура сообщений такого типа (например, необработанные двоичные данные, JSON, XML), когда они взаимодействуют со шлюзом и когда они общаются с сервером напрямую?
Ответы:
MQTT должен работать по протоколу TCP / IP (я не могу вспомнить, действительно ли он указан в спецификации или для этого достаточно предположений), но его родственный протокол MQTT-SN может работать практически по любому протоколу, который может передавать данные Я видел реализации в UDP и последовательном.
Сказав, что я не уверен, что вы получите, работая с BLE, встроенные в BLE характеристики предлагают большую часть тех же преимуществ (хотя бы в отношении 1 к 1) с такими вещами, как уведомление.
Я думаю, что одна из важных вещей, которую нужно помнить, это то, что означает «I» в IoT, оно подразумевает доступ к Интернету в какой-то момент (даже если это устройство шлюза или телефон). В этот момент MQTT может быть очень полезным, но это не обязательно означает весь путь до (истекающего кровью) края.
источник
Возможно, было бы лучше сделать простое отображение данных из парадигм BLE в MQTT, а не пытаться буквально отправлять MQTT через BLE.
BLE обычно обменивается данными в форме характеристик . У них есть различные уникальные BLE-механизмы для обнаружения изменений значений, которые могут оказаться полезными. Но они имеют максимальную длину данных 20 байтов .
Это возможно , чтобы поток последовательных данных через BLE, перемещение 20 байт за один раз. Иногда это делается для реализации виртуального последовательного порта, и вы можете туннелировать полный MQTT через это.
Но вам, вероятно, лучше использовать набор характеристик BLE для переноса данных по различным темам и иметь мост, который отображает характеристический идентификатор в тему MQTT и отображает значение в полезную нагрузку MQTT.
BLE имеет свое собственное чувство продолжающихся подключенных сеансов против несвязанных. Вероятно, вам следует выяснить, какое использование BLE лучше всего подходит для вашего приложения, а затем сопоставить его с MQTT-смыслом поддержания соединения.
Вы должны быть в состоянии сделать это в одном или обоих направлениях: BLE-> MQTT и MQTT-> BLE
источник