1. СТРАНИЦА WIFI
- Captive-портал: если radio не знает сеть — поднимает свою точку
192.168.4.1 (yoRadioAP / 12345987), там страница настройки WiFi.
- Multi-WiFi: до 5 сохранённых сетей (wifi.csv), перебор при старте.
- FIX_IP: матрица/экран показывают РЕАЛЬНЫЙ IP (не 0.0.0.0) —
_stationIP захватывается до WiFi.config().
- FEAT_DIAG выключен (запись SPIFFS НЕ thread-safe → краш при
перезагрузке страницы — это была причина самопроизвольного ребута).
- FEAT_BIGBUF выключен (64КБ PSRAM-буфер ломал веб+радио).
- Принудительный DNS 8.8.8.8 убран — используется DNS роутера из DHCP.
Откат базы: нет (это корень, откатываются отдельные фичи ниже).
2. ПЛЕЙЛИСТ-РЕДАКТОР
У кнопки воспроизведения на странице редактирования плейлиста
появилась подсказка, кнопка перестала «залипать» между usb/web,
размер кнопки уменьшен.
3. БУДИЛЬНИК (FEAT_ALARM)
Одиночный будильник: дни недели + время + источник звука
(плейлист-станция / URL-ссылка / SD-карта / локальный MP3).
4. ВЕБ-КЕШ ОТКЛЮЧЁН (no-cache)
Раньше статика кэшировалась на год → после uploadfs браузер показывал
старое до жёсткого рефреша. Теперь изменения в вебе видны сразу.
Откат: git revert 3a53b01.
5. КНОПКА PLAY СПИТ ZZZZZZ (когда радио остановлено) + КРАСНАЯ ПРИ ИГРЕ
Когда радио остановлено — на кнопке Play бегущий поток букв Z
(крупнее, с зазором, диагональный уход вверх). Когда играет —
кнопка красная. Убран автозапуск при включении питания: после
ребута радио не играет само — нужно нажать Play.
6. ИЗБРАННОЕ: выпадающий список через ★ + подсказка расписания
Звёздочка-кнопка #favmode вверху панели (красная ★ если есть избранное,
серая ☆ если пусто). Клик открывает прокручиваемый выпадающий список
избранного (закрывается повторным кликом или кликом мимо). Клик по
станции в списке — играет и закрывает. Звёздочки у станций отделены
от названий. У галочки «Включить расписание» — всплывающая подсказка.
7. САЛЮТ ПРИ БУДИЛЬНИКЕ НА МАТРИЦЕ + СДВИГ ЗВЕЗДЫ
При срабатывании будильника на матрице ~90с анимация салюта
(искры вверх + взрывы 12 лучами, яркость максимальна, быстрее).
Параметры в bender.cpp (ALARM_ANIM_MS, fw_tmr, fw_phase).
Звезда #favmode подогнана по позиции (район left:26px).
8. ПОГОДА НА «РОТ» (3 левые матрицы) — FEAT_WEATHER_MATRIX (основа)
ПОЛЕ «ГОРОД» ВМЕСТО КООРДИНАТ + ПРИМЕНИТЬ КРАСНЕЕТ
9. ПОГОДА на матрицах: БОЛЬШИЕ ИКОНКИ + БЕГУЩАЯ СТРОКА ТЕМПЕРАТУРЫ
Только 3 левые матрицы (рот). Большие иконки
(солнце с лучами, туча, дождь, молния, снег, туман). Бегущая строка
«+19» / «-05» въезжает справа через весь рот (24 кол., 130мс/колонку).
Цикл: иконка 5с → строка → пауза 2с → снова. Отрисовка вынесена
из-под matrix_tmr (иначе строка ползла бы медленно).
10. ЧЕСТНЫЙ СТОП ПРИ СМЕРТИ ПОТОКА (без авто-переключения)
Откат агрессивного авто-резюма: только честный stop() в Player::loop
(см. п.31). Без самопереключения станций.
11. ЯНДЕКС АЛИСА ЧЕРЕЗ MQTT DEALGATE (FEAT_MQTT_ALICE) — ОСНОВА
Радио управляется голосом через навык Dealgate (без Home Assistant).
Схема: Алиса → навык Dealgate → mqtt.dealgate.ru:1883 → топик
bender/cmnd → плата (подписка) → команда. Конфиг SPIFFS
/data/mqtt_alice.txt (en/host/port/user/pass/topic), PubSubClient
clientID «bender», KeepAlive 30. Команды: turnon/turnoff (вкл/выкл).
АЛИСА: ПОДДЕРЖКА «VOL<число>» (громкость голосом)
АЛИСА: ВЕБ-ТУМБЛЕР ВКЛ/ВЫКЛ НА /SETTINGS
АЛИСА: ПЕРЕКЛЮЧЕНИЕ СТАНЦИЙ (каналы) + БУДИЛЬНИК голосом
12. ПРИВЕТСТВИЕ ПРИ ПОДКЛЮЧЕНИИ К СЕТИ (FEAT_GREETING) — Bender.mp3
Как только ESP32 подключился к WiFi — играет /www/Bender.mp3
(приветствие), затем тишина (радио НЕ стартует само).
Сначала громкость приветствия была 254 (52a5112) → юзер сказал
«слишком громко» → стала 100 (1b3577a), после окончания файла
сохраняется обратно. Файл: data/www/Bender.mp3 в SPIFFS.
13. ЗАЩИТА УСИЛИТЕЛЯ MAX98357 (потолок громкости + фейд-ин)
- MAX_VOLUME=200 — потолок громкости; зажат во всех путях:
volToI2S(), stepVol(), setVol(), PR_VOL(), _loadVol();
- убран прямой ввод config.store.volume = v в netserver (/?vol=),
раньше мог прописать 254 в состояние минуя потолок;
- фейд-ин ~300мс при старте/смене потока (шаг +10 каждые 15мс),
сброс в _stop.
БЫТОВОЙ СОВЕТ: повседневно 120-160, для полной безопасности 180.
14. WIFI: МАКСИМАЛЬНАЯ МОЩНОСТЬ ПЕРЕДАТЧИКА (TxPower 19.5dBm) — ЭКСПЕРИМЕНТ
По совету из интернета (desktop\вифи.txt): рекомендовалось
power_save_mode:none + WiFi.setTxPower(WIFI_POWER_19_5dBm).
setSleep(false) у нас УЖЕ был (network.cpp:301, отключён
энергосберегающий режим WiFi с базовой копии).
Добавлено: WiFi.setTxPower(WIFI_POWER_19_5dBm) в setWifiParams()
(network.cpp:302) — явный максимум мощности передачи, стабильнее
ACK/keepalive при слабом сигнале. Прошито на COM3.
Замечание: затыки по большей части от помех на ПРИЁМЕ (принтер
на 2.4 ГГц, далёкий роутер), TxPower лечит исходящий канал — эффект
может быть малым, но вреда нет. Проверить на слух (затыки/паузы).