Главная / Блог / Включить домашний ПК из отпуска: ESP32 за $2, Wake-on-LAN и MQTT

Включить домашний ПК из отпуска: ESP32 за $2, Wake-on-LAN и MQTT

Уехал в долгий отпуск, а дома стоит ПК с RTX 5090, который время от времени нужен для AI. Держать его включённым круглые сутки не хотелось. Собрал «будильник» на ESP32 за два доллара: с телефона жму кнопку, плата будит компьютер по Wake-on-LAN, а после загрузки с ним можно делать что угодно, вплоть до запуска локальной Ollama через reverse SSH.

ESP32Wake-on-LANMQTTPowerShellTelegramудалённый доступ

Коротко. Дома круглосуточно работает только ESP32 за два доллара, питающаяся по USB от зарядки для телефона. ПК с RTX 5090 включается с телефона из любой точки мира примерно за минуту, после загрузки слушает любые команды: от «выключись» до «выполни python-скрипт и пришли вывод в Telegram». Ниже рассказываю, как это устроено: два раздельных канала, deep sleep и почему будильник я сознательно отделил от управления.

Плата ESP32: питание по USB, подключена к домашнему Wi-Fi и раз в пять минут проверяет, не пришла ли команда
Плата ESP32: питание по USB, подключена к домашнему Wi-Fi и раз в пять минут проверяет, не пришла ли команда

Задача: ПК нужен, но не круглосуточно

Уезжал в долгосрочный отпуск. Дома оставалась рабочая машина с RTX 5090, и я знал, что GPU понадобится: локальные модели, обработка медиатеки, эксперименты. Варианты были такие:

ВариантПочему не подошёл
Оставить ПК включённым на весь отпускнедели 24/7-потребления впустую, плюс машина, к которой никто не присматривает
Облачный GPUплатить аренду за то, что уже стоит дома
Попросить родню нажать кнопкуПК стоит не у родни, и «перезагрузи, если завис» они не осилят

Оставалось четвёртое: пусть компьютер спит, а разбудить его я могу сам, одной кнопкой с телефона. Для этого нужен исполнитель, который живёт дома постоянно, почти ничего не потребляет и умеет послать компьютеру Wake-on-LAN. Это ровно описание ESP32.

Два канала: будильник и пульт

Главное решение проекта: включение и управление разделены. Не ради красоты. Два сценария происходят в разных состояниях машины. Wake-on-LAN нужен, когда ПК выключен: работает только BIOS, никакого агента. Команды, наоборот, нужны, когда Windows уже загрузилась. Если попытаться уместить оба сценария в один механизм, получится классическая поломка: агенту нужен работающий ПК, а его как раз нет.

Схема: телефон → веб-панель на VPS → два канала, серверная команда/ESP32/Wake-on-LAN и MQTT/Windows-агент → домашний ПК
Схема: телефон → веб-панель на VPS → два канала, серверная команда/ESP32/Wake-on-LAN и MQTT/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. Признаём честно: от зависания спасает только обесточка, то есть умная розетка. Это следующий шаг той же лестницы.

→

Читать дальше

Все статьи →

Ассистент, который записывает: как мы добавили в GraphRAG клиентов, расписание и каналы Telegram, Max и сайт

Ассистент, который только отвечает, оставляет человеку самое трудоёмкое: записать, напомнить, позвать снова. Мы добавили в GraphRAG модуль «Клиенты» с услугами, расписанием и сценариями, подключили Telegram, Max и виджет на сайт, а для обычных аккаунтов компании написали отдельный шлюз. Рассказываем, какие решения приняли, что пришлось выбросить и где граница.

Читать →

Агент вместо сценария: как мы описали логику AI-ассистента данными и проверили его на 300 вопросах

Ассистента по базе знаний обычно собирают конвейером «роутер → поиск → ответ», и каждый новый тип вопроса добавляет ветку. В GraphRAG мы заменили конвейер агентом с восемью инструментами, а всё, что должно происходить всегда, вынесли в JSON-харнес с версиями и тестами. Как это устроено, что показало сравнение на 300 вопросах и где агент пока проигрывает.

Читать →

Локальный AI-монтажёр: как ноутбук разбирает медиатеку и собирает ролик под музыку по текстовому запросу

После поездки осталась сотня роликов с телефона и десяток треков, а монтаж откладывался неделями. Написал приложение, которое само разбирает медиатеку локальной VL-моделью, размечает музыку по тактам и по одной фразе собирает черновой клип на таймлайн. Что умеет, на какие грабли наступил и чего оно делать не будет.

Читать →