Системные команды выполняет само устройство, независимо от конфигурации слотов.
Они живут в собственном псевдомодуле system и подчиняются тем же правилам
конституции, что и модули: команда идёт
в action, ответ приходит в event.
Топики
База системного топика — <deviceName>/system, без номера слота:
<deviceName>/system/action/<команда> — запрос к устройству
<deviceName>/system/event/<имя> — ответ устройства
Устройство подписывается на <deviceName>/system/#, поэтому все системные команды
доступны сразу после подключения к брокеру, без настройки слотов.
Команды
| Топик | Payload | Описание |
|---|---|---|
system/action/getVersion | — | Запросить версию прошивки |
system/action/getFreeRAM | — | Запросить объём свободной оперативной памяти |
system/action/getFreeDisk | — | Запросить объём свободного места на носителе |
system/action/getNETstatus | — | Запросить статус сетевых служб |
system/action/getTaskList | — | Запросить список задач FreeRTOS |
system/action/restart | — | Перезагрузить контроллер |
Команды параметров не принимают. Payload игнорируется — можно отправлять пустой.
Пример: топик moduleBox/system/action/getVersion, payload пустой.
События
| Топик | Payload | Описание |
|---|---|---|
system/event/version | строка | Версия прошивки |
system/event/freeRAM | целое, байты | Свободная оперативная память |
system/event/freeDisk | целое (байты) либо error | Свободное место на носителе |
system/event/netStatus | JSON | Статус сетевых служб — см. ниже |
system/event/taskList | текст | Таблица задач FreeRTOS |
Пример: топик moduleBox/system/event/freeRAM, payload 184320.
Формат netStatus
Ответ на getNETstatus — JSON-объект. Поля с результатами инициализации содержат
код esp_err_t, где 0 означает успех:
{
"WIFI_init_res": 0,
"WIFI_SSID": "office",
"WIFI_ipAdress": "192.168.88.51",
"WIFI_netMask": "255.255.255.0",
"WIFI_gateWay": "192.168.88.1",
"LAN_init_res": 0,
"LAN_ipAdress": "192.168.88.33",
"LAN_netMask": "255.255.255.0",
"LAN_gateWay": "192.168.88.1",
"MQTT_init_res": 0,
"UDP_init_res": 0,
"OSC_init_res": 0,
"FTP_init_res": 0
}Блоки WIFI_* и LAN_* с адресами присутствуют только у поднявшихся интерфейсов.
Note
netStatusиtaskList— единственные системные события, чей payload не является голым скалярным значением. Это диагностические дампы: разбирать их на отдельные топики означало бы плодить десятки имён ради разовой отладки.
Транспорты
Системные команды принимаются из всех настроенных источников — MQTT, UDP, OSC, USB-CDC. Ответы уходят во все настроенные транспорты одновременно.
MQTT. Полный топик с именем устройства:
topic: moduleBox/system/action/getFreeRAM
payload: (пусто)
USB-консоль. Имя устройства не требуется, команда отправляется строкой:
system/action/restart
CrossLink. Системную команду можно вызвать из правила внутренней связи:
[SLOT_2]
mode = button_led
;длинное нажатие кнопки перезагружает устройство
crosslink = button_2/event/longPress:1->system/action/restart:1Совместимость со старым форматом
До введения конституции системные команды выглядели как <deviceName>/system/<имя>,
без сегмента направления, а ответы — как <deviceName>/system/<имя>.
- Команды: прошивка по-прежнему принимает старый вид (
moduleBox/system/restart), поэтому существующие конфигурации и mbApp продолжают работать. В новых интеграциях используйтеsystem/action/<имя>. - События: ответы теперь публикуются только в новом виде
(
system/event/<имя>). Подписчики, ждавшие<deviceName>/system/freeRAM, должны перейти на<deviceName>/system/event/freeRAM. - Два ответа переименованы под camelCase канонического словаря:
NETstatus→netStatus,TaskList→taskList.
| Было | Стало |
|---|---|
moduleBox/system/getFreeRAM | moduleBox/system/action/getFreeRAM |
moduleBox/system/freeRAM:184320 | топик moduleBox/system/event/freeRAM, payload 184320 |
moduleBox/system/NETstatus:{...} | moduleBox/system/event/netStatus |
moduleBox/system/TaskList:... | moduleBox/system/event/taskList |
Смотрите также
- Конституция — правила топиков и payload
- Внутренние связи (crossLink)
- Настройки — структура
config.ini