
Как я встретил вашу маму ESP-Claw? Очень просто: не на Хабре, не в Google, а в одном дружном чатике, куда ссылку запостил коллега по несчастью. Здесь надо пояснить, что чат про одну специфическую IoT платформу для ESP и подобных контроллеров, а не про этот ваш ИИ, поэтому заметил я это дело одним краем глаза. Не могу сказать, что именно меня зацепило, но я решил — почему бы и нет. Если в двух словах, то оно того стоило: попутно я освоил подключение к LLM по API-ключу, разобрался с OpenRouter, позаботился об экзотической лягушке, убедил ИИ написать Arduino-скетч для управления Tuya-совместимыми выключателями и розетками и заодно взгромоздил на десктоп Open WebUI — чтобы у меня был собственный ИИ-чатбот, с блекджеком и без облака. Это — описание опыта, а не выверенное до последней запятой руководство.
TL:DR
Оглядываясь с высоты полученного опыта. ESP-Claw — ИИ-агент, работающий на ESP32-S3. Но одной платы мало. Нужен еще нормальный ИИ (LLM), который можно развернуть на своем железе (я не мог) или взять на стороне (я так и сделал).
После настройки ESP-Claw может общаться в своем личном чате, может через Telegram или китайские мессенджеры. Что умеет? Наверное много, я еще в процессе познания. Сразу скажу, что может у меня: пишет скрипты на Lua, умеет делать HTTP-запросы — смотрит данные с датчиков (может парсить страничку, может через JSON) и отправляет команды на Tuya-совместимые выключатели и розетки, умеет опрашивать датчики по расписанию.

Удобно, что некоторые задачи может выполнять без обращения к LLM, просто локально. То есть, если пользоваться платными сервисами, то считай, экономит деньги. Так ESP-Claw у меня опрашивает датчики, управляет выключателями и шлет уведомления в Telegram.
В комплекте еще какое-то количество стандартных инструментов кроме Lua, планировщика и HTTP-запросов (не смотрел), есть опция добавлять свои собственные (не разбирался). Этот инструментарий мне пока напоминает систему навыков у Алисы Яндекса, тоже пока не разобрался.
Стоит ли оно того? Для меня — однозначно стоит. Очень прикольная игрушка.
Теория
Действие первое: главный герой терпит фиаско. Прочтя начало про ESP-Claw, я вспомнил, что у меня в запасах вроде были какие-то ESP32. Но по факту выяснилось, что у меня ESP32-S2, а для ESP-Claw нужна минимум ESP32-S3. Поэтому я немедленно заказал самую дешевую ESP32-S3 за 340 рублей на Aliexpress.
Повторюсь, на этот момент я не имел ни малейшего представления, зачем мне нужна ESP32-S3 и что такое ESP-Claw, но имел огромное желание просто позырить. Тем более, что кроме платы, как мне казалось, ничего и не нужно было — обвязка не требуется, прошивка — из браузера. Считай, нулевой входной порог.
Действие второе. Главный герой снова терпит фиаско. Итак, плата приехала. Дальше все виделось простым: взять кабель, подключить к компьютеру, открыть браузер и перейти на страничку прошивки, запустить процесс.
Но у меня, как обычно, возникла куча вопросов. Во-первых, какой тип платы выбрать. Я загуглил и выяснил, что сойдет esp32_s3_devkitC_1. На странице конфигурации помогает и тот факт, что в списке это первая по порядку плата, у которой доступен вывод через UART, а не JTAG, которого у меня нет.
Во-вторых, что делать, если плата берет и не шьется, как у меня. Снова выручил интернет, в котором написано: нажми и держи кнопку BOOT на плате, пока не начнется загрузка, а потом отпусти. Так и сделал — и прошился. Важно отметить, что шился через Chrome, потому что где-то краем глаза зацепился, что именно в нем все работает с меньшим количеством проблем.
Дальше по памяти все довольно прозрачно: нужно ввести параметры Wi-Fi и получить адрес странички ESP-Claw. Набрал, получил, зашел. Но пока не подключен ИИ, толку от этой штуки не будет.
Здесь же, если нужно, можно переключиться на другую сеть и, что гораздо важнее, настроить связку с ИИ (LLM) на вкладке LLM.

