ГоловнаСтаттіIoT

Мережі датчиків Інтернету речей: MQTT, Обчислювальне проєктування на краю та Фільтр Калмана

Кілька сотень дешевих, шумних датчиків, одна легка протокол для переміщення їхніх даних і один фільтр, який перетворює шум у число, яким можна довіряти.

mysimulator teamОновлено — червень 2026≈ 8 хв читання▶ Відкрити симуляцію

Мережа датчиків переважно є проблемою обміну повідомленнями

Розгортання IoT – розумне будівництво, ферма, виробничий цех – може мати тисячі акумуляторних вузлів, кожен з яких передає дані про температуру, вібрацію, зайнятість або вологість кожні кілька секунд через ненадійний бездротовий канал. Справжня складність рідко полягає в фізиці датчика; це полягає у надійному передаванні цих даних без розрядки акумулятора протягом тижня або перевантаження мережі. Саме тому майже всі стеки IoT побудовані на основі MQTT (Message Queuing Telemetry Transport), протоколу публікації-підписки, розробленого в 1999 році для телеметрії нафтових трубопроводів через дорогі та ненадійні супутникові з’єднання – саме ті низькошвидкісні, високозатримні умови, які все ще стикаються з IoT сьогодні.

жива демонстрація · пов'язана симуляція● LIVE

Вивіс, підписка та три рівні "Я обіцяю"

В MQTT сенсор ніколи не спілкується безпосередньо з дашбордом. Він публікує невелике повідомлення до названої теми, наприклад building/floor3/room12/temp, на центральному брокері; все, що підписалося на цю тему — або wildcard, як building/floor3/+/temp — отримує її миттєво. Публікатор і підписник ніколи не повинні знати про один одного, що дозволяє додати сотні нових дашбордів без торкання до одного сенсора.

QoS 0 "максимум раз" - запаліть і забувайте, без підтвердження — найдешевше QoS 1 "принаймні один раз" - брокер підтверджує, відправник повторює до підтвердження — може дублюватись QoS 2 "точно один раз" - чотирикрокова рукоздана процедура гарантує одне надсилання — найдорожче Датчик вібрації, який стікає кожні 200 мс, використовує QoS 0 — втрачений зразок безглуздий, і повторне намагання просто витрачає час. Тригер пожежної сигналізації використовує QoS 1 або 2, оскільки втрата цього одного повідомлення не є варіантом. Ця регульованість, плюс невеликий бінарний заголовок та постійне TCP-з’єднання, яке уникає повторного встановлення рукозданих процедур, пояснюють, чому MQTT економить батарею порівняно з опитуванням REST API кожні кілька секунд.

QoS 0  "at most once"   fire and forget, no acknowledgement — cheapest
QoS 1  "at least once"  broker acks, sender retries until confirmed — may duplicate
QoS 2  "exactly once"   a four-step handshake guarantees single delivery — costliest

Обчислення на краю: фільтрація перед передачею

Відправка кожного необробленого вимірювання до центру обробки хмарних даних не масштабується. Шлюз або мікроконтролер на "краю" — фізично близько до датчиків — замість цього виконує три речі перед віддачею будь-яких даних: він агрегує (середнє значення/максимум/мінімум за вікно замість кожного вибірку), фільтрує (відкидає значення, які не пройшли перевірку на адекватність) та об’єднує дані з кількох датчиків в одну кращу оцінку. Лише оброблений результат або аномалія, яка варта уваги, надсилається далі. Це також скорочує затримку циклу для будь-чого, що потрібно локально реагувати — мотор вимикається через перегрів, не чекаючи на поїздку до центру обробки даних на іншому континенті.

Фільтр Калмана: оптимальне поєднання вимірювань

Окремі датчики шумні та іноді не збігаються — дешевий акселерометр-заснований індикатор нахилу відхиляється, температурний зонд біля дверей різко стрибає при відкритті. Фільтр Калмана (Рудольф Кàльман, 1960) є стандартним інструментом для поєднання шумного прогнозу з шумним вимірюванням у єдисну оцінку, яка доводиться кращою за будь-яку з них окремо, для лінійних систем із Гауссовим шумом. Він працює в два кроки, повторювані щоразу, коли надходить нове читання:

