Урок 6. ADR и Class A: как протокол экономит за узел
Урок 6. ADR и Class A: как протокол экономит за узел
Паспорт урока
| Параметр | Значение |
|---|---|
| Место в модуле | PowerSentry, модуль 3 «Масштаб города», урок 6 из 8 |
| Длительность | 45 мин |
| Возраст | 14–16 |
| Оборудование | sentry_city_sim.py (ползунок SF), монитор порта узла |
| Предварительные знания | Уроки 1–5: бюджет, ёмкость, airtime |
| Предмет | Информатика (протоколы, адаптивные системы) |
Образовательные цели
| № | Цель | Блум | Миллер | Чем доказывается |
|---|---|---|---|---|
| 6.1 | Объяснять Class A как источник экономии | понимать | знает как | Разбор приёмных окон |
| 6.2 | Объяснять механизм ADR и его двойную выгоду | понимать | знает как | Ответ: экономия энергии и канала |
| 6.3 | Обосновывать разделение ответственности узел/сервер | оценивать | знает как | Ответ: почему SF выбирает сервер |
| 6.4 | Обосновывать, почему ADR выключен на стенде | оценивать | знает как | Аргументация предсказуемости отладки |
Сценарий занятия (45 минут)
| Время | Блок | Что делает педагог | Что делают ученики |
|---|---|---|---|
| 0–5 | Retrieval | Мини-квиз по уроку 5 | Пишут, разбор |
| 5–12 | Вопрос | «Узел спит. Как сервер что-то ему передаст?» | Строят гипотезы |
| 12–24 | Class A | Приёмные окна, узел как инициатор | Разбирают схему |
| 24–35 | ADR | Кто выбирает SF и почему не узел | Считают выгоду |
| 35–42 | Практика | Задачи | Решают |
| 42–45 | Итог и ДЗ | Фиксация | Записывают |
Блок 1. Постановка вопроса (5–12 мин)
Провокация
«Наш узел спит 99,99% времени. Радио выключено. Вопрос: как сервер может что-то ему сказать — например, изменить настройки или попросить пискнуть для поиска?»
Сбор гипотез
| Гипотеза | Ответ педагога |
|---|---|
| «Пусть слушает постоянно» | Приёмник потребляет миллиамперы. Считали: срок жизни упадёт до дней |
| «Пусть просыпается по расписанию слушать» | Уже лучше, но нужна синхронизация и лишние пробуждения |
| «Пусть слушает после того, как сам что-то отправил» | Точный ответ. Это и есть Class A |
Формулировка принципа
«Узел — инициатор. Он не ждёт команд, он сам выходит на связь. И только сразу после своей передачи ненадолго открывает “почтовый ящик” — вдруг сервер что-то накопил.»
Блок 2. Class A (12–24 мин)
2.1. Базовый уровень (14 лет)
Через почтовое отделение до востребования.
Ты живёшь в глухой деревне без почтальона. Раз в месяц приезжаешь в город, отправляешь письмо и сразу спрашиваешь: нет ли чего для меня? Если есть — забираешь. Если нет — уезжаешь до следующего раза.
Тебе не нужно сидеть у окна круглосуточно в ожидании почтальона. Ты сам определяешь, когда быть на связи.
2.2. Углублённый уровень (14–16 лет)
Шаг 1. Три класса устройств LoRaWAN.
| Класс | Когда слушает | Расход | Задержка доставки команды |
|---|---|---|---|
| A | только после своей передачи | минимальный | до следующего уплинка |
| B | по расписанию (синхронизация маяками) | средний | секунды |
| C | постоянно | максимальный | мгновенно |
Наш узел — Class A, самый экономный. Class C применяют там, где есть питание от сети (например, уличное освещение).
Шаг 2. Схема приёмных окон.
TX RX1 RX2
┌────┐ ┌────┐ ┌────┐
│узел│ │окно│ │окно│
└────┘ └────┘ └────┘
│ ↑ ↑
│ 1 секунда 2 секунды
└──── передача ────────────────────→ время
затем радио ВЫКЛЮЧЕНО до следующего раза- RX1 открывается через 1 секунду после передачи, на той же частоте;
- RX2 — через 2 секунды, на фиксированной частоте (869,525 МГц) и SF12;
- Если в RX1 что-то принято, RX2 не открывается.
Оба окна коротки — единицы-десятки миллисекунд. Всё остальное время приёмник выключен.
Практическая деталь из журнала отладки проекта. В логах после каждого уплинка появляются строки вида Frequency = 869.525 MHz, SF = 12 — это не передача, а открытие окна RX2. Маркер в отладочном выводе: IQ: U означает передачу узла, IQ: D — приём.
Ученики, увидевшие эти строки, обычно решают, что узел передаёт слишком часто. Полезно показать этот пример: умение правильно прочитать лог — часть инженерной работы.
Шаг 3. Почему это экономно.
Средний ток определяется сном, а не приёмом: приёмник включается на миллисекунды дважды за цикл. Если бы узел слушал постоянно (Class C), ток покоя составил бы миллиамперы, и автономность от батарейки стала бы невозможной.
Шаг 4. Цена решения.
| Плюс | Минус |
|---|---|
| минимальный расход | команда с сервера ждёт следующего уплинка |
| простота узла | при heartbeat раз в 12 часов задержка до 12 часов |
Для датчика протечки это приемлемо: срочные команды ему не нужны. Для устройства, которым надо управлять немедленно, выбирают Class C — и питание от сети.
Блок 3. ADR — адаптивный выбор скорости (24–35 мин)
3.1. Постановка
«У нас есть выбор SF от 7 до 12. Больше SF — дальше добивает, но дольше занимает эфир. Вопрос: кто должен выбирать SF для каждого узла?»
| Вариант | Проблема |
|---|---|
| Узел сам | он не знает, как его слышно на шлюзе; чтобы узнать, нужна обратная связь и вычисления |
| Настроить вручную при установке | тысячи узлов, условия меняются (сезон, новая застройка) |
| Сервер | видит качество всех принятых кадров — у него есть данные |
3.2. Как работает ADR
ADR (Adaptive Data Rate) — механизм, при котором сетевой сервер анализирует качество принимаемых кадров (RSSI, SNR) и подсказывает узлу минимально достаточный SF.
узел передаёт на SF10
→ сервер видит: сигнал очень уверенный, запас большой
→ сервер в ответном окне: «переходи на SF7»
→ узел переходит
→ airtime падает с 289 мс до 41 мс3.3. Двойная выгода
| Что уменьшается | Следствие |
|---|---|
| Время в эфире (airtime) | меньше энергии на кадр → дольше живёт батарея |
| Занятость канала | меньше нагрузка G → больше узлов на шлюз |
Численно (кадр 10 байт):
| SF | Airtime | Энергия на кадр (отн.) | Ёмкость сети (отн.) |
|---|---|---|---|
| SF7 | 41 мс | 1× | 1× |
| SF9 | 144 мс | 3,5× | ÷3,5 |
| SF10 | 289 мс | 7× | ÷7 |
| SF12 | 991 мс | 24× | ÷24 |
3.4. Разделение ответственности
«Обратите внимание на архитектуру: тяжёлую работу — анализ качества связи, принятие решения — делает сервер, у которого есть питание, память и данные по всем узлам. Узел лишь исполняет команду и остаётся простым и экономным.»
Это общий принцип проектирования распределённых систем: сложность выносят туда, где есть ресурсы.
3.5. Почему на стенде ADR выключен
«В нашей прошивке стоит
setADR(false). Почему мы отключили полезный механизм?»
| Стенд | Город |
|---|---|
| Нужна предсказуемость: SF фиксирован, поведение воспроизводимо | Нужна эффективность: пусть сеть оптимизирует |
| Отладка: если SF меняется сам, трудно понять причину проблемы | Тысячи узлов вручную не настроить |
| Занятия короткие, оптимизация не успеет дать эффект | Годы работы, экономия накапливается |
Вывод: отключение ADR — не упрощение, а осознанное решение под задачу отладки. В продакшене его включают.
Блок 4. Практические задачи (35–42 мин)
Уровень A (14 лет)
A1. Почему узел Class A не может получить команду мгновенно?
Ответ
Потому что его приёмник включается только на короткие окна сразу после собственной передачи. Всё остальное время радио выключено ради экономии. Команда ждёт на сервере до следующего выхода узла на связь.
A2. Что делает ADR?
Ответ
Сервер анализирует качество принимаемых от узла кадров и подсказывает ему минимально достаточный SF: близким узлам — быстрый SF7, дальним — дальнобойный SF12. Это экономит энергию узла и освобождает эфир.
A3. Почему выбор SF доверили серверу, а не узлу?
Ответ
Узел не знает, насколько хорошо его слышно на шлюзе, — эта информация есть только у приёмной стороны. Сервер видит качество всех кадров и имеет ресурсы для анализа, а узел остаётся простым и экономным.
Уровень B (14–15 лет)
B1. Узел перешёл с SF12 (airtime 991 мс) на SF7 (41 мс). Во сколько раз сократился расход энергии на кадр?
Решение
Энергия на передачу пропорциональна времени в эфире при том же токе. Экономия почти в 24 раза — существенно даже для узла, передающего дважды в сутки.
B2. Что даёт городу переход тысячи узлов с фиксированного SF10 на индивидуальный ADR?
Разбор
Предположим, при ADR узлы распределятся: половина уйдёт на SF7–SF8 (близкие к шлюзу), часть останется на SF10, немногие в глубоких подвалах перейдут на SF11–SF12.
По энергии: узлы, ушедшие на быстрые SF, тратят в разы меньше на кадр — срок службы этой части флота вырастает кратно.
По ёмкости: суммарный занятый эфир сокращается (средний airtime падает), значит нагрузка G снижается и шлюз выдерживает больше узлов.
Ключевая мысль: обе выгоды получены бесплатно — без замены оборудования, только за счёт работы сервера. Именно поэтому ADR называют «экономией, которую даёт протокол».
B3. Почему на учебном стенде ADR намеренно отключён?
Ответ
Ради предсказуемости отладки. Если SF меняется автоматически, то при возникновении проблемы трудно понять причину: изменилось ли поведение из-за нашей правки или из-за того, что сеть переключила скорость.
На стенде важна воспроизводимость эксперимента, в городе — эффективность. Это разные задачи, и решения для них разные.
Уровень C (15–16 лет)
C1. Предложите, как измерить эффект ADR на реальной сети. Какие метрики собирать?
Разбор
План измерения:
- Базовый период (2–4 недели): ADR выключен, все узлы на фиксированном SF10. Фиксировать: распределение RSSI/SNR, PDR, число кадров, расчётный airtime.
- Экспериментальный период: ADR включён. Те же метрики.
- Сравнение:
| Метрика | Что покажет |
|---|---|
| Распределение узлов по SF | сколько узлов смогли ускориться |
| Средний airtime кадра | прямой индикатор экономии эфира |
| Суммарная нагрузка G | выигрыш по ёмкости |
| PDR | не ухудшилось ли качество |
| Расчётный расход энергии | выигрыш по автономности |
Важная деталь корректности: сравнивать надо периоды сопоставимой длительности и погодных условий (влажность и листва влияют на распространение). Иначе эффект ADR смешается с сезонными изменениями.
Это готовая методическая часть конкурсной работы.
C2. ADR может ошибиться: понизить SF узлу, у которого условия временно улучшились. Что произойдёт и как протокол это компенсирует?
Разбор
Сценарий: узел стоит в подвале, но дверь была открыта — сигнал прошёл хорошо. Сервер понизил SF. Дверь закрыли — сигнал стал слабым, кадры перестают доходить.
Компенсация в протоколе: узел ведёт счётчик неподтверждённых передач. Если после определённого их числа нет никакой реакции сети, узел самостоятельно повышает SF (постепенно возвращается к более надёжным настройкам) — это часть механизма ADR со стороны устройства.
Обобщение: любая адаптивная система должна иметь механизм отката при ухудшении условий, иначе оптимизация превращается в потерю связи. Это тот же принцип, что заморозка базы в RFCurtain: адаптация без страховки опасна.
C3. Сравните разделение ответственности в LoRaWAN и в системе, где узел сам выбирает SF. Какие ресурсы требуются в каждом случае?
Разбор
| Аспект | Решение на сервере (LoRaWAN) | Решение на узле |
|---|---|---|
| Данные о качестве | есть (сервер принимает кадры) | нужна обратная связь = даунлинки |
| Вычисления | на мощном сервере | на микроконтроллере |
| Энергия на решение | не тратится узлом | приём + расчёт = расход |
| Взгляд на сеть целиком | есть (учитывает соседей) | нет |
| Сложность узла | минимальная | выше |
Вывод: решение на сервере выигрывает по всем пунктам для этой задачи. Это не универсальное правило — в сетях без централизации (например, ячеистых) решение принимают узлы. Архитектура определяется наличием центра и стоимостью связи с ним.
Ответы на вопросы, которые прозвучат
| Вопрос ученика | Как отвечать |
|---|---|
| «Зачем два приёмных окна, а не одно?» | RX2 на фиксированной частоте и SF12 — резервное, максимально надёжное. Если RX1 не сработал (например, сеть заняла тот канал), остаётся второй шанс |
| «Что если сервер вообще ничего не хочет сказать?» | Окна открываются и закрываются пустыми — это стоит считанные миллисекунды. Дешевле, чем механизм согласования |
| «Строки про 869.525 в логе — это передача?» | Нет, это открытие окна RX2. Маркер IQ: D означает приём. Классическая ловушка при чтении логов |
| «Может ли ADR сделать хуже?» | Да, если условия изменятся после понижения SF. Поэтому узел умеет сам возвращаться к надёжным настройкам при потере связи |
| «Class C совсем не годится для батарейки?» | Практически нет: постоянно включённый приёмник — миллиамперы. Class C применяют там, где есть сетевое питание |
Раздаточный лист (для печати)
Урок 6. ADR и Class A
Три класса LoRaWAN:
Класс Когда слушает Расход Задержка команды A B по расписанию средний секунды C Схема Class A — подпишите:
TX RX1 RX2 ┌────┐ ┌────┐ ┌────┐ └────┘ └────┘ └────┘ │ ____ с ____ с └── затем радио ______________ до следующего разаAirtime и цена SF (кадр 10 байт):
SF Airtime Во сколько раз дороже SF7 SF7 41 мс 1× SF9 144 мс SF10 289 мс SF12 991 мс ADR — двойная выгода:
Меньше SF → короче эфир → 1) ________________ 2) ________________
Разделение ответственности:
Кто Что делает Почему именно он Сервер Узел Почему на нашем стенде ADR выключен?
____________________________________________________
Домашнее задание
Обязательная часть
Врайтап по рубрике А. Обязательный пункт: объясните, почему один и тот же переход на меньший SF улучшает сразу две метрики.
Уровень A
Найти три примера систем, где «клиент сам выходит на связь», а не ждёт постоянно (проверка почты, обновления приложений). Описать, чем это выгодно.
Уровень B
Посчитать, во сколько раз изменится расход энергии и ёмкость сети при переходе флота узлов с SF10 на SF8 (airtime SF8 ≈ 72 мс).
Ответ для педагога
289 / 72 ≈ 4 раза — и по энергии на кадр, и по занятости эфира. Ёмкость сети вырастет примерно вчетверо, расход на передачу уменьшится вчетверо.
Полезное замечание: выигрыш нелинейно зависит от шага SF — каждый шаг примерно удваивает airtime, поэтому два шага дают четырёхкратный эффект.
Уровень C
Спроектировать логику, по которой узел самостоятельно возвращается к надёжному SF при потере связи. Какие условия и сколько попыток?
Ориентир для педагога
Разумная логика: вести счётчик переданных кадров без единого ответа от сети. После N кадров (например, 32) повысить SF на шаг; повторять до возврата к максимальному SF; при получении ответа — сбросить счётчик.
Важные детали, которые должен учесть ученик: N не должно быть слишком малым (иначе узел будет дёргаться при нормальных редких потерях) и слишком большим (иначе долго останется без связи). Также нужно ограничение сверху — дойдя до SF12, дальше повышать некуда, и надо просто продолжать попытки.
Это фактически описание реального механизма ADR back-off в спецификации LoRaWAN.
Итог урока: что записать в журнал
Вывод урока 6
- Class A — узел является инициатором: передаёт, затем открывает два коротких приёмных окна (RX1 через 1 с, RX2 через 2 с), после чего радио выключено.
- Средний ток определяется сном, а не приёмом — это делает автономность возможной.
- Цена Class A: команда с сервера ждёт следующего уплинка.
- ADR — сервер по качеству кадров подсказывает узлу минимально достаточный SF.
- Меньший SF даёт двойную выгоду: меньше энергии на кадр и меньше занятого канала (SF7 против SF12 — в 24 раза).
- Тяжёлую работу делает сервер, у которого есть данные и ресурсы; узел остаётся простым — сложность выносят туда, где есть ресурсы.
- На стенде ADR выключен ради предсказуемости отладки, в городе включён ради эффективности.
Связь с курсом
| Что родилось на этом уроке | Где станет инструментом |
|---|---|
| Class A, приёмные окна | Урок 8 (защита проекта) |
| ADR, компромисс SF | WarWalk урок 2 (дальность против ёмкости) |
| Разделение ответственности | Проектирование любых распределённых систем |
| Механизм отката адаптации | RFCurtain (заморозка базы) |
Чек-лист педагога перед уроком
- Симулятор с ползунком SF проверен
- Готов лог с окнами RX2 (строки про 869.525) для разбора ловушки
- Проверены значения airtime: SF7 = 41 мс, SF10 = 289 мс, SF12 = 991 мс
- Раздаточный лист распечатан