Включить домашний ПК из отпуска: ESP32 за $2, Wake-on-LAN и MQTT
Уехал в долгий отпуск, а дома стоит ПК с RTX 5090, который время от времени нужен для AI. Держать его включённым круглые сутки не хотелось. Собрал «будильник» на ESP32 за два доллара: с телефона жму кнопку, плата будит компьютер по Wake-on-LAN, а после загрузки с ним можно делать что угодно, вплоть до запуска локальной Ollama через reverse SSH.
Коротко. Дома круглосуточно работает только ESP32 за два доллара, питающаяся по USB от зарядки для телефона. ПК с RTX 5090 включается с телефона из любой точки мира примерно за минуту, после загрузки слушает любые команды: от «выключись» до «выполни python-скрипт и пришли вывод в Telegram». Ниже рассказываю, как это устроено: два раздельных канала, deep sleep и почему будильник я сознательно отделил от управления.

Задача: ПК нужен, но не круглосуточно
Уезжал в долгосрочный отпуск. Дома оставалась рабочая машина с RTX 5090, и я знал, что GPU понадобится: локальные модели, обработка медиатеки, эксперименты. Варианты были такие:
| Вариант | Почему не подошёл |
|---|---|
| Оставить ПК включённым на весь отпуск | недели 24/7-потребления впустую, плюс машина, к которой никто не присматривает |
| Облачный GPU | платить аренду за то, что уже стоит дома |
| Попросить родню нажать кнопку | ПК стоит не у родни, и «перезагрузи, если завис» они не осилят |
Оставалось четвёртое: пусть компьютер спит, а разбудить его я могу сам, одной кнопкой с телефона. Для этого нужен исполнитель, который живёт дома постоянно, почти ничего не потребляет и умеет послать компьютеру Wake-on-LAN. Это ровно описание ESP32.
Два канала: будильник и пульт
Главное решение проекта: включение и управление разделены. Не ради красоты. Два сценария происходят в разных состояниях машины. Wake-on-LAN нужен, когда ПК выключен: работает только BIOS, никакого агента. Команды, наоборот, нужны, когда Windows уже загрузилась. Если попытаться уместить оба сценария в один механизм, получится классическая поломка: агенту нужен работающий ПК, а его как раз нет.
Канал-будильник. На VPS лежит маленькая веб-панель под паролем. Кнопка «Включить» оставляет на сервере короткую команду, которую плата забирает при очередном пробуждении. Дома плату ESP32, размером примерно с флешку, разбудит магический пакет Wake-on-LAN: шесть байт FF и шестнадцать повторов MAC-адреса сетевки. Пакет летит по UDP на оба широковещательных адреса сразу: 255.255.255.255 и направленный типа 192.168.1.255. Часть роутеров пропускает только один из них.
Командный канал. Когда Windows загрузилась, автоматически стартует агент на PowerShell и подключается к MQTT-брокеру на том же VPS. MQTT, очень лёгкий протокол обмена сообщениями. По факту это маленький диспетчер: кто-то публикует команду в топик, кто-то её получает. Через него ПК и слушает всё, что я скажу.
Что делает ESP32 и чего не делает
Плата почти всё время спит (deep sleep, единицы микроампер). Раз в пять минут просыпается по таймеру, подключается к Wi-Fi, читает команду и делает одно из:
- включение: шлёт серию Wake-on-LAN и повторяет цикл, пока ПК не ответит (проверка простым TCP-подключением к агенту). Состояние «будим ПК» хранится в RTC-памяти и переживает собственный deep sleep, так что «уснул на полпути» здесь невозможно по построению;
- выключить / перезагрузить / заблокировать: передаёт работающему ПК через локальный агент;
- проверка связи: присылает отчёт в Telegram: Wi-Fi и уровень сигнала, температура чипа, онлайн ли ПК, причина последнего перезапуска платы;
- любая другая строка: уходит на ПК как команда cmd.exe.
Из приятного в железе: тактовая частота снижена до 80 МГц, у радиомодуля включён modem sleep и урезана мощность передатчика. Плата с USB-питанием почти не греется. Уведомления в Telegram идут не напрямую в API, а через личный n8n на VPS: из домашней сети Telegram может быть доступен только через VPN, которого у платы нет, а у Windows после загрузки он ещё не поднялся. Плюс все сообщения системы собираются в одном месте, чинить и расширять можно правкой workflow, без перепрошивки.
Когда Windows проснулась
Загрузка Windows поднимает двух агентов (обычный start.bat в автозапуске): HTTP-агент на порту 8080, по которому ESP32 проверяет «жив ли ПК», и MQTT-агент, слушающий брокер. Дальше из панели доступны:
- ключевые слова: выключить, перезагрузить, заблокировать, усыпить;
- произвольные команды cmd и PowerShell с возвратом вывода в Telegram;
- запуск программ: exe, bat, скрипты, python;
- кнопка, поднимающая программы удалённого подключения, на случай, когда нужен не чат с консолью, а экран.
Отдельный сценарий: домашний AI без облака. С телефона поднимаю reverse SSH-туннель, и локальная Ollama на 5090 становится доступной снаружи как облачный эндпоинт. GPU работает ровно столько, сколько длилась задача.
И предохранитель от меня самого: если я разбудил ПК и забыл о нём, агент простоя замечает 60 минут без движения клавиатуры и мыши, предупреждает в Telegram и выключает машину. С минутой на отмену.
Честные ограничения
- Нужен домашний интернет. Роутер лёг или отключили свет, и разбудить ПК нечем. ESP32 честно рапортует в Telegram, что Wi-Fi недоступен (проверка связи покажет и это).
- Wake-on-LAN надо один раз включить в BIOS/UEFI сетевой карты. Единственная настройка «в железе», и о ней легко забыть до первого теста из отпуска. Тестируйте до отъезда.
- Зависшая Windows не управляется. Если система повисла так, что агент не отвечает, командный канал молчит. Wake-on-LAN тут не поможет: машина уже включена.
- Будильник: это не шифрованное управление, а короткая команда на сервере. По сути одно слово, которое плата забирает по HTTPS; безопасность держится на авторизации панели и том, что команды короткие и ожидаемые. Для домашнего сценария достаточно, для «дать коллегам» нет.
Во что это сложилось
| Компонент | Роль | Цена |
|---|---|---|
| ESP32 | будильник: забирает команду с сервера, шлёт Wake-on-LAN | ~$2 |
| USB-зарядка | питание платы 24/7 | уже было |
| VPS | веб-панель + MQTT-брокер + канал команд | ~$5/мес, уже был |
| PowerShell-агенты | исполнение команд на ПК | файлы скриптов |
Итог: дома 24/7 работает плата за два доллара, а RTX включается только тогда, когда действительно нужна, и сама гасится, если о ней забыли. Это первый работающий шаг из лестницы Robotics Lab: дальше та же связка будет управлять розетками и датчиками, а потом и складскими роботами. Продуктовая страница направления — ESP32 Power Switch.
FAQ
Почему не пробросить Wake-on-LAN из интернета напрямую? Проброс UDP-порта в домашнюю сеть оставляет постоянную дыру в периметре. ESP32 находится внутри сети, шлёт серию пакетов на оба broadcast-адреса и подтверждает включение. Надёжнее и безопаснее.
Почему не умная розетка? Розетка рубит питание: для Windows это эквивалент выдёргивания шнура, с риском для файловой системы. И после обесточки Wake-on-LAN может не работать. Здесь выключение штатное, через систему.
Сколько потребляет ESP32? В deep sleep единицы микроампер. С учётом подъёма по таймеру раз в пять минут за год набегают копейки: питание идёт от обычной USB-зарядки.
А если ПК завис намертво? Командный канал замолчит: агенту нужна живая Windows. Признаём честно: от зависания спасает только обесточка, то есть умная розетка. Это следующий шаг той же лестницы.