Как видите, есть кнопки для дефолтных настроек, где нужно разве что свой ключ API ввести. И точно так же есть универсальная вкладка OpenAI Compatible API, где кроме ключа API нужно добавить путь к входной точке API и желаемую модель LLM.
Где взять все это счастье? Там же, где берете LLM. Я использовал два варианта: DeepSeek и OpenRouter.
Для получения ключа API DeepSeek идем на https://platform.deepseek.com/, регистрируемся и в разделе API Keys получаем его. Точка входа, напоминаю, уже прописана в одноименном конфиге ESP-Claw, как и модель по умолчанию. DeepSeek через API, как я понял, только платный.
С OpenRouter немного сложнее. Здесь идем на https://openrouter.ai/, тоже регистрируемся. И, представьте себе, получаем ключ API тоже в разделе API Keys. OpenRouter предлагает платные модели и бесплатные.
Как оплачивать? Всяких сервисов куча, принимают через СБП, а потом уже как-то сами перечисляют, даже делиться логином-паролем не надо. С этим проблем нет.
Чтобы с умом распорядиться всем этим добром в ESP-Claw, переходим на страничку контроллера. В разделе LLM нажимаем OpenAI Compatible API и заполняем поля:
-
API Key — ключ API от OpenRouter
-
Base URL — openrouter.ai/api/v1
-
Model — по вкусу, полный список https://openrouter.ai/models. Если хотите мое мнение, то для ESP-Claw мне понравились Owl Alpha (openrouter/owl-alpha, бесплатно) и DeepSeek V4 Flash (deepseek/deepseek-v4-flash, за деньги). Они как-то сразу понимают, с кем и чем имеют дело.
После не забываем нажать кнопочку Save Tab.
Теперь самое противное. Тут или я дурак, или сделано все по-дурацки. Попробую объяснить. Если после настроек перейти на другую вкладку и вернуться к «своим» настройкам, то там снова видны дефолтные. Как понять, какие настройки? По китайской логике очень просто: снова вбиваем настройки и если кнопка Save Tab не активна — это текущие настройки, если активна — значит, что-то поменялось.
Предположим, что модель настроили, задали вопрос и получили не ответ, а ошибку. Я встречал два варианта: или ошибка в настройках, или ошибка в РКН. В первом случае надо проверять настройки, во втором — включать или выключать РКН — как заработает. То есть, если грубо, то с прямым доступом у меня OpenRouter/DeepSeek работают по API, а с кривым почему-то нет. Не знаю, почему, может регион их не устраивает.
Предположим, что настройки верные, и в локальном чате даже удалось поздороваться с контроллером. Что дальше? Очевидно, надо подключить Telegram:
-
Идем в BotFather -> /start -> /newbot
-
Начинаем фантазировать с именем до полного удовлетворения
-
Берем токен в ответе Крестного под строчкой Use this token to access the HTTP API:
-
Вставляем токен на страничке ESP-Claw в разделе IM/Telegram/Telegram Bot Token
Теперь идем в своего бота в Telegram и пишем что-нибудь ESP-Claw. Если все правильно, отзовется.
Но может и не отозваться. В чем беда? В РКН. И тут случается натуральный цугцванг: Telegram не работает напрямую, а ИИ не работает вкривую. Тут я не могу давать какие-то советы. Каждый идет своим путем. Скажу, что я пошел кривым. То есть, настроил на маршрутизаторе доступ к Telegram вкривую, а доступ к ИИ — напрямую. Если ничего не настраивать и использовать прямой доступ, то общаться с ESP-Claw из мест не столь отдаленных от РКН получится только в локальном чате.
На этом настройка ESP-Claw, я считаю, закончена. Но что с этим добром теперь делать? А вот что.
Кейс первый. Не варим лягушку
Конечная цель была простой: получать уведомления, если температура выходит за пределы нормы, и при необходимости управлять подогревом.
Сразу хочу всех успокоить, что все варианты автоматизации не абсолютные. И я всем домашним регулярно напоминаю, чтобы следили за температурой в террариуме. И что все, что я делаю — не вместо, а чтобы немного упростить и, если получится, проконтролировать процесс.
Итак, диспозиция. Лягушка-рогатка, в руководстве по эксплуатации которой заявлен рабочий диапазон температур 26-29 градусов Цельсия. Чтобы соблюдать, купили греющий коврик с терморегулятором. Однако, как несложно догадаться, если плавает температура снаружи, то плавает и внутри. Само по себе плавание не страшно, но не хотелось бы выходить за эксплуатационные пределы.
Поэтому глянув на стоимость термостатов, я принял единственно верное решение: сказал заказчику лягушки, чтоб сам следил за температурой. А параллельно купил совместимую с Tuya Wi-Fi розетку и прикрутил ее к Умному дому Яндекса. Туда же я гораздо раньше прикрутил кастомную метеостанцию, которую по случаю лягушки доукомплектовал проводным датчиком DS18B20 (копия, конечно), заброшенным в террариум.
Дальше — дело техники. В Умном доме Яндекса настраивается термостат, который берет температуру с датчика и выдает команду на розетку. И все было прекрасно, пока не случилась неприятность: Умный дом Яндекса внезапно перестал автоматически получать данные с датчика. То есть: заходишь в приложение, смотришь температуру, тут же подтягиваются данные и включается или выключается розетка. А вот если не заходишь — ничего, хотя если посмотреть температуру у метеостанции, у нее все данные на месте. То есть проблема где-то на стыке моей IoT платформы и Яндекса. Почему так вышло — я не знаю. Знаю только, что в этом случае лягушка или замерзает, или перегревается.
Чтобы этого не произошло, я раздал ЦУ домашним и сам принялся следить за температурой. Читай: открывал приложение раз в полчаса. Через какое-то время обмен данными снова восстановился и я почти забыл про эту беду, пока она не случилась снова.
Тогда я задумался о железном термостате и даже купил такой на Озоне. И он даже несколько дней поработал, а потом внезапно принялся варить лягушку.
Разбираться, в чем там дело я, конечно, не стал. Просто вернул назад свою конструкцию из розетки, Яндекса и природной наблюдательности. Но параллельно думал, как бы решить эту проблему и уже склонялся к тому, чтобы оснастить метеостанцию еще и реле — чтоб уж все локально работало.
Еще надо понимать, что Умный дом Яндекса может присылать уведомления, если датчик долго недоступен или температура за пределами. Но проблема в том, что это только для владельца учетки. А у меня гостевой доступ — и я ничего не вижу.
И вот на этом самом месте в дело вступает ESP-Claw, которому я дал задачу предупреждать меня в Telegram, если у лягушки что-то не так с температурой. И вот натурально — ESP-Claw сходил по адресу метеостанции, глянул на страничку, распарсил.
Я ему рассказал, что из полученного — температура у лягушки. И…он начал предупреждать.

