Системные команды выполняет само устройство, независимо от конфигурации слотов. Они живут в собственном псевдомодуле 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/netStatusJSONСтатус сетевых служб — см. ниже
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 канонического словаря: NETstatusnetStatus, TaskListtaskList.
БылоСтало
moduleBox/system/getFreeRAMmoduleBox/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

Смотрите также