feat: manual Gitea build workflow, release publishing, README and docs update
- добавлен ручной 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
This commit is contained in:
+17
-102
@@ -16,7 +16,7 @@ set mqtt.iata <code>
|
||||
get mqtt.status
|
||||
```
|
||||
|
||||
Для обсерверов с локальной веб-панелью также полезны:
|
||||
Для MQTT-репитеров с локальной веб-панелью также полезны:
|
||||
|
||||
```text
|
||||
set web on
|
||||
@@ -24,11 +24,11 @@ get web.status
|
||||
set web off
|
||||
```
|
||||
|
||||
Используйте `set web on` при настройке или диагностике, а затем `set web off`, когда стационарному обсерверу нужен максимальный запас памяти.
|
||||
Используйте `set web on` при настройке или диагностике, а затем `set web off`, когда стационарному MQTT-репитеру нужен максимальный запас памяти.
|
||||
|
||||
## Команды обсервера
|
||||
## Команды MQTT-репитера
|
||||
|
||||
Эти команды доступны в таргетах прошивки `*_repeater_observer`.
|
||||
Эти команды доступны в таргетах прошивки `*_repeater_mqtt`.
|
||||
|
||||
Команды `get` без аргументов нужно вводить точно так, как показано.
|
||||
|
||||
@@ -80,7 +80,7 @@ set web off
|
||||
|
||||
Примечания:
|
||||
|
||||
- новые установки обсерверов по умолчанию задают для `mqtt.iata` значение `UNSET`
|
||||
- новые установки MQTT-репитеров по умолчанию задают для `mqtt.iata` значение `UNSET`
|
||||
- одновременно можно включить максимум два MQTT-брокера
|
||||
- если `mqtt.iata` имеет значение `UNSET`, включённые MQTT-брокеры не подключатся
|
||||
- пользовательский MQTT использует настроенные имя пользователя и пароль, а не аутентификацию JWT
|
||||
@@ -94,7 +94,7 @@ set web off
|
||||
|
||||
- `mqtt.meshcoretel.ru`
|
||||
|
||||
### Настройки Wi-Fi для обсерверов
|
||||
### Настройки Wi-Fi для MQTT-репитеров
|
||||
|
||||
- `get wifi.status`: показывает SSID, состояние подключения, необработанный код статуса Wi-Fi, IP, канал и уровень сигнала при подключении, а также состояние шлюза (`gw:ok|lost`) и счётчик переподключений сторожевым таймером (`wd:<n>`).
|
||||
- `get wifi.ssid`: показывает настроенный SSID Wi-Fi.
|
||||
@@ -104,9 +104,9 @@ set web off
|
||||
- `set wifi.powersaving none|min|max`: задаёт режим энергосбережения Wi-Fi.
|
||||
- `wifi reconnect`: разрывает текущее соединение и переподключается с полным сканированием каналов. Используйте, когда узел сообщает о подключении, но недоступен по сети.
|
||||
|
||||
Обсерверы также используют сторожевой таймер связи: пока Wi-Fi сообщает о подключении, узел каждые 30 секунд проверяет свой шлюз через ARP. Если шлюз молчит 3 минуты (например, точка доступа, которая продолжает рассылать beacon после потери проводного аплинка), узел сам принудительно выполняет полное переподключение, увеличивая интервал между попытками вплоть до 48 минут, пока сбой не прекратится. `wd:<n>` в `get wifi.status` считает такие принудительные переподключения с момента загрузки.
|
||||
MQTT-репитеры также используют сторожевой таймер связи: пока Wi-Fi сообщает о подключении, узел каждые 30 секунд проверяет свой шлюз через ARP. Если шлюз молчит 3 минуты (например, точка доступа, которая продолжает рассылать beacon после потери проводного аплинка), узел сам принудительно выполняет полное переподключение, увеличивая интервал между попытками вплоть до 48 минут, пока сбой не прекратится. `wd:<n>` в `get wifi.status` считает такие принудительные переподключения с момента загрузки.
|
||||
|
||||
### Настройки NTP для обсерверов
|
||||
### Настройки NTP для MQTT-репитеров
|
||||
|
||||
- `get ntp.server1`: показывает основной NTP-сервер.
|
||||
- `get ntp.server2`: показывает дополнительный NTP-сервер.
|
||||
@@ -117,20 +117,20 @@ set web off
|
||||
|
||||
Серверы по умолчанию: `au.pool.ntp.org`, `time.google.com` и `time.cloudflare.com`.
|
||||
|
||||
### Настройки моста ESP-NOW для сборок Observer ESP-NOW
|
||||
### Настройки моста ESP-NOW для сборок MQTT ESP-NOW
|
||||
|
||||
Эти команды доступны в таргетах прошивки `*_repeater_observer_espnow`, использующих транспорт моста ESP-NOW.
|
||||
Эти команды доступны в таргетах прошивки `*_repeater_mqtt_espnow`, использующих транспорт моста ESP-NOW.
|
||||
|
||||
Команды моста предназначены для локального использования моста ESP-NOW между близко расположенными репитерами, например для связи репитеров в `Australia (Narrow)` и `Australia (Mid)`. Это не элементы управления MQTT-over-WAN, VPN или интернет-мостом.
|
||||
Команды моста предназначены для локального использования моста ESP-NOW между близко расположенными репитерами, работающими на разных радиоконфигурациях MeshCore — например, с разной полосой пропускания и SF. Это не элементы управления MQTT-over-WAN, VPN или интернет-мостом.
|
||||
|
||||
- `get bridge.channel`: показывает настроенный канал моста ESP-NOW.
|
||||
- `set bridge.channel <channel>`: задаёт канал моста ESP-NOW и перезапускает мост. Используйте значение от `1` до `14`.
|
||||
- `get bridge.secret`: показывает настроенный секрет моста ESP-NOW.
|
||||
- `set bridge.secret <secret>`: задаёт общий секрет моста ESP-NOW и перезапускает мост.
|
||||
|
||||
После выполнения `set bridge.channel` ожидайте кратковременного разрыва соединения моста и веб-панели, пока радио перезапускается. В текущих сборках observer ESP-NOW это может выглядеть как перезагрузка платы.
|
||||
После выполнения `set bridge.channel` ожидайте кратковременного разрыва соединения моста и веб-панели, пока радио перезапускается. В текущих сборках MQTT ESP-NOW это может выглядеть как перезагрузка платы.
|
||||
|
||||
В сборках `*_repeater_observer_espnow`, подключённых к Wi-Fi, канал моста ESP-NOW должен совпадать с активным каналом Wi-Fi 2,4 ГГц:
|
||||
В сборках `*_repeater_mqtt_espnow`, подключённых к Wi-Fi, канал моста ESP-NOW должен совпадать с активным каналом Wi-Fi 2,4 ГГц:
|
||||
|
||||
1. Выполните `get wifi.status`.
|
||||
2. Считайте значение `channel:<n>` из статуса подключённого Wi-Fi.
|
||||
@@ -177,11 +177,11 @@ OK
|
||||
- `get flood.max.advert`: показывает лимит хопов для flood-пакетов advert.
|
||||
- `set flood.max.advert <0-64>`: задаёт лимит хопов для flood-пакетов advert.
|
||||
|
||||
В сборках обсерверов `flood.max.unscoped` по умолчанию равен `64`. Меньшие значения могут ограничить, как далеко повторяется неограниченный flood-трафик, тогда как пересылка scoped/region flood остаётся под управлением `flood.max`.
|
||||
В сборках MQTT-репитеров `flood.max.unscoped` по умолчанию равен `64`. Меньшие значения могут ограничить, как далеко повторяется неограниченный flood-трафик, тогда как пересылка scoped/region flood остаётся под управлением `flood.max`.
|
||||
|
||||
### Отчётность о батарее платы
|
||||
|
||||
- В сборках обсерверов фоновый опрос батареи, используемый для истории MQTT/статуса, ограничен примерно одним разом в минуту. Явные запросы статуса и телеметрии по-прежнему обновляют показание сразу.
|
||||
- В сборках MQTT-репитеров фоновый опрос батареи, используемый для истории MQTT/статуса, ограничен примерно одним разом в минуту. Явные запросы статуса и телеметрии по-прежнему обновляют показание сразу.
|
||||
|
||||
### Управление вентилятором T-Beam 1W
|
||||
|
||||
@@ -217,96 +217,11 @@ OK
|
||||
- панель по-прежнему использует для доступа пароль администратора репитера
|
||||
- команды выполняются с той же осторожностью, как если бы вы вводили их напрямую в CLI репитера
|
||||
- это предназначено для локального административного использования в доверенной сети
|
||||
- `start ota` освобождает локальный слушатель HTTP-редиректа на порту `80`, чтобы слушатель OTA HTTP мог занять его, не останавливая остальные службы репитера, независимо от того, выполнена ли команда из веб-панели, последовательного CLI или удалённого сеанса CLI companion/приложения
|
||||
- `start ota` освобождает локальный слушатель HTTP-редиректа на порту `80`, чтобы слушатель OTA HTTP мог занять его, не останавливая остальные службы репитера, независимо от того, выполнена ли команда из веб-панели, последовательного CLI или удалённого сеанса CLI
|
||||
- если старый слушатель редиректа не освободил порт `80` полностью, слушатель OTA повторяет попытки примерно до 30 секунд, после чего сдаётся
|
||||
- кнопка `Purge SD` в веб-интерфейсе выполняет `purge sd` после подтверждения в браузере
|
||||
- `start ota` использует существующий Wi-Fi-адрес репитера, если он уже подключён, или запускает точку доступа `MeshCore-OTA`, если Wi-Fi не подключён
|
||||
- ярлык Regions в `/app` последовательно выполняет существующие команды регионов MeshCore: `region put au`, `region put au-STATE`, `region allowf au`, `region allowf au-STATE`, затем `region save`
|
||||
|
||||
## Команды восстановления Wi-Fi для companion
|
||||
|
||||
Эти команды доступны в последовательном CLI восстановления для сборок `*_companion_radio_wifi`.
|
||||
|
||||
Чтобы войти в `CLI Rescue`:
|
||||
|
||||
- откройте последовательный монитор на скорости `115200` бод
|
||||
- перезагрузите устройство
|
||||
- удерживайте кнопку пользователя в течение первых 8 секунд после загрузки
|
||||
- дождитесь `========= CLI Rescue =========`
|
||||
|
||||
- `get wifi.status`: показывает настроенный SSID, состояние подключения, необработанный код статуса Wi-Fi, IP, канал и уровень сигнала при подключении.
|
||||
- `get wifi.ssid`: показывает настроенный SSID Wi-Fi.
|
||||
- `get wifi.powersaving`: показывает текущий режим энергосбережения Wi-Fi.
|
||||
- `set wifi.ssid <ssid>`: сохраняет SSID Wi-Fi и сразу повторяет подключение.
|
||||
- `set wifi.pwd <password>`: сохраняет пароль Wi-Fi и сразу повторяет подключение.
|
||||
- `set wifi.powersaving none|min|max`: изменяет режим энергосбережения Wi-Fi.
|
||||
|
||||
Сборки Companion Wi-Fi также по-прежнему поддерживают существующие команды восстановления, такие как:
|
||||
|
||||
- `set pin <6-digit-pin>`
|
||||
- `rebuild`
|
||||
- `erase`
|
||||
- `ls ...`
|
||||
- `cat ...`
|
||||
- `rm ...`
|
||||
- `reboot`
|
||||
|
||||
### Точка доступа для восстановления
|
||||
|
||||
Когда у устройства companion Wi-Fi не настроены учётные данные Wi-Fi или оно не может подключиться
|
||||
к своей настроенной сети в течение 60 секунд, оно поднимает собственную
|
||||
точку доступа `EastMesh-WiFi`, чтобы его можно было восстановить без последовательного кабеля.
|
||||
|
||||
**Пароль точки доступа — это pin устройства, дополненный нулями до 8 цифр** (WPA2 требует
|
||||
не менее 8 символов). Pin подчиняется тем же правилам, что и pin сопряжения Bluetooth в
|
||||
сборках BLE:
|
||||
|
||||
| Устройство | Активный pin | Пароль `EastMesh-WiFi` |
|
||||
| --------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------- |
|
||||
| Есть экран, pin не задан | случайный 6-значный pin при каждой загрузке, отображается как `Pin:NNNNNN` на главном экране | `00NNNNNN` — считайте его с экрана |
|
||||
| Нет экрана, pin не задан | `123456` (по умолчанию) | `00123456` |
|
||||
| Pin задан через `set pin <pin>` | ваш настроенный pin (любое устройство) | ваш pin, дополненный нулями до 8 цифр, например pin `4242` → `00004242` |
|
||||
|
||||
Примечания по pin:
|
||||
|
||||
- на устройствах с экраном pin случаен только до тех пор, пока pin не сохранён; выполните
|
||||
`set pin <pin>` для фиксированного пароля (вступает в силу при следующей загрузке)
|
||||
- устройствам без экрана в общедоступных местах всегда следует задавать собственный pin — `00123456` —
|
||||
это документированное значение по умолчанию, поэтому относитесь к нему как к паролю роутера по умолчанию
|
||||
|
||||
Шаги восстановления:
|
||||
|
||||
1. подключитесь к сети `EastMesh-WiFi` с паролем из таблицы выше
|
||||
2. откройте CLI восстановления командой `telnet 192.168.4.1` (или `nc 192.168.4.1 23`) — все
|
||||
команды восстановления, перечисленные выше, доступны
|
||||
3. `set wifi.ssid <ssid>`, затем `set wifi.pwd <password>` — устройство сразу
|
||||
повторяет подключение к сети с новыми учётными данными
|
||||
4. `reboot` (или просто подождите — см. ниже)
|
||||
|
||||
Пока точка доступа поднята, устройство продолжает повторять попытки подключения к настроенной сети примерно раз в
|
||||
минуту (ожидайте короткий сбой точки доступа при каждой попытке); как только подключение станции
|
||||
успешно, точка доступа восстановления автоматически отключается (это также разрывает
|
||||
ваш сеанс восстановления — это признак того, что всё сработало).
|
||||
|
||||
### Использование приложения companion через AP (роуминг)
|
||||
|
||||
Точка доступа восстановления нужна не только для исправления учётных данных — через неё
|
||||
доступен полный протокол companion, что делает её режимом роумингового доступа, когда устройство
|
||||
находится вне своей настроенной сети:
|
||||
|
||||
1. подключитесь к `EastMesh-WiFi` с паролем, производным от pin (см. таблицу выше)
|
||||
2. в приложении companion MeshCore добавьте/подключите Wi-Fi-устройство с хостом
|
||||
`192.168.4.1` и портом `5000`
|
||||
3. пользуйтесь приложением как обычно — сообщения, контакты и каналы работают через AP
|
||||
|
||||
Примечания по использованию в роуминге:
|
||||
|
||||
- один раз выполните `set pin <pin>`, чтобы пароль точки доступа оставался неизменным между перезагрузками;
|
||||
иначе устройства с экраном выбирают новый случайный pin при каждой загрузке
|
||||
- точка доступа появляется примерно через 60 секунд после загрузки (сначала устройство пытается
|
||||
подключиться к своей настроенной сети) и работает до тех пор, пока эта сеть недоступна
|
||||
- оказавшись снова в зоне действия своей настроенной сети, устройство подключается к ней и
|
||||
автоматически отключает точку доступа — вместо этого переподключите приложение по адресу в локальной сети
|
||||
- ярлык Regions в `/app` последовательно выполняет команды регионов MeshCore: `region put` и `region allowf` для базового региона и вложенного, затем `region save`
|
||||
|
||||
## Скрипт проверки состояния heap
|
||||
|
||||
|
||||
Reference in New Issue
Block a user