Основы
Транспорт — UDP broadcast на порт 9009. Формат — plain text, разделитель «:», пробелы запрещены (кроме payload). Все устройства в одном L2-сегменте.
Степаныч, давай охолаживай: чем проще протокол, тем меньше причин для поломки.
Типы пакетов
| Префикс | Назначение | Пример |
|---|---|---|
device: | Команда устройству | device:corridor_light:action:set:value:1 |
devstate: | Статус/событие от устройства | devstate:esp01_01:event:button:value:pressed |
devping: | Keep-alive (каждые 180 сек) | devping:esp01_01:sys_uptime:12345 |
sys_ | Транзитная системная диагностика | sys_log:gateway_01:msg:boot_ok |
err_ | Транзитная ошибка | err_timeout:esp01_01:action:relay_set |
debug_ | Отладочный транзит | debug_rx:gateway_01:raw:device:...: |
Lifecycle устройства
- Cold start: устройство включается, подключается к Wi-Fi, отправляет
devstateс текущим состоянием. - Пассивная авто-регистрация: сервер перехватывает
devstateи регистрирует устройство в JSONB-дереве. - Keep-alive: устройство отправляет
devpingкаждые 180 секунд. - Команда: сервер отправляет
device:— устройство выполняет и отвечаетdevstate:. - Потеря связи: если
devpingне приходит 3 цикла (9 мин), сервер помечает устройство как неактивное.
Транзитные пакеты (диагностика без смены ПО)
Шлюз может отправлять пакеты с префиксами sys_, err_, debug_ прямо в облако, не меняя прошивку. Это позволяет диагностировать проблемы на лету.
sys_log:gateway_01:msg:boot_ok
err_timeout:esp01_01:action:relay_set
debug_rx:gateway_01:raw:device:corridor_light:action:set:value:1
Важные нюансы
- AP Isolation на роутере должна быть отключена.
- Пакеты — plain text, разделитель «:», пробелы запрещены (кроме payload).
- Не используйте OTA-обновления — только по запросу.
- Один L2-сегмент — broadcast не проходит через роутер.