ПЕРЕДБАЧЕННЯ (використовуючи модель руху/поведінки системи) x_pred = F * x_prev // проектування стану вперед P_pred = F * P_prev * F^T + Q // збільшення невизначеності за рахунок процесного шуму Q

ОПДЕРЖАННЯ (включення нової вимірювання z) K = P_pred * H^T / (H * P_pred * H^T + R) // Калманів коефіцієнт, вагує довіру x_new = x_pred + K * (z - H * x_pred) // перетягування оцінки до z P_new = (I - K * H) * P_pred // невизначеність зменшується R є відомою вимірювальним шумом датчика дисперсією, а Q — скільки справжнього стану очікується відхилятися між оновленнями. Коли R малий (точний датчик), коефіцієнт K близький до 1 і фільтр сильно покладається на нове читання; коли R великий (шумний датчик), K зменшується і фільтр спирається на свій власний прогноз замість цього. Об'єднання двох незалежних датчиків однієї величини — скажімо, барометр та ультразвуковий висотомір, таким чином дає оцінку, дисперсія якої завжди менша або дорівнює кращому з двох входів окремо, що є повною метою об'єднання даних датчиків.

PREDICT (using the system's motion/behaviour model)
  x_pred = F * x_prev              // project the state forward
  P_pred = F * P_prev * F^T + Q    // grow the uncertainty by process noise Q

UPDATE (fold in the new measurement z)
  K = P_pred * H^T / (H * P_pred * H^T + R)   // Kalman gain, weighs trust
  x_new = x_pred + K * (z - H * x_pred)       // pull estimate toward z
  P_new = (I - K * H) * P_pred                // uncertainty shrinks

Frequently asked questions

Що таке MQTT і що воно робить, чого звичайний HTTP не може?

MQTT використовує модель публікація-підписка замість моделі запит-відповідь. Сенсор публікує одне повідомлення в темі, а будь-яка кількість підписників отримує його без знання сенсором, хто вони і скільки їх. Він підтримує постійне з’єднання замість відкриття нового для кожного повідомлення, забезпечує три рівні гарантії доставки (максимум один раз, щонайменше один раз, точно один раз) та дозволяє брокеру зберігати повідомлення «останнє бажання», яке автоматично спрацьовує при несподіваному відключенні пристрою. Все це потребує значно менше пропускної здатності та енергії, ніж HTTP-опитування.

Чому ж не просто надсилати всі необроблені дані з датчиків у хмару?

Це було б обмежено пропускною здатністю, затримкою та енергією. Вібраційний сенсор із частотою семплювання кількох кілогерц міг би перевантажити мобільний зв’язок протягом секунд, якщо би безперервно стімулював необроблені дані, а обчислення даних у центрі обробки перед тим, як актуатор може відреагувати, додало б від десятків до сотень мілісекунд, що неможливо для систем безпеки. Обчислення на краю фільтрує, агрегує та виконує злиття Кальмана локально, надсилаючи хмарі лише підсумки, аномалії та об’єднані оцінки – часто в два-три рази менше даних.

Чому фільтр Кальмана довіряє деяким датчикам більше, ніж іншим?

Це тому, що коефіцієнт Кальмана вагує кожне вимірювання за його відомою дисперсією шуму. Датчик із малою та добре визначеною дисперсією шуму сильно впливає на злитий оцінку; шумний або коливальний датчик автоматично зменшується в вазі. Фільтр не припускає, якому датчику довіряти – він вирішує, на кожному кроці, точну вагу, яка мінімізує дисперсію об’єднаної оцінки, враховуючи статистику шуму, яку ви задали.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте IoT Sensor Network і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію IoT Sensor Network

Що ви знайшли?

Додати кроки відтворення (опційно)