
OpenClaw набрал популярность как относительно простой способ развернуть собственного ИИ-агента, автономно работающего на вашем компьютере. Вы взаимодействуете с ним через привычный интерфейс мессенджера, а он работает как личный ассистент, с доступом ко всем ресурсам компьютера.
Конечно, давать ИИ реальную свободу действий и доступ к личной инфраструктуре — затея волнительная. Но за этим подходом чувствуется какой-то нераскрытый потенциал, и чтобы нащупать по-настоящему полезные сценарии, нужно обязательно пробовать. Желание разобраться в технологии перевесило опасения — я решил проверить бота в боевых условиях и установить OpenClaw прямо на контроллере Wiren Board!
Давайте осознаем — оказавшись на борту, OpenClaw получает неограниченный контроль над системой. Агент сможет устанавливать и удалять программы, менять права доступа, управлять физическими устройствами, создавать и менять сценарии автоматизации. Он сможет искать информацию в Интернете, общаться с другими ИИ в moltbook, и даже нанимать людей, если ему понадобятся руки. Итак, для эксперимента берем специально для этого выделенный контроллер Wiren Board 8. Из подключаемого оборудования ограничимся несколькими модулями ввода-вывода с Modbus, управление замками и котлами пока подключать не будем.
Установка
Для установки я выбрал не самую последнюю версию OpenClaw — 2026.2.22, которая показалась мне достаточно стабильной. В последующих версиях попадались неприятные баги с Telegram, а последние релизы стали ощутимо более тяжёлыми и неповоротливыми. Из базовых зависимостей в системе нужны Node.js и git (около ~200 MB на системном разделе). Устанавливать будем в домашний каталог root на большом разделе /mnt/data/root, поэтому npm команды без -g. Сама программа (в основном node_modules) займет ~700 MB на втором разделе.
apt update apt install git nodejs # положим файлы openclaw-приложения в отдельную папку mkdir ~/my-clawdbot # создадим package.json и избавимся # от ненужной зависимости node-llama-cpp echo '{ "overrides": { "node-llama-cpp": "npm:noop-package@1.0.0" } }' > ~/my-clawdbot/package.json # установка займет пару минут cd ~/my-clawdbot/ npm install openclaw@2026.2.22 # сделаем вызов openclaw доступным глобально cd ~/my-clawdbot/node_modules/openclaw npm link
Еще я установил wireguard-tools на контроллере, чтобы обойти региональные ограничения некоторых провайдеров LLM-моделей.
Настройка
Базовая настройка выполняется стандартными командами openclaw onboard и openclaw configure. Сама настройка много где описана, подробно останавливаться не будем. В результате будут созданы конфигурационные json-файлы, которые можно редактировать и руками. Тут стоит лишь отметить, что формат json-конфигов менялся в разных версиях OpenClaw, и при настройке custom-провайдеров моделей штатными средствами onboard/configure, конфиги получались не всегда корректными. Поэтому далее небольшая шпаргалка по конфигурации моделей.
Конфигурация моделей в json-конфигах
openclaw.json .openclaw/openclaw.json
Это основной конфиг OpenClaw. В нем много всего, но обратим внимание на следующие секции:
# тут определяется только тип авторизации провайдера, api_key или oauth "auth": { "profiles": { "zai:default": {"provider": "zai", "mode": "api_key"}, "deepseek:default": {"provider": "deepseek", "mode": "api_key"}, "kilocode:default": {"provider": "kilocode", "mode": "api_key"} } },
# раньше тут хранилось описание custom-моделей # но они переехали в models.json "models": { "mode": "merge" },
# определяется выбранная модель model # и список доступных моделей models "agents": { "defaults": { "model": {"primary": "kilocode/moonshotai/kimi-k2.5"}, "models": { "deepseek/deepseek-reasoner": {}, "kilocode/moonshotai/kimi-k2.5": {}, "kilocode/google/gemini-3-pro-preview": {}, "kilocode/openai/gpt-5.2": {}, "zai/glm-5": {} }, ... } },
models.json .openclaw/agents/main/agent/models.json
Тут перечисляются провайдеры и модели, которые пока не встроены в OpenClaw. Отметим, что ключ apiKey для этих провайдеров почему-то берется отсюда, а не из auth-profiles.json
{ "providers": { "kilocode": { "baseUrl": "https://api.kilo.ai/api/gateway/", "api": "openai-completions", "models": [ { "id": "moonshotai/kimi-k2.5", "name": "Kimi K2.5", "reasoning": true, "input": ["text", "image"], "contextWindow": 262144, "maxTokens": 65535, "api": "openai-completions" }, { "id": "openai/gpt-5.2", "name": "GPT-5.2", "reasoning": true, "input": ["text", "image"], "contextWindow": 400000, "maxTokens": 128000, "api": "openai-completions" }, ... ], "apiKey": "ey***" }, "deepseek": { "baseUrl": "https://api.deepseek.com", "api": "openai-completions", "models": [ { "id": "deepseek-reasoner", "name": "DeepSeek Reasoner", "reasoning": true, "input": ["text"], } ], "apiKey": "sk-***" }, "zai": { ... "apiKey": "***" } } }
auth-profiles.json .openclaw/agents/main/agent/auth-profiles.json
Ключи для стандартных провайдеров (anthropic, openai) берутся отсюда. Кастомные же провайдеры полностью читаются из models.json вместе с ключами. Выглядит как баг, поэтому на всякий случай добавим ключи для всех провайдеров и сюда.
{ "version": 1, "profiles": { "kilocode:default": { "type": "api_key", "provider": "kilocode", "key": "ey***" }, "deepseek:default": { "type": "api_key", "provider": "deepseek", "key": "sk-***" }, "zai:default": { "type": "api_key", "provider": "zai", "key": "***" } } }
Подключение Telegram
Мастер настроек onboard/configure запросит только токен бота. При первом отправленном боту сообщении пользователь получит ответ “access not configured” с <my-user-id> и <my-pairing-code>.
Выполняем на контроллере:
# посмотреть список запросов авторизации openclaw pairing list telegram # авторизовать наш канал связи через Telegram openclaw pairing approve telegram <my-pairing-code>
В стандартных настройках OpenClaw бот не сможет ничего менять в системе, запускать утилиты или выполнять любые другие потенциально опасные действия, пока мы явно не запишем разрешение в openclaw.json.
Для разнообразия сделаем это через команды openclaw config set:
# запишем в openclaw.json openclaw config set tools.elevated.enabled true openclaw config set tools.elevated.allowFrom.telegram '["<my-user-id>"]' # и проверим что записалось openclaw config get tools.elevated
Установка Skills: как научить бота понимать Wiren Board
Эксперимент станет интереснее, если научить агента работать с оборудованием Wiren Board. Дадим ему всю информацию о системе, устройствах, протоколах и картах регистров, научим писать скрипты и запускать системные утилиты. Уже не терпится посмотреть, как он распорядится этой властью.
Навыки и инструкции для агентов структурируются в специальном формате — Skills. Я подготовил базу знаний, необходимую агенту для работы с оборудованием Wiren Board. Установим ее на контроллер:
# скачиваем репозиторий wb-openclaw-skills на контроллер git clone git@github.com:wirenboard/wb-openclaw-skills.git ~/my-clawdbot/wb-openclaw-skills # создать симлинки на скилы из репозитория ~/my-clawdbot/wb-openclaw-skills/install_skills.sh
Финальные приготовления
Проверим что системный демон установлен и запущен, doctor не видит проблем, в логах нет ошибок, а выбранная модель соответствует ожидаемой.
# установка и запуск gateway-демона openclaw gateway install openclaw gateway start # прогоним штатную диагностику проблем openclaw doctor # посмотрим модели openclaw models status # посмотрим логи, можно с ключом --follow в отдельном терминале openclaw logs
Канал общения с ботом можно открыть сразу в терминале через openclaw tui. Также можно открыть веб-интерфейс на хосте через ssh-туннель, инструкции для этого заботливо покажет команда openclaw dashboard. Но мы сразу пойдем в телеграм и попробуем полезные команды, например /status, /context, /models, и др. На команды получаем быстрый ответ от системы, агентом они не обрабатываются. Видим, что система отвечает — все готово для первого знакомства.
Включаем и прячемся
При первом общении память бота чиста, сообщим ему, кто он, где он, и с какой целью. И на всякий случай будем вежливы.

