📡 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:
- Учитель показывает две системы:
- HTTP API: Обновляет данные датчика → нужно обновить страницу → видим изменения
- MQTT: Изменяет значение датчика → все подключенные устройства мгновенно получают обновление
- Демо с несколькими клиентами:
- На проекторе: веб-интерфейс с датчиками
- На телефоне учителя: тот же интерфейс
- На планшете ученика: еще один клиент
- Изменение на одном → мгновенно на всех!
- 🆕 “Отключаем интернет” - показываем, что 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 взаимодействие
Структура презентации:
- “Наша IoT система решает задачу…” (30 сек)
- Живое демо: изменение значений в реальном времени (90 сек)
- “Самая крутая MQTT фича…” (30 сек)
- “Как это масштабируется…” (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 инсайты
🆕 Технический анализ:
- В чем главное преимущество MQTT перед HTTP для IoT?
- Какие проблемы могут возникнуть при масштабировании?
- 🆕 Как обеспечить безопасность MQTT в продакшене?
- 🆕 Когда MQTT избыточен, а когда необходим?
🆕 Практические выводы:
- Где в реальной жизни встречается pub/sub модель?
- Какие IoT сценарии невозможны без real-time?
- Что было самым неожиданным в MQTT?
📝 Sprint Backlog (Домашнее задание)
🆕 Основное задание: “MQTT System Architect”
Сценарий: Компания заказала IoT решение на MQTT. Выберите один проект:
- Умная ферма - мониторинг полей, теплиц, животных, автоматизация полива
- Smart City система - мониторинг трафика, парковки, освещения, экологии
- Промышленный IoT - мониторинг оборудования, предиктивное обслуживание
- Умный кампус - система для школы/университета
Требования к проекту:
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
🚀 КЛЮЧЕВЫЕ ОСОБЕННОСТИ СПРИНТА:
- ✅ Hands-on протокол - реальная работа с MQTT, а не только теория
- ✅ Real-time focus - акцент на мгновенность IoT коммуникации
- ✅ Системное мышление - проектирование архитектуры, а не отдельных компонентов
- ✅ Безопасность с начала - security как неотъемлемая часть
- ✅ Подготовка к реальности - промышленные практики и масштабирование
- ✅ Практическая интеграция - связь всех предыдущих знаний через MQTT