Что диагностируем
UDP broadcast 9009 — основа транспорта 4DUK. Если пакеты не ходят, система не работает. Диагностика нужна, чтобы понять: проблема в железе, в сети или в коде.
Степаныч, давай охолаживай: если пакеты не летят — не надо менять прошивку. Сначала сниффни сеть.
Инструменты
- Wireshark — сниффинг UDP на порту 9009.
- tcpdump — для серверов и шлюзов.
- devping / devstate — встроенные keep-alive и статусы.
- Логи Postgresql — хранение состояний и событий.
Команды для сниффинга
# Wireshark: фильтр
udp.port == 9009
# tcpdump
sudo tcpdump -i eth0 -n -vv "udp port 9009"
# Проверить broadcast-интерфейс
ip addr show
Типичные проблемы
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Нет devping от устройства | Нет Wi-Fi или выключено | Статус Wi-Fi, питание, SSID/пароль, AP Isolation |
| Пакеты видны, реакции нет | Неверный формат пакета | Сравнить с префиксами: devping:, devstate:, device: |
| Пакеты не видны в Wireshark | AP Isolation, VLAN | Отключить AP Isolation, проверить сегментацию |
| Периодические потери | Плохой Wi-Fi, помехи | Поменять канал, проверить RSSI |
| devping приходит, но устройство не реагирует | Неверный device_id в команде | Проверить JSONB-дерево и маппинг |
| Сервер не видит устройство | Не пришёл cold-start devstate | Перезагрузить устройство, проверить лог |
Keep-alive и devping
Каждое устройство отправляет devping каждые 180 секунд. Сервер по отсутствию devping помечает устройство как неактивное.
devping:esp01_relay_01:sys_uptime:12345
Проверка на уровне ESP
void parsePacket() {
int packetSize = udp.parsePacket();
if (packetSize) {
char buffer[256];
int len = udp.read(buffer, sizeof(buffer) - 1);
buffer[len] = '\0';
if (strncmp(buffer, "device:", 7) == 0) {
// обработка команды
}
}
}
Транзитная диагностика в Postgresql
-- Найти все ошибки за последний час
SELECT * FROM device_logs
WHERE created_at > now() - interval '1 hour'
AND level IN ('error', 'warning')
ORDER BY created_at DESC;
-- Проверить активность устройства
SELECT device_id, max(created_at) AS last_seen
FROM device_logs
GROUP BY device_id
ORDER BY last_seen DESC;
Чек-лист при запуске нового устройства
- Подключить к Wi-Fi (SSID, пароль).
- Убедиться, что AP Isolation отключена.
- Проверить devping в Wireshark/tcpdump.
- Проверить cold-start devstate.
- Проверить появление в JSONB-дереве.
- Отправить тестовую команду
device:. - Проверить ответ
devstate:.