Skip to main content

📡 MQTT - Мгновенная связь между IoT устройствами. Publisher/Subscriber революция

📋 Паспорт спринта

Параметр Значение
Предмет Интернет вещей (элективный курс)
Класс 9 класс
Спринт № 25 из 36
Тип занятия Протокольно-ориентированный с real-time экспериментами
Продолжительность 90 минут
Формат Сетевая лаборатория с созданием MQTT системы

🎯 Цели спринта (Sprint Goals)

Основная цель:

Освоить принципы MQTT протокола и создать систему real-time обмена данными между IoT устройствами через publisher/subscriber модель

Конкретные результаты спринта:

  • Понимают различия между HTTP и MQTT для IoT
  • Знают принципы Publisher/Subscriber архитектуры
  • Устанавливают и настраивают Mosquitto MQTT брокер
  • Создают MQTT publisher и subscriber
  • Работают с topics и QoS уровнями
  • 🆕 Проектируют topic hierarchy для реального IoT проекта
  • 🆕 Понимают вопросы безопасности MQTT (authentication, encryption)
  • 🆕 Сравнивают MQTT с другими IoT протоколами (CoAP, WebSockets)

🔄 Sprint Retrospective предыдущего спринта (0-3 мин)

Быстрая проверка:

  • “Кто создал мобильный интерфейс для своего IoT API? Покажите!”
  • “Какая была самая большая проблема с responsive design?”
  • “Поднимите руку, кто протестировал интерфейс на реальном телефоне”

Связка с новой темой: “Ваши интерфейсы красивые, но обновляются только при обновлении страницы. А что если датчик изменился прямо сейчас? Как сделать так, чтобы все устройства узнали об этом мгновенно? Познакомимся с MQTT!”


🕐 Sprint Timeline (90 минут)

⚡ SPRINT START (3-8 мин): Демо “Магия мгновенной связи”

🆕 Живая демонстрация MQTT:

  1. Учитель показывает две системы:
    • HTTP API: Обновляет данные датчика → нужно обновить страницу → видим изменения
    • MQTT: Изменяет значение датчика → все подключенные устройства мгновенно получают обновление
  2. Демо с несколькими клиентами:
    • На проекторе: веб-интерфейс с датчиками
    • На телефоне учителя: тот же интерфейс
    • На планшете ученика: еще один клиент
    • Изменение на одном → мгновенно на всех!
  3. 🆕 “Отключаем интернет” - показываем, что MQTT работает в локальной сети

Вопросы к классу:

  • “В чем разница между тем, что вы увидели?”
  • “Где в реальной жизни важна мгновенная передача данных?”
  • “Как вы думаете, как это работает ‘под капотом’?”

Проблема: “HTTP отлично работает для веб-сайтов, но IoT устройства должны ‘разговаривать’ по-другому. Изучим язык IoT устройств!”

📚 THEORY BLOCK (8-25 мин): MQTT vs HTTP - битва протоколов

Микро-блок 1 (8-13 мин): Проблемы HTTP для IoT

 1🌐 HTTP: Отлично для веб-сайтов, но...
 2
 3❌ ПРОБЛЕМЫ ДЛЯ IoT:
 4   🔄 Request/Response - всегда нужно "спрашивать"
 5   📶 Тяжелый протокол - много лишних данных
 6   🔋 Энергозатратный - постоянные подключения
 7   ⏱️ Нет real-time - нужно постоянно опрашивать
 8   📱 Плохо для мобильных сетей - большие пакеты
 9
10🏠 ПРИМЕР: Умная лампочка по HTTP
11   💡 Лампочка → "Сервер, я включилась!"
12   🖥️ Сервер → "Ок, записал"
13   📱 Телефон → "Сервер, что с лампочкой?"
14   🖥️ Сервер → "Она включена"
15   
16   Проблема: Телефон не знает об изменениях мгновенно!
17
18✅ ЧТО НУЖНО IoT:
19   • Мгновенные уведомления об изменениях
20   • Минимальный трафик для экономии батареи
21   • Работа при нестабильном соединении
22   • Один к многим (broadcast) сообщения

