- поле firmware_version бралось из FIRMWARE_VERSION, куда при сборке передаётся
только база upstream (v1.18.0), поэтому сервис видел ровно 1.18.0
- строка собирается в коде: MQTT_FIRMWARE_VERSION = FIRMWARE_VERSION "-posadmesh-meshcoretel",
публикуется v1.18.0-posadmesh-meshcoretel; одинаково для локальной сборки и CI
- исправлены оба пейлоада: online (со статистикой) и offline
- запасное значение FIRMWARE_VERSION в MQTTUplink.cpp приведено к v1.18.0
- README: запись в журнале изменений
- device-setup.md: раздел про ADC дополнен (старт от заводского значения платы,
формат x.xxx, коррекция на всех платах, пометка base), добавлен раздел про
экран загрузки, обновлены таблица меню и макеты экранов
- README: записи в журнале изменений
- release-notes.yml: релиз 2026.10.1 для треков repeater-mqtt,
repeater-mqtt-espnow и repeater-mqtt-bridge (база upstream v1.18.0)
- ответ CLI показывался строкой поверх экрана и сливался с содержимым, особенно
в верхней части (например OK - reboot to apply на экране частоты)
- теперь это модальное окно: рамка, свой фон, перенос текста и кнопка OK;
закрывается коротким нажатием, пока открыто — экран под ним не меняется
- окно показывается сразу (сброс таймера отрисовки), при закрытии экран
перерисовывается немедленно
- setToast/renderToast заменены на showPopup/renderPopup
- документация: posadmesh-docs/device-setup.md (раздел «Всплывающие сообщения»
и макет экрана), README — журнал изменений
Проверено сборкой: heltec_v4_repeater_mqtt, Meshadventurer_sx1262_repeater_mqtt,
Generic_E22_sx1262_repeater_mqtt (без дисплея)
- applyRadio() отправлял команду всегда, в том числе при выходе из меню, если
в этой сессии не открывали ни один радиопункт: рабочая копия (_radio_*) оставалась
нулевой, устройство отвечало Error, invalid radio params
- добавлен признак _radio_dirty: команда уходит только после реальной правки
частоты, полосы, SF или CR; при успешном применении признак сбрасывается
- перед отправкой значения перечитываются из настроек узла (loadRadio), а при
каждом входе в мастер рабочая копия обновляется (_radio_loaded = false)
- README: запись в журнале изменений
Проверено сборкой: heltec_v4_repeater_mqtt, Meshadventurer_sx1262_repeater_mqtt,
Generic_E22_sx1262_repeater_mqtt (без дисплея)
- UITask: новые пункты меню Battery и ADC
Battery — напряжение, процент заряда, полоска и текущий множитель ADC; короткое
нажатие показывает «сырое» значение АЦП в милливольтах, длинное/двойное — выход в меню
ADC — поразрядная правка множителя в формате x.xx (как полоса), под цифрами
показывается измеренное напряжение, поэтому калибровать можно прямо на экране
- процент заряда берётся у платы (getBatteryPercent), а если плата его не считает —
линейно по getBatteryMinMilliVolts()/getBatteryMaxMilliVolts()
- множитель применяется командой set adc.multiplier, значение 0.00 возвращает
заводской расчёт платы; проверка и сохранение остаются в CommonCLI
- поразрядный редактор SCREEN_DIGITS теперь обслуживает и полосу, и ADC
- документация: posadmesh-docs/device-setup.md (таблица меню, раздел «Батарея и
калибровка ADC», два новых макета экранов), README — журнал изменений
Проверено сборкой: heltec_v4_repeater_mqtt, Meshadventurer_sx1262_repeater_mqtt,
Generic_E22_sx1262_repeater_mqtt (без дисплея — код исключается препроцессором)
- страница https://meshinfo.ru/flasher/: два набора прошивок отдельными списками
(MeshCore — наш форк, релиз shade/MeshCore v0.1.0; PosadMesh — три трека MQTT)
- запись ESP32 через Web Serial и esptool-js 0.5.4 (лежит локально, без CDN):
-merged.bin пишется по адресу 0x0, обычный .bin — по 0x10000
- галочка полного стирания флеша и отдельная кнопка только стирания;
для nRF52 (.uf2/.zip) — скачивание и инструкция по UF2-диску или DFU
- index.json собирается скриптом posadmesh-tools/build-flasher-index.py из релизов Gitea
(270 файлов, 57 плат), страница не обращается к API из браузера
- файлы прошивок отдаются nginx-проксированием релизов Gitea: один origin, без CORS
- README: запись в журнале изменений; posadmesh-docs/releases.md: раздел про прошивку из браузера
- release-notes.yml: в записи 2026.10.0 добавлен пункт про исправление сборки ESP-NOW
на ESP32-C6 (IDF 5)
- README: отмечены опубликованные релизы repeater-mqtt*, espnow и bridge
- ESPNowBridge::recv_cb адаптирован под ESP-IDF 5: первый параметр — esp_now_recv_info_t,
длина имеет тип int; старый вариант оставлен для IDF 4 через ESP_IDF_VERSION
- это починило сборку трёх целей на ESP32-C6: LilyGo_Tlora_C6_repeater_mqtt_espnow,
M5Stack_Unit_C6L_repeater_mqtt_espnow, WHY2025_badge_repeater_mqtt_espnow
- README: запись в журнале изменений
- экраны Frequency и Bandwidth: единица измерения в конце строки значения
(868.731 MHz, 062.50 kHz), внизу отдельный пункт Save & exit
- после правки цифр пользователь переходит на Save & exit и удерживает кнопку:
значения применяются, экран возвращается в предыдущее меню
- документация: страница posadmesh-docs/device-setup.md дополнена схемой управления
и изображениями всех экранов (12 картинок в posadmesh-docs/_assets/wizard/)
- вики Gitea: страницы Home и Device-Setup с теми же иллюстрациями
- README: ссылка на вики, схема управления и запись в журнале изменений
- радиопресет заменён на четыре отдельных пункта меню: Frequency, Bandwidth, CR, SF
- частота: целые МГц шагом +-1, кГц правятся по разрядам (принцип как у координат)
- полоса: поразрядный ввод значения с точкой (формат 062.50)
- CR и SF: шаг +-1 с ограничением 5-8 и 5-12
- применение любого из четырёх пунктов отправляет set radio <частота>,<полоса>,<sf>,<cr>
целиком, остальные значения сохраняются; внизу меню остаётся Save & exit
- документация device-setup.md обновлена, README: раздел и журнал изменений
- проверено сборкой: heltec_v4_repeater_mqtt, Meshadventurer_sx1262_repeater_mqtt,
Generic_E22_sx1262_repeater_mqtt (без дисплея)
- добавлен локальный мастер настройки репитера: examples/simple_repeater/UITask.*
(меню на кнопке, редактор координат, применение значений через CommonCLI)
- MyMesh: публичный доступ к CommonCLI для UI (getCLI), main.cpp передаёт его в UITask
- мастер работает на любой цели с дисплеем и кнопкой и исключается препроцессором
там, где их нет; WiFi-код теперь под #if defined(ESP32)
- новая страница документации posadmesh-docs/device-setup.md, ссылки в index.md и mkdocs.yml
- README: раздел «Настройка с дисплея и кнопки» и запись в журнале изменений
- проверено сборкой: heltec_v4_repeater_mqtt, Meshadventurer_sx1262_repeater_mqtt,
Generic_E22_sx1262_repeater_mqtt (без дисплея), RAK_3112_repeater_mqtt
- добавлен ручной workflow Gitea Actions (.gitea/workflows/build-mqtt-firmwares.yml):
сборка MQTT-прошивок на сервере и публикация релиза
- добавлен posadmesh-tools/publish-gitea-release.sh для выгрузки собранных файлов
в релиз Gitea (идемпотентно, фильтр по треку)
- README: происхождение проекта переписано (форк EastMesh, доработка энтузиастов
из Сергиева Посада, ориентация на meshcoretel.ru), добавлены раздел
«Отличия от upstream MeshCore» и журнал «Изменения в проекте»
- убраны упоминания Австралии, ссылки на eastmesh.au и региональные материалы;
руководство по прошивке переведено на файлы релизов и esptool.py
- posadmesh-build.sh: вывод PlatformIO очищается от \r — на Windows групповые
команды сборки не находили ни одной цели; companion-команды удалены,
добавлены build-mqtt-firmwares и list-mqtt
- release-notes.yml: треки repeater-mqtt*, запись 2026.10.0 дополнена удалением
companion и исправлением сборки, companion-wifi помечен как снятый с выпуска
- AGENTS.md: правило дописывать изменения в README
- .gitignore: .pio-home
De-emphasize the observer-eastmesh-bridge-mqtt feature in public-facing
docs (the community prefers not to surface another MQTT-backed mesh):
- eastmesh-docs: drop the track from index/releases/boards track lists,
the custom-cli "MQTT Bridge Settings" section, and the web-panel peer
broker fields; keep only a vague mention in local-builds.md.
- release-notes.yml: remove the track from the list and drop the
2026.7.0 observer-eastmesh-bridge-mqtt entry.
- README: remove the "bidirectional MQTT mesh bridge" bullet and add the
missing repeater-bridge-espnow track to "What This Repo Adds".
The feature, build envs, and CI are unchanged; this is visibility only.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
MQTT status payload:
- Add packets_sent and packets_received (cumulative radio TX/RX totals)
to the status `stats` object, aligning with the Waev/MeshMapper schema.
Variants (variants/eastmesh_mqtt -> variants/eastmesh):
- Rename the variant folder to variants/eastmesh.
- Add the remaining *_repeater_observer_mqtt_bridge envs (2 -> 36), one
per observer board.
- Regroup envs by board (observer -> espnow -> mqtt_bridge) and add
per-vendor section banners.
Docs & release notes:
- Update folder path references in README, AGENTS, and boards docs.
- Add observer-eastmesh and observer-eastmesh-bridge-espnow 2026.6.6
release notes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add Waev (mqtt.waev.app) as a curated MQTT broker, selectable from the
web-panel Primary/Secondary dropdowns and the CLI.
- Broker spec on bit 0x20, audience mqtt.waev.app, Google Trust Services
WE1 CA (matches Waev's cert chain); widen broker mask/count to 0x3F/6
- Per-broker JWT lifetime via BrokerSpec.token_ttl_secs: Waev enforces a
1-hour max token TTL and rejects the 6h default with MQTT CONNACK 5,
so it mints a 3600s token while other brokers keep the 6h default
- CLI get/set mqtt.waev, web-panel dropdown entry + hidden toggle, docs
- Log token TTL in the "token ready" line for broker auth debugging
fix(web): make Custom MQTT settings full width when Custom is selected
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This is a key difference compared to other systems and I see people
asking this a lot. It is mentioned in the FAQ but let's make it more
prominent in the README.