VK-бот для управления 3D-принтером (Klipper/Moonraker)
Полноценный бот для сообщества ВКонтакте, который позволяет управлять 3D-принтером под управлением Klipper + Moonraker: смотреть статус, температуры, управлять питанием (принтер, свет, хост), запускать печать из списка файлов, делать фото и видео (с управлением светом), получать автоматические уведомления о состоянии печати.
Оглавление
- Требования
- 🚀 Быстрая установка
- Установка пакетов и зависимостей
- Настройка сообщества ВКонтакте и получение токена
- Получение API-ключа Moonraker (опционально)
- Настройка Яндекс.Диска для видео (опционально)
- Настройка переменных окружения (.env)
- Настройка автоматических уведомлений
- Создание виртуального окружения и установка зависимостей
- Запуск бота вручную
- Проверка работоспособности
- Команды бота
- Автозапуск при старте системы (systemd)
- Удаление сервиса автозапуска
- Устранение неполадок
- Дополнительные замечания
- Вклад и поддержка
Требования
- Сервер с установленным Klipper + Moonraker (например, Orange Pi, Raspberry Pi).
- Камера, поддерживающая MJPEG-поток (например, через crowsnest или mjpg‑streamer).
- Python 3.9+,
pip,git,ffmpeg. - Сообщество ВКонтакте (тип «Группа» или «Публичная страница»).
- Яндекс.Диск (опционально, для отправки видео).
- Доступ к Moonraker API (обычно через
localhost:7125).
🚀 Быстрая установка
git clone https://gitflic.ru/project/romariokk/vk_bot_klipper.git
cd vk_bot_klipper
sudo bash install.sh
Скрипт: 1. Установит системные пакеты (python3-venv, git, ffmpeg) 2. Запросит VK_TOKEN, MOONRAKER_URL, MOONRAKER_API_KEY, YANDEX_DISK_TOKEN, NOTIFY_CONFIG, CAMERA_URL, CAMERA_STREAM_URL, PRINTER_POWER_DEVICE, LIGHT_POWER_DEVICE 3. Скопирует проект в ~/vk_moonraker_bot 4. Создаст .env, виртуальное окружение и установит зависимости 5. Настроит и запустит systemd-сервис vk-moonraker-bot 6. Предложит удалить исходный клон ~/vk_bot_klipper
Примечание: после установки папку
~/vk_bot_klipperможно удалить — рабочая копия бота живёт в~/vk_moonraker_bot. Скрипт сам предложит это сделать.💾 Бэкап конфигурации: при удалении
uninstall.shавтоматически сохраняет.envв~/vk_bot_env_backup.txt. При следующей установкеinstall.shобнаружит бэкап и предложит использовать сохранённые значения — вводить токены заново не придётся. Если хотите начать с чистого листа, удалите бэкап перед установкой:rm ~/vk_bot_env_backup.txt
Проверить статус:
sudo systemctl status vk-moonraker-bot
sudo journalctl -u vk-moonraker-bot -f
Удаление
cd ~/vk_moonraker_bot
sudo bash uninstall.sh
Скрипт: 1. Остановит и удалит systemd-сервис vk-moonraker-bot 2. Сохранит .env в ~/vk_bot_env_backup.txt (права 600 — только владелец) 3. Спросит, удалять ли директорию бота 4. Спросит, удалять ли исходный клон ~/vk_bot_klipper (если остался)
Про бэкап
.env: файл создаётся автоматически, если.envсуществует на момент удаления. При повторной установкеinstall.shобнаружит его и предложит использовать сохранённые значения. Токены при показе маскируются — видны только первые символы.
Установка пакетов и зависимостей
Подключитесь к вашему серверу (например, через SSH) и выполните команды:
# Обновление системы и установка базовых пакетов
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-pip python3-venv git ffmpeg
# Проверка версии Python (должна быть 3.9+)
python3 --version
Примечание: при быстрой установке через
install.shэтот шаг выполняется автоматически.
Настройка сообщества ВКонтакте и получение токена
-
Создайте сообщество (если ещё нет):
- Перейдите на vk.com/groups → «Создать сообщество».
- Задайте название, тип (группа или публичная страница).
-
Включите сообщения бота:
- Управление → Настройки для бота → «Возможности ботов» → Включить.
- Также включите «Сообщения сообщества».
-
Получите ключ доступа (токен):
- Управление → Работа с API → «Ключи доступа».
- Нажмите «Создать ключ».
- Отметьте галочки:
- ✅ Разрешить приложению доступ к управлению сообществом
- ✅ Разрешить приложению доступ к сообщениям сообщества
- ✅ Разрешить приложению доступ к документам сообщества (для отправки видео)
- Скопируйте полученный токен (начинается с
vk1.a.).
Примечание: ID сообщества (
GROUP_ID) не требуется вводить в.env– бот определяет его автоматически из токена.
Получение API-ключа Moonraker (опционально)
Если в вашем moonraker.conf не настроен api_key, можно оставить поле пустым. Если нужен ключ:
# В файле конфигурации Moonraker (обычно ~/printer_data/config/moonraker.conf)
# Добавьте или раскомментируйте строку:
api_key: ваш_сложный_ключ
# После изменения перезапустите Moonraker:
sudo systemctl restart moonraker
Настройка Яндекс.Диска для видео (опционально)
Если вы хотите, чтобы бот отправлял видео (через команду «видео»), нужно настроить загрузку на Яндекс.Диск.
-
Создайте приложение на oauth.yandex.ru:
- Название: любое (например,
3D Printer Bot). - Платформа: «Веб‑сервисы».
- Redirect URI:
https://oauth.yandex.ru/verification_code(подойдёт любой). - Права:
- ✅ Яндекс.Диск REST API → Запись в любом месте на Диске
- ✅ Яндекс.Диск REST API → Доступ к информации о публичных ресурсах
- Сохраните
Client ID.
- Название: любое (например,
-
Получите токен:
-
Перейдите по ссылке:
https://oauth.yandex.ru/authorize?response_type=token&client_id=ВАШ_CLIENT_ID - Подтвердите доступ, скопируйте полученный токен (выглядит как
y0_AgAAAA...).
-
-
Опционально: создайте папку на Яндекс.Диске для видео и запишите её ID (по умолчанию бот загружает в корень).
Важно: если
YANDEX_DISK_TOKENне задан, команда «видео» автоматически отключается — кнопка не появится в меню, пакетyadiskне устанавливается.
Настройка переменных окружения (.env)
Создайте файл .env в корне проекта:
nano .env
Готовый шаблон — в файле .env.example. Скопируйте его и заполните:
cp .env.example .env
nano .env
Содержимое (замените на свои значения):
VK_TOKEN=vk1.a.XXXX...
MOONRAKER_URL=http://localhost:7125
MOONRAKER_API_KEY=
YANDEX_DISK_TOKEN=
NOTIFY_CONFIG=1,5,15
CAMERA_URL=http://localhost:8080/?action=snapshot
CAMERA_STREAM_URL=http://localhost:8080/?action=stream
PRINTER_POWER_DEVICE=TronxyX5SA
LIGHT_POWER_DEVICE=Light
Параметры:
| Переменная | Обязательна | Описание |
|---|---|---|
VK_TOKEN |
✅ | Токен сообщества (формат vk1.a....). |
MOONRAKER_URL |
✅ | Адрес Moonraker (обычно http://localhost:7125). |
MOONRAKER_API_KEY |
❌ | API-ключ Moonraker (если не требуется, оставьте пустым). |
YANDEX_DISK_TOKEN |
❌ | Токен Яндекс.Диска. Нужен только для команды «видео». |
NOTIFY_CONFIG |
❌ | Настройка автоуведомлений (формат вкл,мин,прогресс). |
CAMERA_URL |
❌ | URL камеры для снимка. По умолчанию http://localhost:8080/?action=snapshot. |
CAMERA_STREAM_URL |
❌ | URL камеры для видеопотока. По умолчанию http://localhost:8080/?action=stream. |
PRINTER_POWER_DEVICE |
❌ | Имя устройства питания принтера в moonraker.conf. По умолчанию TronxyX5SA. |
LIGHT_POWER_DEVICE |
❌ | Имя устройства питания света в moonraker.conf. По умолчанию Light. |
Сохраните файл (Ctrl+O, Enter, Ctrl+X).
Бэкап конфигурации
Файл .env содержит все ваши токены. uninstall.sh автоматически сохраняет его копию в ~/vk_bot_env_backup.txt перед удалением бота. При следующей установке install.sh обнаружит бэкап и предложит использовать сохранённые значения — вводить токены вручную не потребуется.
Если хотите сохранить .env самостоятельно (например, до запуска uninstall.sh):
cp ~/vk_moonraker_bot/.env ~/vk_bot_env_backup.txt
chmod 600 ~/vk_bot_env_backup.txt
Если хотите начать с чистого листа — удалите бэкап:
rm ~/vk_bot_env_backup.txt
Безопасность: файл бэкапа имеет права
600— читать его может только владелец (klipper). Не копируйте его в публичные папки, не отправляйте никому и не коммитьте в Git.
Настройка автоматических уведомлений
Параметр NOTIFY_CONFIG задаётся в формате включено,интервал_минут,шаг_прогресса:
- Первое число (
1или0): включить (1) или выключить (0) все автоуведомления (включая уведомления о запуске бота, включении/выключении принтера, начале/конце печати и периодические отчёты). - Второе число: интервал в минутах. Если
0– отправка по времени отключена. Если больше0– бот будет каждые N минут присылать текущий статус печати. - Третье число: шаг прогресса в процентах. Если
0– отправка по прогрессу отключена. Если больше0– бот будет присылать уведомления при достижении прогресса, кратного этому числу (например, 15, 30, 45…).
Примеры:
NOTIFY_CONFIG |
Описание |
|---|---|
1,5,15 |
Уведомления включены, каждые 5 минут и при 15%, 30%, 45%… прогресса. |
1,0,20 |
Только по прогрессу (20%, 40%, 60%, 80%, 100%). |
1,10,0 |
Только каждые 10 минут (без привязки к прогрессу). |
0,0,0 |
Все автоуведомления отключены. |
Важно: бот автоматически определяет
CHAT_ID(идентификатор чата для уведомлений) при первом обращении пользователя – вам не нужно указывать его вручную.
Создание виртуального окружения и установка зависимостей
# В папке проекта
python3 -m venv venv
source venv/bin/activate # активируем окружение
# Устанавливаем необходимые библиотеки
pip install --upgrade pip
pip install vkbottle python-dotenv aiohttp
Если планируете использовать видео — дополнительно:
pip install yadisk requests
Примечание: при быстрой установке через
install.shэтот шаг выполняется автоматически. Пакетyadiskставится только если заданYANDEX_DISK_TOKEN.
Запуск бота вручную
# Убедитесь, что находитесь в папке проекта и активировали venv
source venv/bin/activate
python bot.py
В терминале появится:
INFO:__main__:Бот запущен
INFO:vkbottle:Starting BotPolling for <API ...>
Теперь бот работает и отвечает на команды в сообществе.
Проверка работоспособности
Напишите в сообщество «начать» – бот отправит приветствие и клавиатуру.
Проверьте основные команды:
- «статус» – фото + информация о принтере (температуры, вентиляторы, прогресс печати).
- «файлы» – список G-код файлов, кнопки для запуска печати.
- «🔌» – подменю управления питанием принтера, света и выключения хоста.
- «видео» (если настроен Яндекс.Диск) – записывает 5-секундное видео, загружает на Диск, возвращает ссылку.
Команды бота
Все команды отправляются текстом в чат с сообществом. Также доступны клавиатуры с кнопками.
Главное меню (кнопки)
| Кнопка | Действие |
|---|---|
| статус | Отправить фото с камеры (с включением/выключением света) и подробный отчёт: состояние принтера, прогресс печати (если идёт), температуры экструдера и стола, температуру MCU и хоста, состояния вентиляторов (обдув модели, экструдера, драйверов, корпусный), состояние устройств питания, сообщение с дисплея (M117). |
| 🔌 | Перейти в подменю управления питанием (принтер, свет, хост). |
| файлы | Показать список последних 10 G-код файлов с датами модификации. Для каждого файла формируется кнопка «печать <имя>». |
| видео (если настроен Яндекс.Диск) | Записать 5-секундное видео с камеры (с включением света за 2 секунды до записи), загрузить на Яндекс.Диск (перезапись файла video.mp4) и отправить прямую ссылку на скачивание. |
Системное подменю (кнопки)
| Кнопка | Действие |
|---|---|
| 🔌 Принтер | Включить/выключить питание принтера. Запрашивает подтверждение. |
| 💡 Свет | Включить/выключить свет. Запрашивает подтверждение. |
| ⚡ Выключить хост | Выключить хост (Orange Pi). Запрашивает подтверждение. |
| ◀️ назад | Вернуться в главное меню. |
Кнопки управления печатью (появляются в главном меню, когда печать активна или на паузе)
| Кнопка | Действие |
|---|---|
| ⏸ Пауза / ▶ Возобновить | Приостановить или возобновить текущую печать. Запрашивает подтверждение. |
| 🛑 Стоп | Остановить печать. Запрашивает подтверждение. |
Дополнительные команды (текстовые)
| Команда | Действие |
|---|---|
начать, старт, привет, start, Начать |
Показать главное меню с полным приветствием. |
назад |
Вернуться в главное меню из любого подменю. |
печать <имя_файла> |
(Не вводится вручную) – кнопка, создаваемая для каждого файла. Запускает печать выбранного файла после подтверждения. |
Автоматические уведомления (если включены)
- При запуске бота – сообщение о готовности.
- При включении/выключении принтера (если действие произошло не через бота).
- При начале, успешном завершении, ошибке или отмене печати.
- Периодически (по времени или прогрессу) – статус печати с прогрессом, временем, температурами.
Автозапуск при старте системы (systemd)
Примечание: при быстрой установке через
install.shsystemd-сервис создаётся и запускается автоматически. Раздел ниже — для ручной установки.
Чтобы бот запускался автоматически после перезагрузки хоста, создайте systemd-сервис.
-
Создайте файл сервиса:
sudo nano /etc/systemd/system/vk-moonraker-bot.service -
Вставьте содержимое (поправьте пути и пользователя, если нужно):
[Unit] Description=VK Bot for Moonraker After=network.target moonraker.service Wants=moonraker.service [Service] Type=simple User=klipper Group=klipper WorkingDirectory=/home/klipper/vk_moonraker_bot Environment="PATH=/home/klipper/vk_moonraker_bot/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ExecStart=/home/klipper/vk_moonraker_bot/venv/bin/python /home/klipper/vk_moonraker_bot/bot.py Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target -
Перезагрузите systemd и включите сервис:
sudo systemctl daemon-reload sudo systemctl enable vk-moonraker-bot.service sudo systemctl start vk-moonraker-bot.service -
Проверьте статус:
sudo systemctl status vk-moonraker-bot.service -
Просмотр логов:
sudo journalctl -u vk-moonraker-bot -f
Управление сервисом
Бот будет запускаться автоматически после сети и Moonraker. При падении сервис будет перезапускаться через 10 секунд.
Для управления используйте стандартные команды systemctl:
-
Остановить:
sudo systemctl stop vk-moonraker-bot -
Запустить:
sudo systemctl start vk-moonraker-bot -
Перезапустить:
sudo systemctl restart vk-moonraker-bot -
Отключить автозапуск:
sudo systemctl disable vk-moonraker-bot
Удаление сервиса автозапуска (при необходимости)
sudo systemctl stop vk-moonraker-bot
sudo systemctl disable vk-moonraker-bot
sudo rm /etc/systemd/system/vk-moonraker-bot.service
sudo systemctl daemon-reload
Примечание: для полного удаления бота (вместе с директорией и
.env) используйтеuninstall.sh— см. раздел «Быстрая установка». Он создаст автобэкап.envперед удалением.
Устранение неполадок
Ошибки при установке
| Проблема | Причина | Решение |
|---|---|---|
bash: /dev/fd/63: No such file or directory |
Конструкция <(curl ...) не работает под sudo — root-процесс не видит файловый дескриптор, созданный в пользовательской оболочке |
Используйте установку через git clone (см. раздел «Быстрая установка») или передайте скрипт через конвейер: curl -s ... \| sudo bash |
404 Not Found при скачивании install.sh |
GitFlic не поддерживает raw-ссылки вида raw/branch/master/... |
Клонируйте репозиторий: git clone https://gitflic.ru/project/romariokk/vk_bot_klipper.git — затем запустите sudo bash install.sh из папки проекта |
bash: install.sh: No such file or directory |
Файл не скачался или скачался пустым (0 байт) | Проверьте: ls -la install.sh. Если размер 0 — используйте git clone, а не curl |
Установка прерывается на apt-get install |
Нет доступа к репозиториям Debian или нет интернета | Проверьте sudo apt update вручную, убедитесь, что сеть работает |
install.sh не предлагает использовать бэкап .env |
Файл ~/vk_bot_env_backup.txt не найден или содержит пустой VK_TOKEN |
Проверьте: ls -la ~/vk_bot_env_backup.txt. Если файла нет — введите параметры вручную. Если VK_TOKEN пуст — скрипт автоматически переключится на ручной ввод |
Ошибки при запуске сервиса
| Проблема | Причина | Решение |
|---|---|---|
RuntimeError: no running event loop |
В bot.py используется bot.run_forever() вместе с asyncio.create_task() — в vkbottle 4.x такой порядок не работает |
Обновите bot.py — последний блок должен быть:async def main():...await bot.run_polling()if __name__ == "__main__":asyncio.run(main()) |
TypeError: 'list' object is not callable при @bot.loop_wrapper.on_startup |
API loop_wrapper устарел и удалён в vkbottle 4.x |
Уберите декоратор @bot.loop_wrapper.on_startup, используйте asyncio.run(main()) с await bot.run_polling() |
ModuleNotFoundError: requests is not installed |
yadisk требует requests для HTTP-сессий, но не тянет его как зависимость |
Установите: sudo -u klipper /home/klipper/vk_moonraker_bot/venv/bin/pip install requests, затем sudo systemctl restart vk-moonraker-bot |
Сервис падает с status=1/FAILURE и перезапускается по кругу |
Любая из ошибок выше | Смотрите логи: sudo journalctl -u vk-moonraker-bot -n 50 --no-pager. После исправления сбросьте счётчик: sudo systemctl reset-failed vk-moonraker-bot && sudo systemctl restart vk-moonraker-bot |
restart counter is at N и сервис не поднимается |
systemd ушёл в защиту после нескольких падений | Выполните sudo systemctl reset-failed vk-moonraker-bot, затем sudo systemctl restart vk-moonraker-bot |
Сервис active, но бот не отвечает в ВК |
Токен невалидный или у сообщества не включены нужные опции | Проверьте: 1) в ВК включены «Сообщения сообщества» и «Возможности ботов»; 2) токен имеет права на управление сообществом и сообщения; 3) в логах нет ошибок авторизации |
Ошибки взаимодействия с Moonraker
| Проблема | Причина | Решение |
|---|---|---|
Moonraker error 503: Klippy Host not connected |
Klipper потерял связь с платой принтера: принтер выключен, Klipper не запущен, или прошивка MCU не загружена | Проверьте sudo systemctl status klipper и питание принтера. Если принтер выключен — это нормальное поведение, бот продолжит работу без данных Klipper |
Moonraker вернул 401 или 403 |
Включена авторизация Moonraker, но MOONRAKER_API_KEY пустой или неверный |
Скопируйте api_key из moonraker.conf и укажите в .env, затем перезапустите сервис |
Connection refused при обращении к Moonraker |
Moonraker не запущен или слушает другой адрес | Проверьте sudo systemctl status moonraker и MOONRAKER_URL в .env. Убедитесь, что curl работает: curl http://localhost:7125/server/info |
| Бот не находит устройство питания | Имя устройства в .env не совпадает с moonraker.conf |
Проверьте секцию [power ...] в moonraker.conf. Обновите PRINTER_POWER_DEVICE и LIGHT_POWER_DEVICE в .env, перезапустите сервис |
Ошибки камеры и фото
| Проблема | Причина | Решение |
|---|---|---|
photo is undefined в логах |
Разовая неудача VK API при загрузке фото. Бот повторяет попытку до 3 раз | Фото обычно всё равно доходит со второй попытки. Если хочется чистых логов — замените logger.warning на logger.debug в status_handler (функция в bot.py) |
| Фото не отправляется совсем | Камера не отдаёт снимок по CAMERA_URL |
Проверьте: curl -s -o /tmp/test.jpg -w "HTTP %{http_code}, размер %{size_download}\n" "http://localhost:8080/?action=snapshot". Если размер 0 или ошибка — проблема в камере (crowsnest / mjpg-streamer) |
Camera returned 404 |
Неверный URL в CAMERA_URL |
Проверьте адрес камеры через браузер. Обновите CAMERA_URL в .env, перезапустите сервис |
crowsnest не запущен |
Сервис камеры упал | sudo systemctl status crowsnest, затем sudo systemctl restart crowsnest |
Ошибки видео и Яндекс.Диска
| Проблема | Причина | Решение |
|---|---|---|
ModuleNotFoundError: No module named 'yadisk' |
Пакет не установлен, потому что при установке не задали YANDEX_DISK_TOKEN |
Установите вручную: ./venv/bin/pip install yadisk requests, перезапустите сервис |
Ошибка 403 при публикации на Яндекс.Диске |
У приложения нет права Доступ к информации о публичных ресурсах |
Зайдите в oauth.yandex.ru, откройте приложение, добавьте нужное право, получите новый токен |
ffmpeg error при записи видео |
ffmpeg не установлен или поток камеры недоступен |
Проверьте ffmpeg -version и доступность CAMERA_STREAM_URL. Установите: sudo apt install ffmpeg |
Неверный OAuth-токен |
Токен Яндекс.Диска просрочен или отозван | Получите новый токен по инструкции из README, обновите .env, перезапустите сервис |
Ошибки печати и управления принтером
| Проблема | Причина | Решение |
|---|---|---|
| Бот не запускает печать | Принтер выключен, Klipper не подключён, или файл не найден | Проверьте статус принтера командой «статус». Убедитесь, что Klipper запущен и видит MCU |
Принтер выключен, печать невозможна |
В коде есть проверка питания устройства PRINTER_POWER_DEVICE — если оно off, печать запрещена |
Это корректное поведение. Включите принтер через подменю «🔌» |
| Печать не останавливается кнопкой «Стоп» | Проблема связи с Moonraker | Проверьте логи: sudo journalctl -u vk-moonraker-bot -n 30. Убедитесь, что Moonraker отвечает: curl http://localhost:7125/printer/print/cancel -X POST |
| Дублируются уведомления при включении/выключении принтера через бота | Механизм подавления работает на основе 15-секундной задержки — иногда её не хватает | Если дублирование регулярное — увеличьте значение в bot.py в переменной last_power_action_time (замените 15 на 20 или 30) |
Ошибки уведомлений
| Проблема | Причина | Решение |
|---|---|---|
| Уведомления не приходят | chat_id.txt не создан, потому что ни один пользователь не написал боту «начать» |
Напишите боту «начать» — он сохранит ваш CHAT_ID и начнёт отправлять уведомления |
| Приходит только первое уведомление, дальше тишина | В коде использовался random_id=0 — VK API требует уникальный random_id для каждого сообщения |
Убедитесь, что в bot.py в функции send_notification есть random_id=random.randint(1, 2**31 - 1) |
NOTIFY_CONFIG не работает, все уведомления молчат |
Значение в .env содержит лишние символы (кавычки, текст после чисел) |
Формат должен быть строго 1,5,15 — три числа через запятую, без кавычек и пробелов. Проверьте: grep NOTIFY_CONFIG .env |
Права и директории
| Проблема | Причина | Решение |
|---|---|---|
Permission denied при создании chat_id.txt |
Скрипт запускается от пользователя, у которого нет прав в директории бота | Убедитесь, что владелец директории — тот же пользователь, от которого работает сервис: sudo chown -R klipper:klipper ~/vk_moonraker_bot |
venv/bin/python: No such file or directory |
Директория venv не создалась или была удалена |
Пересоздайте: cd ~/vk_moonraker_bot && python3 -m venv venv && ./venv/bin/pip install vkbottle python-dotenv aiohttp, перезапустите сервис |
.env с токенами попал в Git |
Файл не был добавлен в .gitignore перед первым коммитом |
Удалите из индекса: git rm --cached .env, добавьте .env в .gitignore, закоммитьте. Обязательно перевыпустите все токены — они считаются утекшими |
Полезные команды для диагностики
# Статус сервиса
sudo systemctl status vk-moonraker-bot
# Последние 50 строк логов
sudo journalctl -u vk-moonraker-bot -n 50 --no-pager
# Логи в реальном времени
sudo journalctl -u vk-moonraker-bot -f
# Проверить конфигурацию .env
sudo cat /home/klipper/vk_moonraker_bot/.env
# Проверить бэкап .env
ls -la ~/vk_bot_env_backup.txt
# Проверить доступность Moonraker
curl -s http://localhost:7125/server/info | head -20
# Проверить камеру (снимок)
curl -s -o /tmp/test.jpg -w "HTTP %{http_code}, размер %{size_download}\n" "http://localhost:8080/?action=snapshot"
# Проверить поток камеры (первые 2 секунды)
timeout 2 curl -s "http://localhost:8080/?action=stream" -o /dev/null && echo "OK" || echo "FAIL"
# Перезапустить сервис с чистого состояния
sudo systemctl reset-failed vk-moonraker-bot
sudo systemctl restart vk-moonraker-bot
# Проверить версию vkbottle
/home/klipper/vk_moonraker_bot/venv/bin/pip show vkbottle
Совет: если что-то не работает — сначала посмотрите логи сервиса (
sudo journalctl -u vk-moonraker-bot -n 50 --no-pager). В 90% случаев причина видна прямо в первых строках traceback.
Дополнительные замечания
- Имена устройств питания (
PRINTER_POWER_DEVICE,LIGHT_POWER_DEVICE) должны совпадать с именами вmoonraker.conf(секции[power ...]). Задаются в.env. - Камера: рекомендуется использовать crowsnest. В конфиге crowsnest задайте
mode: mjpegиport: 8080. URL-адреса камеры задаются черезCAMERA_URLиCAMERA_STREAM_URLв.env. - Безопасность: не публикуйте файл
.envи не передавайте токены третьим лицам. Файл.envуже в.gitignore. Бэкап~/vk_bot_env_backup.txtтакже имеет права600— не копируйте его в публичные места. - Автоуведомления: настройка
NOTIFY_CONFIGпозволяет гибко управлять уведомлениями без изменения кода. - Файл
chat_id.txtсоздаётся автоматически рядом сbot.pyпри первом обращении пользователя – не удаляйте его, если хотите сохранить канал уведомлений. - Бэкап конфигурации сохраняется автоматически при удалении бота через
uninstall.shи подхватывается при следующей установке черезinstall.sh.
Вклад и поддержка
Если вы нашли ошибку или хотите предложить улучшение, создайте Issue в репозитории проекта.
Приятного использования!