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-устройств.

  1. WB-MAP6S (id 79, /dev/ttyRS485-2, 9600) • Прошивка: 2.12.0 • Напряжение (Urms): 228.68 В • Частота: 50.00 Гц • Активная мощность P (Вт): • Ch4: 807.1 • Активная энергия AP (кВт·ч): • Ch4: 81.596

  2. WB-MR6C v.3 (id 17, /dev/ttyRS485-2, 9600) • Прошивка: 1.23.0 • Modbus-адрес: 17 • Питание Vin: 23.744 В • Температура МК: 26.2 °C

  3. 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 проектов, или подумать над специализированным решением на основе агентских фреймворков.

Пока это только эксперимент, но в открывающихся возможностях уже легко потеряться. Главное — продолжать экспериментировать. Оставайтесь на связи!

Комментарии (4)


  1. NutsUnderline
    30.04.2026 07:30

    что по потреблению оперативки, проца .. что htop пишет?

    может быть picocalw получше подойдет для такого случая


    1. onegray Автор
      30.04.2026 07:30

      Не сильно нагружает, общая загрузка системы порядка 20%. В статье есть ссылка на видео с демонстрацией, и там htop все время открыт.


  1. Nemkocat
    30.04.2026 07:30

    А что за песня играет на видео?)


    1. onegray Автор
      30.04.2026 07:30

      Maylynne - Catch Me, из фильма The Scene.