Интерактив: “Придумайте IoT сценарий, где задержка критична (пожарная сигнализация, умный замок, etc.)”

Микро-блок 2 (13-18 мин): MQTT - протокол для IoT

 1📡 MQTT = Message Queuing Telemetry Transport
 2   Легкий протокол для обмена сообщениями в IoT
 3
 4🎯 КЛЮЧЕВЫЕ ПРИНЦИПЫ:
 5   1. Publisher/Subscriber модель
 6   2. Broker как посредник
 7   3. Topics для организации сообщений
 8   4. QoS для гарантии доставки
 9   5. Retain для сохранения последнего значения
10
11📮 АНАЛОГИЯ: MQTT как почтовая система
12   📬 Publisher = отправитель письма
13   🏢 Broker = почтовое отделение  
14   📪 Subscriber = получатель с подпиской
15   🏷️ Topic = адрес/тема письма
16   
17🔄 КАК ЭТО РАБОТАЕТ:
18   1. Все подключаются к Broker
19   2. Publisher отправляет сообщение в topic
20   3. Broker доставляет всем подписанным Subscriber'ам
21   4. Subscriber'ы мгновенно получают обновления
22
23💡 ПРИМЕР: home/living_room/temperature
24   🌡️ Датчик публикует: "23.5°C"
25   📱 Все приложения мгновенно получают: "23.5°C"

Микро-блок 3 (18-25 мин): Topic Hierarchy и QoS

 1🏷️ TOPICS - система адресации MQTT:
 2
 3ИЕРАРХИЧЕСКАЯ СТРУКТУРА:
 4home/living_room/temperature     - температура в гостиной
 5home/living_room/light/status    - статус света
 6home/living_room/light/brightness - яркость света
 7home/kitchen/motion              - датчик движения на кухне
 8home/security/door/front         - входная дверь
 9
10🔍 WILDCARDS для подписки:
11home/+/temperature              - температура во всех комнатах
12home/living_room/+              - все датчики в гостиной  
13home/#                          - всё в доме
14
15⚡ QoS (Quality of Service) уровни:
16QoS 0: "Fire and forget" - отправил и забыл
17QoS 1: "At least once" - гарантия доставки минимум 1 раз
18QoS 2: "Exactly once" - гарантия доставки ровно 1 раз
19
20🎯 КОГДА ЧТО ИСПОЛЬЗОВАТЬ:
21QoS 0: Датчики температуры (если потеряется - не критично)
22QoS 1: Уведомления о движении (важно не пропустить)
23QoS 2: Команды замка (критично выполнить точно 1 раз)
24
25🆕 RETAINED MESSAGES:
26Broker сохраняет последнее значение для новых подписчиков
27Пример: новое устройство сразу знает текущую температуру

☕ BREAK (25-30 мин): Техническая пауза

🛠️ ПРАКТИЧЕСКИЙ БЛОК (30-75 мин): MQTT лаборатория

Этап 1: Установка Mosquitto Broker (30-35 мин)

🆕 Варианты установки для разных ОС:

 1# Для понимания процесса (псевдокод)
 2
 3# Ubuntu/Debian
 4sudo apt update
 5sudo apt install mosquitto mosquitto-clients
 6
 7# macOS
 8brew install mosquitto
 9
10# Windows
11# Скачать с mosquitto.org и установить
12
13# 🆕 Docker (универсальный способ)
14docker run -it -p 1883:1883 eclipse-mosquitto
15
16# 🆕 Облачные варианты для школы
17# HiveMQ Public Broker: broker.hivemq.com:1883
18# Eclipse Public Broker: iot.eclipse.org:1883

🆕 Альтернативы для школьной среды:

  • Использование публичных тестовых брокеров
  • Один компьютер учителя как локальный брокер
  • Эмуляция через веб-интерфейсы (WebSockets)

Этап 2: Первые эксперименты с MQTT (35-50 мин)