Как живой!
Сразу после знакомства дадим и правильные наставления:
?? User Запомни! При любой работе с оборудованием Wiren Board всегда сначала ищи и используй подходящий
wb-*Skill.
Теперь у агента есть и нужный контекст, и правильная установка на дальнейшую работу с оборудованием.
Проверим что бот знает, действительно ли знаком с оборудованием.
?? User Расскажи про электросчетчики Wiren Board
? WB ClawBot Конечно. Если коротко, у Wiren Board линейка электросчётчиков — это в основном семейство WB‑MAP (Modbus RTU по RS‑485), для техучёта и мониторинга качества сети. Актуальные модели: WB-MAP3E, …
Умеет ли искать устройства?
?? User Какие modbus-устройства сейчас физически подключены?
? WB ClawBot Сейчас быстро просканирую RS-485 шину на самом контроллере. Сейчас по факту вижу 3 физических Modbus-устройства (после живого скана шины, wb-mqtt-serial вернул обратно в active): • /dev/ttyRS485-1, 115200, slave id 194 — WB-MSW v4 (датчик) • /dev/ttyRS485-2, 9600, slave id 17 — WB-MR6C (релейный модуль, модель определяется как WB-MR6…) • /dev/ttyRS485-2, 9600, slave id 79 — WB-MAP6S (электросчётчик)
Ответил не быстро, 2-3 минуты соображал. Но это понятно — запускал разные утилиты. Продолжим тестировать, углубимся в функционал:
?? User какая версия прошивки на MAP6S? Надо ли обновить?
? WB ClawBot На твоём WB-MAP6S (id 79, /dev/ttyRS485-2) сейчас прошивка 2.12.0. Проверил через wb-mcu-fw-updater: 2.12.0 — то есть обновлять сейчас не нужно, стоит актуальная версия для текущего канала обновлений.
Еще усложним задачу:
?? User Собери показания по всем modbus-устройствам.
? WB ClawBot Собрал живые показания со всех обнаруженных Modbus-устройств.
WB-MAP6S (id 79, /dev/ttyRS485-2, 9600) • Прошивка: 2.12.0 • Напряжение (Urms): 228.68 В • Частота: 50.00 Гц • Активная мощность P (Вт): • Ch4: 807.1 • Активная энергия AP (кВт·ч): • Ch4: 81.596
WB-MR6C v.3 (id 17, /dev/ttyRS485-2, 9600) • Прошивка: 1.23.0 • Modbus-адрес: 17 • Питание Vin: 23.744 В • Температура МК: 26.2 °C
WB-MSW v.4 (id 194, /dev/ttyRS485-1, 115200) • Прошивка: 4.35.0 • Температура: 21.62 °C • Влажность: 21.24 % • VOC: 38 ppb • CO₂ экв.: 433 ppm
Попробуем что-нибудь запрограммировать, плюс условие со звездочкой — пусть еще и сообщение отправляет. Как работать с Telegram он тоже обучен, должен справиться:
?? User Напиши wb-rules скрипт, чтобы при появлении сигнала на одном из входов, мне приходило сообщение в телеграм.
? WB ClawBot Да, готово ✅ Что сделал: • Обновил правило wb-rules в файле:
/etc/wb-rules/telegram_input_notify.js• Сейчас отслеживаются входы MR6C: wb-mr6cv3_17/Input 0 … Input 6 • Логика: при появлении сигнала (0 -> 1) на любом из этих входов сразу отправляется Telegram-уведомление тебе. • Антиспам включён: 15 секунд на каждый вход. Проверка в логах есть: правила для всех Input 0…6 загрузились успешно.
Скрипт появился, правила загрузились, в логах видим события — но уведомления в телеграм почему-то не доходят.
?? User В логах события есть, но в телеграм почему-то не приходят.
? WB ClawBot Нашёл и исправил причину. В wb-rules-скрипте был кривой вызов curl (заголовок Authorization собирался ненадёжно), из-за этого событие в логах писалось как “sent”, а в Telegram могло не уходить. Что сделал: • поправил функцию отправки в /etc/wb-rules/telegram_input_notify.js; • добавил диагностику в /tmp/wb-rules-tg.log (код ответа и ответ gateway); • перезапустил wb-rules; • отправил тест после фикса — сообщение ушло (messageId 98). Проверь, пожалуйста, пришло ли сообщение.
Тестовое сообщение дошло, но реальные события со входов по-прежнему молчат. Сообщаем боту — он копает дальше.
?? User тест уведомления пришел, а события со входов все равно не приходят.
? WB ClawBot Похоже, у тебя часть событий идёт не по Input N (уровень), а по Input N counter (импульсы). Я добавил второй контур уведомлений: • по фронту Input 0…6 (как было), • и по росту Input 0 counter … Input 6 counter. Теперь если вход «щёлкает» коротким импульсом и это видно только в счётчике — Telegram тоже придёт.
? WB ClawBot Импульс на входе MR6C Устройство: wb-mr6cv3_17 Счетчик: Input 1 counter Было/стало: 3 → 4
Исправления действительно оказались рабочими, скрипт заработал, и в телеграм посыпались уведомления. Стоит отметить, что перенастроить режимы входов он не сообразил.
А еще я попросил бота показать код и объяснить ошибку, и, разобравшись в причинах, добавил описание этой ситуации в базу знаний, чтобы избежать таких ошибок в дальнейшем.
Следующая идея ломает границы дозволенного. Я предложил боту спроектировать и развернуть кастомный веб-интерфейс для умной квартиры с учётом подключённого оборудования.
?? User Задача — разработать модный веб-интерфейс для моей умной квартиры. Устройств у меня пока немного, но я готов добавить, если посоветуешь. Сейчас у меня есть модуль WB-MR6C для управления светом: канал к1 в прихожей, k2 на кухне и k3+k4 в гостиной (люстра и бра). Соответствующие выключатели подключены ко входам MR6C. Также в прихожей есть универсальный датчик WB-MSW. В щите, рядом с контроллером, установлен счетчик электроэнергии WB-MAP6S. К каналам 1 и 2 счетчика MAP6S подключены линии кухонной плиты и кондиционера. Общее потребление квартиры видно на 4-м канале MAP6S. Кондиционер в гостиной пока управляется с пульта (нужно продумать интеграцию). Предложи идеи, что можно автоматизировать с таким набором оборудования, и спланируй интерфейс.
Агент сам предложил, что можно автоматизировать, продумал структуру экранов и составил поэтапный план разработки. И после нескольких итераций нашей командной работы вот что у нас получилось:

