Разбираю, как это устроено: два раздельных канала, deep sleep и почему будильник сознательно отделён от управления.

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

Уезжал в долгосрочный отпуск. Дома оставалась рабочая машина с 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: шесть байт 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 — так все сообщения системы собираются в одном месте.

Когда 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 недоступен (команда ping_esp32 покажет и это).
  • Wake-on-LAN надо один раз включить в BIOS/UEFI сетевой карты. Это единственная настройка «в железе», и о ней легко забыть до первого теста из отпуска. Тестируйте до отъезда.
  • Зависшая Windows не управляется. Если система повисла так, что агент не отвечает, командный канал молчит. Wake-on-LAN здесь не поможет — машина уже включена.
  • Будильник — это не шифрованное управление, а короткая команда на сервере. По сути, одно слово, которое плата забирает по HTTPS; безопасность держится на авторизации панели и том, что команды короткие и ожидаемые. Для домашнего сценария — достаточно; для «дать коллегам» — нет.

Во что это сложилось

Итоговая стоимость и состав системы:

~$7 единовременно (ESP32 ~$2 + уже имеющиеся USB-зарядка и скрипты) + ~$5/мес за VPS, где ESP32 выступает будильником, получающим команды с сервера и отправляющим Wake-on-LAN, USB-зарядка обеспечивает питание платы 24/7, VPS host’ит веб-панель, MQTT-брокер и файл команд, а PowerShell-агенты исполняют команды на ПК.

Итог: дома 24/7 работает плата за два доллара, а RTX включается только тогда, когда действительно нужна, — и сама гасится, если о ней забыли. Это первый работающий шаг из направления Robotics Lab: дальше — управление розетками и датчиками той же связкой, а потом и складские роботы.

FAQ

Почему не пробросить Wake-on-LAN из интернета напрямую? Проброс UDP-порта в домашнюю сеть — постоянная дыра в периметре. И нет статического IP адреса. ESP32 находится внутри сети, шлёт серию пакетов на оба broadcast-адреса и подтверждает включение — надёжнее и безопаснее.

Почему не умная розетка? Розетка рубит питание — для Windows это эквивалент выдёргивания шнура, с риском для файловой системы. И после обесточки Wake-on-LAN может не работать. Здесь выключение — штатное, через систему.

Сколько потребляет ESP32? В deep sleep — единицы микроампер. С учётом подъёма по таймеру раз в пять минут за год набегают копейки: питание идёт от обычной USB-зарядки.

А если ПК завис намертво? Командный канал замолчит — агенту нужна живая Windows. Признаём честно: от зависания спасает только обесточка, то есть умная розетка. Это следующий шаг той же лестницы.

Комментарии 3

Полезные статьи на почту

Нажимая «подписаться», вы соглашаетесь с правилами получения рекламных рассылок

Похожие статьи

Популярные статьи