🆕 Командная строка - основы MQTT:

 1# Псевдокод для понимания команд
 2
 3# Подписаться на topic (в одном терминале)
 4mosquitto_sub -h localhost -t "test/topic"
 5
 6# Опубликовать сообщение (в другом терминале)  
 7mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT!"
 8
 9# 🆕 Эксперименты с wildcards
10mosquitto_sub -h localhost -t "home/+/temperature"
11mosquitto_sub -h localhost -t "home/#"
12
13# 🆕 Retained messages
14mosquitto_pub -h localhost -t "home/status" -m "online" -r
15
16# 🆕 QoS эксперименты
17mosquitto_pub -h localhost -t "critical/command" -m "unlock" -q 2

🔍 Первые эксперименты по группам:

🔵 ГРУППА “MQTT EXPLORERS”:

 1ЗАДАЧА: Исследовать основы MQTT коммуникации
 2
 3ЭКСПЕРИМЕНТЫ:
 41. Простая pub/sub связь между двумя терминалами
 52. Тестирование wildcards (+, #)
 63. Эксперименты с retained messages
 74. Влияние QoS на доставку
 8
 9ИЗМЕРЕНИЯ:
10✓ Скорость доставки сообщений
11✓ Поведение при отключении subscriber
12✓ Размер MQTT пакетов vs HTTP
13✓ Энергопотребление (симуляция)
14
15РЕЗУЛЬТАТ: Сравнительная таблица MQTT vs HTTP

Этап 3: Создание IoT симуляторов (50-65 мин)

🔴 ГРУППА “SMART HOME SENSORS”:

 1# Псевдокод: Симулятор датчиков умного дома
 2
 3import random
 4import time
 5import mqtt_client
 6
 7# Симулятор температурного датчика
 8class TemperatureSensor:
 9    def __init__(self, room_name):
10        self.room = room_name
11        self.client = mqtt_client.connect("localhost")
12        
13    def simulate(self):
14        while True:
15            temperature = random.uniform(18.0, 26.0)
16            topic = f"home/{self.room}/temperature"
17            self.client.publish(topic, temperature)
18            time.sleep(5)  # каждые 5 секунд
19
20# Симулятор датчика движения            
21class MotionSensor:
22    def simulate_motion(self):
23        motion_detected = random.choice([True, False])
24        topic = f"home/{self.room}/motion"
25        self.client.publish(topic, motion_detected)
26
27ЗАДАЧА:
28 Создать 3+ виртуальных датчика
29 Разные комнаты и типы датчиков
30 Realistic данные (температура 18-26°C, влажность 30-70%)
31 Случайные события (движение, открытие двери)

🟢 ГРУППА “SMART HOME CONTROLLERS”:

 1# Псевдокод: Контроллеры умных устройств
 2
 3class SmartLight:
 4    def __init__(self, room_name):
 5        self.room = room_name
 6        self.state = "off"
 7        self.brightness = 0
 8        self.client = mqtt_client.connect("localhost")
 9        
10        # Подписываемся на команды
11        self.client.subscribe(f"home/{room}/light/command")
12        self.client.on_message = self.handle_command
13        
14    def handle_command(self, topic, message):
15        if message == "on":
16            self.state = "on"
17            self.brightness = 100
18        elif message == "off":
19            self.state = "off"
20            self.brightness = 0
21            
22        # Публикуем новое состояние
23        status_topic = f"home/{self.room}/light/status"
24        self.client.publish(status_topic, self.state)
25
26ЗАДАЧА:
27 Умная лампочка (включение/выключение/яркость)
28 Термостат (установка температуры)
29 Умный замок (блокировка/разблокировка)
30 Реакция на команды через MQTT

🟡 ГРУППА “MONITORING DASHBOARD”:

 1<!-- Псевдокод: Веб-дашборд для мониторинга -->
 2<!DOCTYPE html>
 3<html>
 4<head>
 5    <title>IoT Dashboard</title>
 6    <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
 7</head>
 8<body>
 9    <h1>🏠 Smart Home Dashboard</h1>
10    
11    <div class="sensors">
12        <div class="sensor-card">
13            <h3>🌡️ Living Room</h3>
14            <div id="living-temp">--°C</div>
15        </div>
16        
17        <div class="sensor-card">
18            <h3>💡 Kitchen Light</h3>
19            <div id="kitchen-light">--</div>
20            <button onclick="toggleLight('kitchen')">Toggle</button>
21        </div>
22    </div>
23
24    <script>
25        // Подключение к MQTT брокеру через WebSockets
26        const client = mqtt.connect('ws://localhost:8080');
27        
28        // Подписка на все датчики
29        client.subscribe('home/+/temperature');
30        client.subscribe('home/+/light/status');
31        
32        // Обработка входящих сообщений
33        client.on('message', function(topic, message) {
34            updateDashboard(topic, message.toString());
35        });
36        
37        function toggleLight(room) {
38            client.publish(`home/${room}/light/command`, 'toggle');
39        }
40    </script>
41</body>
42</html>
43
44ЗАДАЧА:
45✓ Real-time отображение всех датчиков
46✓ Управление устройствами через веб-интерфейс
47✓ Графики изменения температуры за время
48✓ Уведомления о критических событиях

🟠 ГРУППА “SECURITY SYSTEM”:

 1ЗАДАЧА: Система безопасности на MQTT
 2
 3КОМПОНЕНТЫ:
 4• Датчики движения в разных комнатах
 5• Датчики открытия дверей/окон
 6• Система постановки/снятия с охраны
 7• Камеры безопасности (симуляция)
 8• Сирена и уведомления
 9
10TOPICS ARCHITECTURE:
11security/arm_status          - статус охраны (armed/disarmed)
12security/sensors/+/motion    - датчики движения
13security/sensors/+/door      - датчики дверей
14security/alerts/+            - тревоги
15security/cameras/+/status    - статус камер
16
17ЛОГИКА:
18✓ При постановке на охрану - подписка на все датчики
19✓ При срабатывании датчика - проверка статуса охраны
20✓ Генерация тревоги и уведомлений
21✓ Логирование всех событий
22
23🆕 ADVANCED FEATURES:
24• Геофенсинг (автопостановка при уходе)
25• Ложные тревоги и их фильтрация
26• Интеграция с emergency services

Этап 4: Интеграция систем (65-70 мин)

🆕 “Большая система” - объединение всех групп:

 1🏠 ОБЩАЯ MQTT TOPOLOGY:
 2
 3home/
 4├── living_room/
 5│   ├── temperature
 6│   ├── humidity  
 7│   ├── light/status
 8│   ├── light/command
 9│   └── motion
10├── kitchen/
11│   ├── temperature
12│   ├── light/status
13│   └── door
14├── security/
15│   ├── arm_status
16│   ├── alerts/
17│   └── sensors/
18└── system/
19    ├── broker_status
20    └── last_will
21
22ЗАДАЧА: Создать взаимодействие между системами
23• Автовключение света при движении
24• Автопостановка охраны при уходе всех
25• Климат-контроль на основе присутствия
26• Энергосбережение (выключение всего при уходе)

🎯 MQTT SHOWCASE (70-83 мин): Демонстрация систем

🆕 Формат: “IoT MQTT Expo - Живые демонстрации”

  • Время на группу: 3 минуты живого демо + 30 секунд вопросы
  • Особенность: Показывать real-time взаимодействие

Структура презентации:

  1. “Наша IoT система решает задачу…” (30 сек)
  2. Живое демо: изменение значений в реальном времени (90 сек)
  3. “Самая крутая MQTT фича…” (30 сек)
  4. “Как это масштабируется…” (30 сек)

🆕 Критерии оценки:

  • Real-time responsiveness - мгновенность реакции
  • 🏗️ Architecture quality - продуманность topic структуры
  • 🔄 System integration - взаимодействие компонентов
  • 📈 Scalability - готовность к росту системы

🔍 MQTT DEEP DIVE (83-87 мин): Продвинутые темы

🆕 Быстрые мини-демо:

 1🔒 SECURITY DEMO:
 2- MQTT без аутентификации vs с паролем
 3- Шифрование SSL/TLS для критических данных
 4- Показ перехвата незащищенного трафика
 5
 6📊 PERFORMANCE COMPARISON:
 7- HTTP polling vs MQTT push
 8- Замер трафика и батареи
 9- Latency тесты
10
11🌐 ALTERNATIVE PROTOCOLS:
12- CoAP (Constrained Application Protocol)
13- WebSockets vs MQTT-over-WebSockets
14- LoRaWAN для дальних расстояний
15
16🚀 ADVANCED MQTT FEATURES:
17- Last Will Testament (что происходит при отключении)
18- Persistent sessions
19- Shared subscriptions для нагрузки

🔄 SPRINT RETRO (87-90 мин): MQTT инсайты

🆕 Технический анализ:

  1. В чем главное преимущество MQTT перед HTTP для IoT?
  2. Какие проблемы могут возникнуть при масштабировании?
  3. 🆕 Как обеспечить безопасность MQTT в продакшене?
  4. 🆕 Когда MQTT избыточен, а когда необходим?

🆕 Практические выводы:

  • Где в реальной жизни встречается pub/sub модель?
  • Какие IoT сценарии невозможны без real-time?
  • Что было самым неожиданным в MQTT?

📝 Sprint Backlog (Домашнее задание)

🆕 Основное задание: “MQTT System Architect”

Сценарий: Компания заказала IoT решение на MQTT. Выберите один проект:

  1. Умная ферма - мониторинг полей, теплиц, животных, автоматизация полива
  2. Smart City система - мониторинг трафика, парковки, освещения, экологии
  3. Промышленный IoT - мониторинг оборудования, предиктивное обслуживание
  4. Умный кампус - система для школы/университета

Требования к проекту:

 1📡 MQTT ARCHITECTURE DOCUMENT:
 2
 31. SYSTEM ANALYSIS:
 4    Какие устройства входят в систему?
 5    Какие данные они генерируют?
 6    Какие команды должны выполнять?
 7    Критические vs некритические операции
 8
 92. MQTT DESIGN:
10    Полная topic hierarchy (минимум 15 topics)
11    QoS уровни для каждого типа сообщений
12    Retained messages стратегия
13    Last Will Testament для критических устройств
14
153. SECURITY ARCHITECTURE:
16    Аутентификация устройств
17    Авторизация (кто что может делать)
18    Шифрование критических данных
19    Мониторинг подозрительной активности
20
214. SCALABILITY PLAN:
22    Как система будет расти?
23    Производительность брокера
24    Clustering и load balancing
25    Backup и disaster recovery
26
275. 🆕 INTEGRATION STRATEGY:
28    Интеграция с существующими системами
29    API Gateway для внешних приложений
30    Данные analytics и machine learning
31    Cloud vs on-premise deployment
32
33ФОРМАТ: Техническая документация + схемы архитектуры

🆕 Бонус-задания:

🔧 MQTT Developer: Создать полноценную MQTT систему с реальными датчиками (например, с Arduino/Raspberry Pi). Интегрировать с дашбордом из предыдущих спринтов.

🔒 Security Specialist: Исследовать уязвимости MQTT и способы их устранения. Настроить безопасный MQTT брокер с SSL/TLS, аутентификацией и авторизацией.

📊 Performance Engineer: Провести нагрузочное тестирование MQTT брокера. Сколько сообщений в секунду выдерживает? Как масштабировать для города на 1 млн устройств?

🌐 Protocol Researcher: Сравнить MQTT с альтернативными протоколами (CoAP, AMQP, WebRTC DataChannel). Когда что использовать?


📊 Sprint Metrics (Система оценивания)

🆕 Критерии оценки MQTT работы:

Критерий Отлично (5) Хорошо (4) Удовлетворительно (3)
MQTT Concepts Глубокое понимание pub/sub, QoS, topics Базовое понимание основных концепций Поверхностные знания
System Architecture Продуманная topic hierarchy + масштабируемость Логичная структура topics Простая topic организация
Real-time Implementation Мгновенные обновления + error handling Работающая real-time система Базовая pub/sub функциональность
Integration Skills Полная интеграция компонентов системы Частичная интеграция элементов Изолированные компоненты
🆕 Security Awareness Учтены аутентификация, авторизация, шифрование Базовые меры безопасности Безопасность не рассмотрена
🆕 Performance Understanding Оптимизация для производительности и масштаба Понимание performance вопросов Производительность не учтена

🆕 Sprint Badges:

  • 📡 MQTT Master - за глубокое понимание протокола
  • 🏗️ System Architect - за продуманную архитектуру
  • Real-time Guru - за мгновенные обновления
  • 🔄 Integration Expert - за качественную интеграцию
  • 🔒 Security Champion - за безопасную реализацию
  • 📈 Performance Optimizer - за оптимизацию системы
  • 💡 Innovation Award - за креативное применение MQTT

🎒 Sprint Resources

Необходимое ПО:

  • MQTT Broker: Mosquitto (локальный) или HiveMQ (облачный)
  • MQTT Clients: mosquitto-clients, MQTT.js, Python paho-mqtt
  • Development tools: VS Code, Python/Node.js/браузер
  • Monitoring: MQTT Explorer, HiveMQ WebSocket Client

🆕 Готовые ресурсы:

  • Docker Compose файл для быстрого развертывания
  • Библиотека симуляторов IoT устройств
  • Готовые HTML dashboard шаблоны
  • Коллекция MQTT testing сценариев

🆕 Резервные планы:

Если нет возможности установить брокер:

  • Использование публичных тестовых брокеров
  • Online MQTT simulators и sandbox окружения
  • Больше фокуса на архитектурное планирование

Если проблемы с сетью:

  • Локальная симуляция через файлы
  • Peer-to-peer демонстрации концепций
  • Бумажное моделирование pub/sub

🔧 Sprint Facilitation Tips

🆕 Подготовка MQTT лаборатории:

  • За неделю: Протестировать MQTT setup на всех типах компьютеров в школе
  • За день: Подготовить fallback публичные брокеры
  • За час: Проверить сетевые настройки и firewall

🆕 Поддержка во время экспериментов:

  • Начинающие: Готовые скрипты для копирования и модификации
  • Продвинутые: Вызовы по performance и security
  • Отстающие: Визуальные MQTT клиенты вместо командной строки

🆕 Типичные проблемы:

“Брокер не запускается” → Проверить порты, права доступа, использовать Docker “Сообщения не доходят” → Проверить topic names, подключение к брокеру “Не понимаю pub/sub” → Физические аналогии (рация, подписка на газету) “Слишком много сообщений” → Rate limiting, filtering, QoS настройки


🔗 Связь со следующими спринтами

Sprint #26 Preview: “🔌 MQTT интеграция с датчиками”

Мостик:

  • “Вы освоили MQTT теорию. Теперь подключим настоящие датчики!”
  • Переход от симуляторов к реальному железу
  • Интеграция Arduino/Raspberry Pi с MQTT

Sprint #27 Preview: “🏆 Проект 3: IoT дашборд - Презентация”

Подготовка к проекту:

  • Все знания от REST API до MQTT объединяются
  • Создание полноценного IoT решения
  • Подготовка к презентации перед экспертами

Развитие концепций:

1Спринт #25 → Спринт #26 → Спринт #27
2MQTT теория → Реальные датчики → Итоговый проект
3Broker setup → Hardware integration → Full IoT solution
4Topic design → Sensor data → Professional presentation
5Security basics → Production deployment → Real-world demo

🚀 КЛЮЧЕВЫЕ ОСОБЕННОСТИ СПРИНТА:

  1. Hands-on протокол - реальная работа с MQTT, а не только теория
  2. Real-time focus - акцент на мгновенность IoT коммуникации
  3. Системное мышление - проектирование архитектуры, а не отдельных компонентов
  4. Безопасность с начала - security как неотъемлемая часть
  5. Подготовка к реальности - промышленные практики и масштабирование
  6. Практическая интеграция - связь всех предыдущих знаний через MQTT