Отправка состояния Unit через MQTT
WARNING
Поддерживаемые топики состояний должны быть отражены в schema_example.json в разделе output_base_topic
.
Unit должен отправлять форматированные данные в топики, которые указаны. Pepeunit обязуется обработать их по единому паттерну, описанному в данном разделе.
Всего в Pepeunit есть два топика отвечающий за отправку состояния:
state/pepeunit
-output_base_topic
log/pepeunit
output_base_topic
state/pepeunit - output_base_topic
Данные отправляемые Unit, преобразуются на стороне Pepeunit в отображение состояния в меню Unit. Также данное состояние можно получить через REST и GQL.
Формат сообщений в топик state/pepeunit
{
"ifconfig": ["192.168.0.3", "255.255.255.0", "192.168.0.1", "192.168.0.1"],
"millis": 595925249.0,
"mem_free": 12368.0,
"mem_alloc": 25648.0,
"freq": 80000000.0,
"statvfs": [4096, 4096, 763, 716, 716, 0, 0, 0, 0, 255],
"commit_version": "7f1b6564c4885432a17e5892e3c98f3a2ad33658"
}
Разберём каждый ключ:
ifconfig
- данные о подключении к сети в формате[ip, subnet, gateway, dns]
millis
- время в миллисекундах с момента старта программы или времяunix
также в миллисекундахmem_free
- свободнаяRAM
память в Байтахmem_alloc
- используемаяRAM
память в Байтахfreq
- частота работы кристала в Гцstatvfs
- состояние файловой системыflash
памяти, позволяет вычислить сколькоflash
памяти используется и осталось:python[ f_bsize, # file system block size f_frsize, # fragment size f_blocks, # size of fs in f_frsize units f_bfree, # number of free blocks f_bavail, # number of free blocks for unprivileged users f_files, # number of inodes f_ffree, # number of free inodes f_favail, # number of free inodes for unprivileged users f_flag, # mount flags f_namemax, # maximum filename length ]
commit_version
- ключCOMMIT_VERSION
из env.json файла Unit. Данный ключ используется в системе обновлений Pepeunit, для отслеживания текущей версии Unit.
DANGER
Для корректной работы статусов обновлений у Unit, требуется отправлять commit_version
WARNING
Размер передаваемого Unit состояния ограничен количеством символов указанных в переменной окружения MQTT_MAX_PAYLOAD_SIZE
из Backend ENV. По умолчанию это значение составляет 50000
символов.
INFO
Pepeunit не обязывает отправлять все ключи указанные в примере, можно отправить например только два ключа millis
и commit_version
Алгоритм отправки
- Каждые
STATE_SEND_INTERVAL
секунд опросить состояние системы - Отформатировать данные для отправки в
json
формате - Отправить данные в топик
state/pepeunit
изoutput_base_topic
, указанный в schema.json
log/pepeunit - output_base_topic
Когда Unit отправляет данные в этот топик?
- Если Unit сам считает нужным отправить лог или набор логов для отображения Пользователю
- В случае получения команды в топике
log_sync/pepeunit
, подробнее
Данные отправляемые Unit, преобразуются на стороне Pepeunit в меню логов Unit. Также данные логи можно получить через REST и GQL.
Формат сообщений в топик log/pepeunit
Поддерживается несколько форматов отправки логов:
- Отправка одного лога напрямую:json
{ "level": "Info", "text": "Subscribed: 83 (0, 0, 0, 0, 0)", "create_datetime": "2025-04-08T11:27:52.044394" }
- Отправка одного лога напрямую, без указания времени:json
{ "level": "Info", "text": "Subscribed: 83 (0, 0, 0, 0, 0)" }
- Отправка множества логов:json
[ { "level": "Info", "text": "Subscribed: 5 (0, 0, 0, 0, 0)", "create_datetime": "2025-04-08T11:37:55.087036" }, { "level": "Debug", "text": "Unit 7d99d194-fe09-4737-b991-0a67cff966d7 get msg from topic log_sync", "create_datetime": "2025-04-08T11:38:22.828806" }, { "level": "Debug", "text": "Unit 7d99d194-fe09-4737-b991-0a67cff966d7 get msg from topic env_update", "create_datetime": "2025-04-08T11:41:15.974031" } ]
- Отправка множества логов, без указания времени:json
[ { "level": "Info", "text": "Subscribed: 5 (0, 0, 0, 0, 0)" }, { "level": "Debug", "text": "Unit 7d99d194-fe09-4737-b991-0a67cff966d7 get msg from topic log_sync" }, { "level": "Debug", "text": "Unit 7d99d194-fe09-4737-b991-0a67cff966d7 get msg from topic env_update" } ]
Разберём каждый ключ и логику обработки на стороне Pepeunit:
level
- указывает уровень логирования и может принимать следующие значения:Debug, Info, Warning, Error, Critical
text
- содержание лога в текстовом формате, желательно укладывать в256
символов для корректного отображения в Frontendcreate_datetime
- необязательный ключ, указывающий временную метку для Pepeunit. Именно данная метка отображается Пользователю, в случае отсутствия Pepeunit действует по следующим алгоритмам:- Если сообщение содержит один лог и данный ключ отсутствует, берётся время когда Pepeunit получил сообщение.
- Если отправлено множество логов и данный ключ отсутствует, Pepeunit берёт текущее время для самого первого элемента листа и добавляет по 1 секунде для каждого последующего элемента c целью сохранить порядок логов полученный от Unit.
WARNING
Размер передаваемого Unit лога ограничен количеством символов указанных в переменной окружения MQTT_MAX_PAYLOAD_SIZE
из Backend ENV. По умолчанию это значение составляет 50000
символов.
По умолчанию время жизни логов ограничено 86400
секундами. За это отвечает переменная BACKEND_UNIT_LOG_EXPIRATION
из Backend ENV.
Алгоритм отправки
- Отформатировать данные для отправки в
json
формате - Отправить данные в топик
log/pepeunit
изoutput_base_topic
, указанный в schema.json