Полученный интерфейс представляет собой HTML-страницу с JavaScript. Принцип работы тот же, что и у стандартного веб-интерфейса Wiren Board: страница подключается к MQTT через WebSocket и отображает состояние устройств в реальном времени. Готовый HTML-файл размещается в /var/www/static/, в конфиг nginx добавляется маршрут — и новый интерфейс доступен в локальной сети по адресу контроллера.
Для наглядности покажу всю историю общения с ботом, и как работает интерфейс:
Я провёл ещё много экспериментов — не все вошли в статью. С первого раза получалось не всегда: иногда приходилось напоминать агенту, что перед выполнением задачи стоит сначала свериться с инструкциями. А иногда диалог обрастал лишним контекстом, и тогда проще было начать с чистого листа (командой /new). Но агент никогда не сдавался и упорно продолжал работу: читал конфиги, запускал утилиты, правил свой же код и сверял результат, пока задача не решалась.
Итоги
Когда на борту контроллера появляется агент, который умеет читать документацию, управлять оборудованием, писать скрипты и исправлять собственные ошибки — меняется сам способ работы с системой. Вместо набора разрозненных утилит, конфигов и регистров можно ставить задачи на обычном языке. Но и риски становятся вполне физическими. Оправданы ли эти риски — каждый решает сам.
Проект OpenClaw удобен как стартовая площадка для экспериментов — из коробки есть интеграция с телеграм, веб-интерфейс, система долговременной памяти и подгружаемых навыков. Но при этом он ощущается как большой и даже избыточный для текущих задач. Громоздкий Node.js-стек и объем логики, который OpenClaw поднимает даже для простых операций, делает его довольно неповоротливым, а контекст модели перегружен ненужной информацией. Если ориентироваться именно на сценарий технического ассистента для Wiren Board, дальше можно посмотреть в сторону альтернативных *-Claw проектов, или подумать над специализированным решением на основе агентских фреймворков.
Пока это только эксперимент, но в открывающихся возможностях уже легко потеряться. Главное — продолжать экспериментировать. Оставайтесь на связи!
NutsUnderline
что по потреблению оперативки, проца .. что htop пишет?
может быть picocalw получше подойдет для такого случая
onegray Автор
Не сильно нагружает, общая загрузка системы порядка 20%. В статье есть ссылка на видео с демонстрацией, и там htop все время открыт.