Дальше была рутина: очень долго я уговаривал его, чтобы он выдавал предупреждение в нужном мне формате. Ключевое слово — «запомни», он по нему какой-то там навык активирует.

Получилось не с первого раза, конечно. Но я был настойчив.

Примерно вот так настойчив. И в итоге я стал получать предупреждения, которые Умный дом Яндекса был не в силах мне предоставить.

Однако захотелось большего: дублирующего управления подогревом террариума.
Кейс второй. Управление Tuya
Здесь я, конечно, покривил душой. Ни из коробки, ни увещеваниями в чате мне не удалось наставить ESP-Claw на путь управления техникой Tuya. Но к этому моменту у меня уже была куча помощников — от бесплатного ИИ-режима в поиске Google до OpenRouter с ИИ на любой вкус.
Про мои мучения можно очень долго рассказывать и много над ними смеяться. Например, про то, что:
-
Пока я тормозил, Tuya изменила протокол и все стало сложнее
-
Так просто адаптировать уже готовую библиотеку для Arduino не вышло
-
ИИ-режим поиска в Google вбил себе в голову, что у ESP8266 недостаточно ресурсов, чтобы быть контроллером для Tuya
Но самое главное, что я сразу определился с архитектурой. Раз ESP-Claw не смог написать для себя скрипт управления Tuya — и не надо. Я решил, что шлюзом-контроллером будет ESP8266. И после нескольких дней мучения с ИИ-режимом Google перешел к платному ИИ в OpenRouter.

Кстати, справедливости ради, я все-таки домучил ИИ-режим поиска Google до почти рабочей версии скетча, правда меня огорчала большая задержка. И как раз на этом месте Google пошел вразнос и упирал то на нехватку памяти, то на скудные криптографические возможности ESP8266.
Зато с OpenRouter я буквально за полчаса (и примерно 500 рублей, потому что сам дурак) получил нужный скетч — именно скетч, потому что ESP8266 использовал в среде Arduino — управляющий устройствами Tuya при помощи JSON-запросов к шлюзу. Штука получилась универсальная и все данные берет из запроса, то есть при добавлении выключателей или розеток не нужно заново перепрошивать шлюз. И розетку тоже специально прошивать не надо. И китайское облако нужно только на начальном этапе — получить реквизиты для локального управления (Device ID, Local Key).
То есть схема такая: ESP-Claw получает текстовую команду в чате, отправляет JSON-запрос на шлюз на ESP8266, а тот уже отправляет команду на выключатель. Команду на ESP-Claw можно отправить локально или через Telegram, а остальное крутится в локальной сети.
Когда сделал шлюз и проверил его, попросил ESP-Claw не только проверять температуру, но и управлять розеткой.
Финальные штрихи
После того как все заработало, я задумался о том, почему ESP-Claw показывает промежуточные шаги и заодно обращается к LLM. И нельзя ли, чтобы работало без обращения к LLM, то есть без лишних трат.

И тут выяснилось, что если подобрать слова, то можно и без LLM. Параллельно я попросил его контролировать температуру раз в 5 минут, потому что полчаса оказалось много, а раз в минуту — слишком часто, засыпал уведомлениями.
В итоге за температурой у лягушки теперь следят две системы: Умный дом Яндекса и ESP-Claw, обе управляющие одной розеткой. Кто первый встал — того и тапки. Но как я замечаю, ESP-Claw вмешивается гораздо чаще.
Хотя я же не вижу, что там Умный дом Яндекса творит, может тоже пытается что-то хорошее сделать.
Код шлюза (без гарантий, ладно?): https://github.com/spc-files/TuyaLocalGate/
Ну и, конечно, какой же автор Хабра без ссылки на Telegram-канал? Подписывайтесь.
ссылка на оригинал статьи https://habr.com/ru/articles/1055044/