-
Notifications
You must be signed in to change notification settings - Fork 4
companion cli
The user sends a private message (PM) in the format <PIN> <command>.
-
PIN — an 8-character hex string derived from the last 4 bytes of the private key.
Printed to Serial at boot:CLI PIN: A1B2C3D4.
Can also be retrieved via TerminalCLI with thepincommand. - Intercepted in
onMessageRecv(): if the message text starts with a matching PIN followed by a space,handleRemoteCLI()is called and normal routing is skipped. - The response is sent back as a PM to the sender.
- Enable/disable:
set remote.cli on/off(runtime, defaulton).
Security: the PIN is not derived from the public key (which is visible to everyone via advert). It uses bytes from the private key, known only to the node owner.
A special TerminalCLI channel is registered at boot. Messages sent to it are processed locally and the response is returned to the same channel.
- Accessible only via BLE / WiFi / USB connection to the node.
- Commands are entered without a PIN.
- Enable/disable:
set terminal.cli on/off(runtime, defaulton).
The response buffer is 512 bytes. If a response exceeds 150 bytes, it is split into chunks marked [1/N], [2/N], etc.
Processing is two-level: first handleCliCmd() (companion-specific commands), then CommonCLI::handleCommand() (shared commands).
| Command | Description |
|---|---|
reboot |
Reboot after 1 s (response is sent before rebooting) |
poweroff / shutdown
|
Power off after 0.5 s |
ver |
Firmware version and build date |
board |
Board information (manufacturer) |
erase |
Reset all settings (local only, via TerminalCLI) |
| Command | Description |
|---|---|
pin |
Show CLI PIN and current BLE PIN (or auto mode) |
get ble.pin |
BLE PIN from prefs; in auto mode — current session PIN |
set ble.pin <XXXXXX> |
Set a fixed 6-digit PIN (100000–999999). Requires reboot |
set ble.pin 0 |
Reset to auto mode: a new random PIN is generated on each boot and not saved to flash |
Auto mode: prefs.ble_pin == 0 → a new random PIN is generated on each start and not written to flash. A custom PIN can be set via set ble.pin XXXXXX or the "custom PIN" option in the client app. Reset back to auto via set ble.pin 0 or the "random" option in the app.
| Command | Description |
|---|---|
get name |
Current node name |
set name <name> |
Change node name (persisted) |
set owner.info <text> |
Owner info; | is replaced with a newline |
| Command | Description |
|---|---|
get radio |
Current parameters: freq, BW, SF, CR |
get freq |
Frequency only |
set radio <freq> <bw> <sf> <cr> |
Full configuration (requires reboot). Example: set radio 869.525 250 11 5
|
set tx <dBm> |
Transmit power in dBm |
set freq <Hz> |
Frequency only (local only, requires reboot) |
get radio.rxgain |
Boosted RX gain state (SX1262/SX1268 only) |
set radio.rxgain on/off |
Boosted RX gain (SX1262/SX1268 only) |
tempradio <freq> <bw> <sf> <cr> |
Temporarily change radio parameters without saving |
advert |
Force-send an advert packet |
advert.zerohop |
Force-send a zero-hop advert |
| Command | Description |
|---|---|
set repeat on/off |
Enable/disable packet forwarding |
set rxdelay <sec> |
Base RX delay before responding |
set txdelay <sec> |
TX delay coefficient |
set direct.txdelay <sec> |
TX delay for direct packets |
set flood.max <N> |
Maximum hop count for flooding (up to 64) |
set path.hash.mode <0|1|2> |
Path hashing mode |
set loop.detect off|minimal|moderate|strict |
Routing loop detection |
password <password> |
Network password |
neighbors |
List of neighboring nodes (heard list) |
neighbor.remove <id> |
Remove a neighbor from the table |
set lat <value> / set lon <value>
|
Node GPS coordinates (for advert) |
| Command | Description |
|---|---|
clock |
Current RTC time |
clock sync |
Force sync (if a source is available) |
clkreboot |
Reboot with forced sync |
timesync |
Detailed status: counters, buffer, cluster, last correction |
timesync on / timesync off
|
Enable/disable all auto-sync |
timesync adverts on/off |
Sync from advert packet timestamps |
timesync msgs on/off |
Sync from message timestamps |
timesync reset |
Reset buffer and counters |
timesync params |
Show runtime quorum parameters |
set timesync.cluster <sec> |
Clustering window width (default 60 s) |
set timesync.drift <sec> |
Minimum drift required for correction (default 120 s) |
set timesync.jump <sec> |
Maximum allowed time jump (default 36000 s) |
timesync.* parameters are runtime only and reset on reboot.
| Command | Description |
|---|---|
gps on / gps off
|
Enable/disable GPS module |
gps sync |
Force clock sync from GPS |
gps setloc |
Set node coordinates from current GPS position |
gps advert none|share|prefs |
Coordinate publishing mode in advert |
gps |
Current GPS status (coordinates, accuracy, fix) |
| Command | Description |
|---|---|
powersaving on / powersaving off
|
Power-saving mode |
region |
Show region and frequency settings |
region <code> |
Set region |
| Command | Description |
|---|---|
sensor list |
List available sensors |
sensor get <name> |
Read a sensor value |
sensor set <name> <value> |
Set a sensor parameter |
| Command | Description |
|---|---|
clear stats |
Reset statistics |
stats-packets |
Packet statistics (local only) |
stats-radio |
Radio statistics (local only) |
stats-core |
Core statistics (local only) |
log start / log stop
|
Start/stop log recording |
log erase |
Clear the log |
log |
Print the log (local only) |
| Command | Description |
|---|---|
get remote.cli |
Remote CLI state (PM mode) |
set remote.cli on/off |
Enable/disable Remote CLI |
get terminal.cli |
TerminalCLI state (channel) |
set terminal.cli on/off |
Enable/disable TerminalCLI |
The remote.cli and terminal.cli flags are runtime only and reset to on on reboot.
| Command | Description |
|---|---|
get cyr2lat.channels |
Transliteration state for channels |
set cyr2lat.channels on/off |
Enable/disable Cyr2Lat for channels (persisted) |
get cyr2lat.contacts |
Transliteration state for contacts |
set cyr2lat.contacts on/off |
Enable/disable Cyr2Lat for contacts (persisted) |
| Command | Description |
|---|---|
wifi list |
List saved networks with indices |
wifi scan |
Scan for networks (~2 s, blocking) |
wifi add <ssid> [pass] |
Add/update a network. SSIDs or passwords with spaces must be quoted: wifi add "My Network" "my pass"
|
wifi del <ssid> |
Remove a network. Quotes supported: wifi del "My Network"
|
wifi connect <idx> |
Connect to a network by index from wifi list
|
wifi status |
Current mode (BLE/WiFi/USB), IP, port |
wifi ip dhcp |
DHCP mode |
wifi ip static <ip> <gw> <mask> |
Static IP. Example: wifi ip static 192.168.1.100 192.168.1.1 255.255.255.0
|
wifi port <1-65535> |
TCP port (default 5000) |
| Command | Description |
|---|---|
set bridge.enabled on/off |
Enable/disable bridge |
set bridge.delay <ms> |
Bridge delay (0–10000 ms) |
set bridge.source rx|tx |
Packet source for bridge |
- Commands with
sender_timestamp == 0(local) work only via TerminalCLI or Serial, not via Remote CLI (PM). - OTA:
start otalaunches an OTA update (only if supported by the platform). -
set radiorequires a reboot to take effect;set txapplies immediately.
Пользователь отправляет личное сообщение (PM) в формате <PIN> <команда>.
-
PIN — 8-символьный hex от последних 4 байт приватного ключа.
Выводится в Serial при загрузке:CLI PIN: A1B2C3D4.
Запрашивается через TerminalCLI командойpin. - Перехват в
onMessageRecv(): если текст начинается с совпадающего PIN + пробел — вызываетсяhandleRemoteCLI(), обычная маршрутизация не происходит. - Ответ отправляется PM-ом обратно отправителю.
- Включён/выключен:
set remote.cli on/off(runtime, по умолчаниюon).
Безопасность: PIN не выводится из публичного ключа (видимого всем через advert). Используются байты приватного ключа, известные только владельцу ноды.
Специальный канал TerminalCLI регистрируется при загрузке. Сообщения в нём
обрабатываются локально, ответ возвращается в канал.
- Доступен только через BLE / WiFi / USB подключение к ноде.
- Команды вводятся без PIN.
- Включён/выключен:
set terminal.cli on/off(runtime, по умолчаниюon).
Буфер ответа — 512 байт. Если ответ длиннее 150 байт, он разбивается на чанки
с маркерами [1/N], [2/N] и т.д.
Обработка двухуровневая: сначала handleCliCmd() (companion-специфичные),
затем CommonCLI::handleCommand() (общие).
| Команда | Описание |
|---|---|
reboot |
Перезагрузка через 1 с (ответ отправляется до перезагрузки) |
poweroff / shutdown
|
Выключение через 0.5 с |
ver |
Версия прошивки и дата сборки |
board |
Информация о плате (производитель) |
erase |
Сброс всех настроек (только локально через TerminalCLI) |
| Команда | Описание |
|---|---|
pin |
Показать CLI PIN и текущий BLE PIN (или auto режим) |
get ble.pin |
BLE PIN из prefs; при auto — текущий PIN сессии |
set ble.pin <XXXXXX> |
Установить фиксированный 6-значный PIN (100000–999999). Требует перезагрузки |
set ble.pin 0 |
Сбросить в auto режим: новый случайный PIN при каждой загрузке, не сохраняется |
Auto режим: prefs.ble_pin == 0 → при каждом старте генерируется новый случайный PIN,
не записывается в flash. Установить custom PIN можно через set ble.pin XXXXXX или
через пункт «custom PIN» в клиентском приложении. Сбросить обратно в auto — через set ble.pin 0
или пункт «random» в приложении.
| Команда | Описание |
|---|---|
get name |
Текущее имя ноды |
set name <имя> |
Изменить имя ноды (сохраняется) |
set owner.info <текст> |
Информация о владельце; | заменяется переносом строки |
| Команда | Описание |
|---|---|
get radio |
Текущие параметры: freq, BW, SF, CR |
get freq |
Только частота |
set radio <freq> <bw> <sf> <cr> |
Полная конфигурация (требует перезагрузки). Пример: set radio 869.525 250 11 5
|
set tx <dBm> |
Мощность передачи в dBm |
set freq <Hz> |
Только частота (только локально, требует перезагрузки) |
get radio.rxgain |
Состояние boosted RX gain (только SX1262/SX1268) |
set radio.rxgain on/off |
Boosted RX gain (только SX1262/SX1268) |
tempradio <freq> <bw> <sf> <cr> |
Временная смена радио параметров без сохранения |
advert |
Принудительно отправить advert-пакет |
advert.zerohop |
Принудительно отправить zero-hop advert |
| Команда | Описание |
|---|---|
set repeat on/off |
Включить/выключить пересылку пакетов (forwarding) |
set rxdelay <сек> |
Базовая задержка RX перед ответом |
set txdelay <сек> |
Коэффициент задержки TX |
set direct.txdelay <сек> |
Задержка TX для прямых пакетов |
set flood.max <N> |
Максимальный счётчик hop для flood (до 64) |
set path.hash.mode <0|1|2> |
Режим хэширования пути |
set loop.detect off|minimal|moderate|strict |
Детектирование петель маршрутизации |
password <пароль> |
Пароль сети |
neighbors |
Список соседних нод (heard list) |
neighbor.remove <id> |
Удалить соседа из таблицы |
set lat <значение> / set lon <значение>
|
GPS координаты ноды (для advert) |
| Команда | Описание |
|---|---|
clock |
Текущее время RTC |
clock sync |
Принудительная синхронизация (если есть источник) |
clkreboot |
Перезагрузка с принудительной синхронизацией |
timesync |
Подробный статус: счётчики, буфер, кластер, последняя коррекция |
timesync on / timesync off
|
Включить/выключить всю автосинхронизацию |
timesync adverts on/off |
Синхронизация по таймстемпам advert-пакетов |
timesync msgs on/off |
Синхронизация по таймстемпам сообщений |
timesync reset |
Сбросить буфер и счётчики |
timesync params |
Показать runtime-параметры кворума |
set timesync.cluster <сек> |
Ширина окна кластеризации (по умолч. 60 с) |
set timesync.drift <сек> |
Минимальный дрейф для коррекции (по умолч. 120 с) |
set timesync.jump <сек> |
Максимально допустимый прыжок времени (по умолч. 36000 с) |
Параметры timesync.* — runtime only, сбрасываются при перезагрузке.
| Команда | Описание |
|---|---|
gps on / gps off
|
Включить/выключить GPS модуль |
gps sync |
Принудительная синхронизация часов по GPS |
gps setloc |
Установить координаты ноды по текущей GPS позиции |
gps advert none|share|prefs |
Режим публикации координат в advert |
gps |
Текущий статус GPS (координаты, точность, фикс) |
| Команда | Описание |
|---|---|
powersaving on / powersaving off
|
Режим энергосбережения |
region |
Показать регион и настройки частот |
region <код> |
Установить регион |
| Команда | Описание |
|---|---|
sensor list |
Список доступных сенсоров |
sensor get <имя> |
Прочитать значение сенсора |
sensor set <имя> <значение> |
Установить параметр сенсора |
| Команда | Описание |
|---|---|
clear stats |
Сбросить статистику |
stats-packets |
Статистика пакетов (только локально) |
stats-radio |
Статистика радио (только локально) |
stats-core |
Статистика ядра (только локально) |
log start / log stop
|
Начать/остановить запись лога |
log erase |
Очистить лог |
log |
Вывести лог (только локально) |
| Команда | Описание |
|---|---|
get remote.cli |
Состояние Remote CLI (PM режим) |
set remote.cli on/off |
Включить/выключить Remote CLI |
get terminal.cli |
Состояние TerminalCLI (канал) |
set terminal.cli on/off |
Включить/выключить TerminalCLI |
Флаги remote.cli и terminal.cli — runtime only, восстанавливаются в on при перезагрузке.
| Команда | Описание |
|---|---|
get cyr2lat.channels |
Состояние транслитерации для каналов |
set cyr2lat.channels on/off |
Включить/выключить Cyr2Lat для каналов (сохраняется) |
get cyr2lat.contacts |
Состояние транслитерации для контактов |
set cyr2lat.contacts on/off |
Включить/выключить Cyr2Lat для контактов (сохраняется) |
| Команда | Описание |
|---|---|
wifi list |
Список сохранённых сетей с индексами |
wifi scan |
Сканирование эфира (~2 с, блокирующий) |
wifi add <ssid> [pass] |
Добавить/обновить сеть. SSID или пароль с пробелами — в кавычках: wifi add "My Network" "my pass"
|
wifi del <ssid> |
Удалить сеть. Кавычки поддерживаются: wifi del "My Network"
|
wifi connect <idx> |
Подключиться к сети по индексу из wifi list
|
wifi status |
Текущий режим (BLE/WiFi/USB), IP, порт |
wifi ip dhcp |
Режим DHCP |
wifi ip static <ip> <gw> <mask> |
Статический IP. Пример: wifi ip static 192.168.1.100 192.168.1.1 255.255.255.0
|
wifi port <1-65535> |
TCP порт (по умолчанию 5000) |
| Команда | Описание |
|---|---|
set bridge.enabled on/off |
Включить/выключить bridge |
set bridge.delay <мс> |
Задержка bridge (0–10000 мс) |
set bridge.source rx|tx |
Источник пакетов для bridge |
- Команды с
sender_timestamp == 0(локальные) — работают только через TerminalCLI или Serial, не через Remote CLI (PM). - OTA:
start ota— запускает OTA обновление (только если поддерживается платформой). -
set radioтребует перезагрузки для применения;set txприменяется немедленно.