Skip to content

companion cli

rogovogor edited this page May 15, 2026 · 2 revisions

Companion Radio — CLI Control / CLI управление

[English] · [Русский]


English

Command Delivery Modes

Remote CLI (PM + PIN)

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 the pin command.
  • 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, default on).

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.

TerminalCLI (channel)

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, default on).

Long Responses

The response buffer is 512 bytes. If a response exceeds 150 bytes, it is split into chunks marked [1/N], [2/N], etc.


Commands

Processing is two-level: first handleCliCmd() (companion-specific commands), then CommonCLI::handleCommand() (shared commands).


System

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)

BLE PIN

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.


Name and Identification

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

Radio

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

Network Parameters

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)

Clock and Time Synchronization

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.


GPS

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)

Relay / Power

Command Description
powersaving on / powersaving off Power-saving mode
region Show region and frequency settings
region <code> Set region

Sensors

Command Description
sensor list List available sensors
sensor get <name> Read a sensor value
sensor set <name> <value> Set a sensor parameter

Statistics and Logs

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)

CLI Channels

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.


Cyr2Lat (Transliteration)

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)

WiFi (builds with WITH_WIFI_SWITCHING only)

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)

Bridge (builds with WITH_BRIDGE only)

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

Notes

  • Commands with sender_timestamp == 0 (local) work only via TerminalCLI or Serial, not via Remote CLI (PM).
  • OTA: start ota launches an OTA update (only if supported by the platform).
  • set radio requires a reboot to take effect; set tx applies immediately.

Русский

Режимы доставки команд

Remote CLI (PM + PIN)

Пользователь отправляет личное сообщение (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 (канал)

Специальный канал 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)

BLE PIN

Команда Описание
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

Команда Описание
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 Вывести лог (только локально)

CLI-каналы

Команда Описание
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.cliruntime only, восстанавливаются в on при перезагрузке.


Cyr2Lat (транслитерация)

Команда Описание
get cyr2lat.channels Состояние транслитерации для каналов
set cyr2lat.channels on/off Включить/выключить Cyr2Lat для каналов (сохраняется)
get cyr2lat.contacts Состояние транслитерации для контактов
set cyr2lat.contacts on/off Включить/выключить Cyr2Lat для контактов (сохраняется)

WiFi (только сборки с WITH_WIFI_SWITCHING)

Команда Описание
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)

Bridge (только сборки с WITH_BRIDGE)

Команда Описание
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 применяется немедленно.

Clone this wiki locally