Шалость удалась (часть 2)
Первоначальный план
Итак, решение принято: готовое устройство мы не покупаем — будем собирать своё. В качестве основы я выбрал ESP32 и отдельную плату расширения с Ethernet. Подключение по кабелю казалось самым надёжным вариантом: устройство должно было подключаться к офисному роутеру и становиться обычным участником локальной сети.
При этом активно сканировать или как-то нагружать сеть мне не хотелось. Задача устройства была гораздо проще: периодически сообщать наружу что-то вроде: Я здесь. Я смог выйти в интернет. Всё в порядке.
То есть вместо того, чтобы пытаться достучаться до офиса извне, я развернул схему наоборот: устройство внутри офиса само периодически обращается к внешнему серверу. У такого подхода есть приятный бонус: не нужен белый IP, не нужно открывать входящие порты на роутере и вообще выставлять устройство наружу. Для внешнего мира наш монитор остаётся обычным клиентом офисной сети.
Оставалась небольшая проблема. У меня ещё не было ни ESP32, ни Ethernet-платы. А делать что-то уже хотелось. Железа нет — будем эмулировать
Ждать доставки компонентов показалось слишком скучно, поэтому разработку я начал с противоположного конца системы — с backend. Заодно появился хороший повод использовать Go, который я как раз изучал. Идея была простой: backend принимает периодические сигналы от устройств и запоминает время последнего успешного обращения.
Причём сразу не хотелось привязываться к одной ESP32. Сегодня устройство одно, завтра их может стать несколько — поэтому появились регистрация устройств и независимый heartbeat для каждого из них. Настоящего устройства всё ещё не было, поэтому его место временно занял simulator.
Я написал программную эмуляцию, которая с заданной периодичностью обращалась к backend примерно так, как впоследствии должна была это делать настоящая ESP32. Получилась немного забавная последовательность разработки: физического устройства ещё не существовало, а сервер уже умел регистрировать устройства, принимать heartbeat, сохранять данные и работать с эмулятором будущего железа.
На этом же этапе появился первый простой Web UI. Без сложных dashboard, графиков и аналитики — достаточно было показать главное: выходит устройство сейчас на связь или нет.
В итоге начала складываться первая архитектура системы: ESP32 → Internet → Go Backend → DB / Web UI
Но здесь был принципиальный момент: сервер не должен был проверять устройство сам.
Никакого подключения к офисной сети извне. Никаких запросов к ESP32. Никаких открытых входящих портов.
Связь инициирует только устройство: находясь внутри офисной сети, оно само сообщает внешнему серверу, что ещё живо.
Если heartbeat приходит — мы знаем, что устройство работает и смогло через интернет добраться до нашего backend.
Если heartbeat перестаёт приходить — значит, что-то произошло. Пропал интернет? Отключилось электричество? Перезагрузился роутер? Зависла ESP32? Упал backend? Пока неизвестно.
Для сервера всё это первоначально выглядело одинаково: устройство перестало выходить на связь.
Но для первой версии системы этого уже было достаточно.
· 2 ч
на чём был написан UI? почему для бэкенда выбрал именно GO?
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён