Настроить telegram bot на clipper moonraker
Что нужно знать, прежде чем создавать бота в Telegram
Боты являются своего рода программами, которые умеют выполнять разные функции — от предоставления информации до управления устройствами — и работают прямо в мессенджере.
Взаимодействие осуществляется как с помощью заранее заготовленного набора команд, так в виде живого общения. В зависимости от возлагаемых на бота задач его можно добавить в канал или чат, а также подключить к платформам автоматизации и различным сервисам. Более сложные возможности реализуются с помощью программируемых скриптов, которые составляют разработчики.
Но так или иначе сначала бота нужно создать. Делается это следующим образом.
Как создать бота в Telegram
Чтобы сделать своего бота, понадобится другой бот — BotFather. Это официальный инструмент для создания ботов и управления ими. Найти BotFather можно через поиск. Обратите внимание на синюю галочку рядом с именем: именно она укажет на правильный чат.
Запустите диалог с ним и нажмите «Начать».
Кликните по кнопке меню и выберите /newbot.
Следующим шагом нужно придумать боту никнейм. Он должен быть уникальным и заканчиваться на bot. Если эти условия не выполняются, BotFather просит сочинить другой.
Далее BotFather предоставит ссылку на созданного бота и токен для обращения к нему. Ссылка нужна для поиска бота, ею можно делиться. А вот токен — длинный набор символов — вещь секретная. Это своеобразный ключ, с помощью которого осуществляется управление программой. Сохраните его в надёжном месте и никому не показывайте.
После этого с ботом, по сути, можно работать. Если перейти по выданной в предыдущем шаге ссылке, откроется диалог с ним. Правда, без настройки он пока ничего не сможет сделать.
Как настроить бота в Telegram
В зависимости от того, для чего вам требуется бот, его нужно будет подключить к различным сервисам и платформам автоматизации. Для этого в процессе настройки понадобится указать имя бота и его токен.
Также при желании можно добавить описание (/setdescription), прикрепить аватар (/setuserpic) или сменить имя (/setname). Все эти действия осуществляются через меню в BotFather. Если у вас несколько ботов, то сначала придётся выбрать нужный из списка.
В качестве наглядного примера мы создадим простого чат-бота с помощью бесплатного сервиса Manybot. Он не требует навыков программирования и работает прямо в Telegram. Наш бот будет предлагать полезную информацию для читателей: книги и подкасты Лайфхакера, а также открытые вакансии и возможность связи с редакцией. Принцип работы несложный: пользователь переходит в нужный чат по ссылке, запускает одну из команд, нажимая на кнопку в меню, и получает ответ на свой вопрос. Вот какие этапы включает настройка.
Подключение бота
Сначала нужно открыть чат с Manybot, перейдя по ссылке, и нажать «Начать».
Затем выбрать удобный для вас язык.
Кликните «Добавить нового бота».
А вот теперь понадобится токен созданного ранее бота, который выдал BotFather. Нажмите «Я скопировал токен» и отправьте его Manybot.
Добавьте описание бота, которое будут видеть пользователи, или пропустите этот шаг.
Создание команд
Далее вернитесь к своему боту, которого создали с помощью BotFather, и нажмите «Начать».
Выберите «Пользовательские команды».
Затем — «Создать команду».
Придумайте название команды латинскими буквами, начиная со слеша.
Таким же образом через меню «Создать команду» добавьте остальные команды, которые вам нужны. В нашем примере это подкасты, вакансии и обратная связь.
Добавление кнопок в меню
Чтобы пользователи могли взаимодействовать с ботом через графический интерфейс, а не вводить команды вручную, необходимо добавить кнопки для каждой из них. Для этого нажмите «Настроить гл. меню».
Кликните «Добавить пункт меню».
Выберите нужную команду.
По такому же принципу добавьте кнопки для других команд.
Проверка работы бота
Перейдите по ссылке на бота. Пользователи увидят только добавленные команды, у вас же будет отображаться расширенное меню с настройками.
Протестировать бота из нашего примера и посмотреть, как выглядит работа с ним, можно по этой ссылке.
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Решил я на днях настроить управление питанием принтера через веб интерфейс. Бывает иногда, возникнет идея, которую срочно хочется воплотить, а оставлять принтер включенным круглые сутки - идея не из лучших. Статей на эту тему полно. Вроде, ничего сложного - подключаешь реле к выводу GPIO на одноплатнике, включаешь возможность управление GPIO в операционной системе, добавляешь пару строк в конфиг Moonraker, и вуаля, в веб интерфейсе должна появиться заветная кнопка отключения питания. Но на Armbian у меня возникли некоторые сложности с управлением GPIO, которые просто так не гуглились. В связи с этим, делюсь решением.
Описываю последовательность действий для связки Klipper и Moonraker, установленных на Armbian
Так понимаю что на OctoPi и других ОС для Raspberry Pi у народа проблем не возникает, потому и решения просто так не гуглятся. Но мне пришлось работать с тем что есть. В загажнике лежал Orange Pi Zero. Его для данных целей выше крыши. Судя по загрузке CPU во время печати и 70% свободной оперативки из 512 Мб, мощности еще и для подключения веб камеры хватит.
Подключение
Для управления питанием принтера не используйте самые дешевые китайские реле.
У меня после порядка десяти включений, у вот такого реле, начали залипать контакты.
Подключите реле к выходу GPIO вашего одноплатника. Проверьте, умеет ли конкретный GPIO на вашей работать на выход.
Настройка
Далее включите возможность управления GPIO в операционной системе:
Настройка разрешений для управления GPIO пользователем без прав root
Вот на этом моменте у меня и случился затык. Управлять GPIO от пользователя через bash получалось, но Moonraker ругался на отсутствие прав. Так как в программировании я не силен, в частности Python знаю посредственно, а Moonraker написан на нем, осилить самому проблему у меня не вышло. Гугл тоже не говорил ничего внятного. Из решений находились только костыли по предоставлению прав root. Помогли ребята из группы Telegram Anycubic Mega Zero Rus. Решение здесь.
Таким образом, для управления GPIO от пользователя, создаем группу gpio:
Добавляем нашего пользователя и(или) пользователя из под которого запускается Moonraker в группу gpio
Если вы хотите рулить gpio при помощи bash скриптов, создаем файл
Для того, чтоб управлять gpio из Moonraker, файл:
SUBSYSTEM=="gpio", KERNEL=="gpiochip3", GROUP="gpio", MODE="0660"
Чтоб все это заработало, необходимо перезагрузиться.
Конфигурация Moonraker
Далее правите moonraker.conf в соответствии с необходимым функционалом. Описано что и как в официальной документации.
Остальное в конфиг добавляете для себя, при необходимости.
После этого в веб морде должен появиться пункт управления питанием.
Ну и управление питанием принтера из клиппера, как это описано в документации (гугл перевод):
Можно переключить питание устройства с хоста Klippy, это можно сделать с помощью gcode_macro, например:
POWER_OFF_PRINTER GCode можно запустить , чтобы отключить «принтер» устройство. Это можно использовать вместе с тайм-аутом простоя Klipper для выключения принтера в режиме ожидания с конфигурацией, аналогичной приведенной ниже:
Для настройки Telegram-бота на контроллере Wiren Board нам понадобится установленный Node-RED, настроенный модуль WB Nodes и созданный Telegram-бот.
В примерах мы будем создавать флоу (flows) — это блок-схемы процесса.
Создание бота
Если у вас нет телеграм-бота, то создайте его:
Всё, теперь мы готовы настраивать его на контроллере Wiren Board.
Установка модуля
Чтобы Node-RED смог работать с Telegram, установите модуль node-red-contrib-telegrambot :
- Зайдите в веб-интерфейс Node-RED.
- В правом верхнем углу вызовите меню.
- В открывшемся окне выберите вкладку Менеджер палитр (Manager palette).
- Перейдите на вкладку Установка (Install), введите в поле поиска telegrambot и нажмите на клавиатуре Enter.
- Установите пакет с названием node-red-contrib-telegrambot.
- Закройте окно с настройками. Установка модуля завершена.
После установки, в левой панели появится секция telegram.
Создание ноды для бота
Перед тем, как передавать данные из контроллера в чат с ботом, нам нужно настроить ноду нашего бота:
- Перетяните в рабочую область ноду sender.
- Дважды кликните на ней — откроется окно Edit sender node.
- В поле Bot нажмите на кнопку с карандашом, откроется окно Edit telegram bot node.
- В открывшемся окне заполните поля:
- Bot-Name — произвольное имя
- Token — API-токен, который вы получили при создании бота в мессенджере Telegram.
- Users — имена telegram-пользователей, которые смогут отправлять боту команды и получать данные.
- Update Mode — выберите Pooling
- Poll Interval — установите 1000.
- Сохраните настройки нажатием кнопки Done.
- Вы вернётесь в окно Edit sender node, в котором нажмите Cancel.
Создание ноды бота завершено, теперь мы можем использовать её для соединения с telegram-ботом.
- Перетяните в рабочую область ноду receiver.
- Дважды кликните на ней — откроется окно Edit receiver node.
- Выберите в поле Bot созданную раньше ноду бота.
- Чтобы сохранить настройки, нажмите кнопку Done.
- Перетяните в рабочую область ноду sender.
- Дважды кликните на ней — откроется окно Edit sender node.
- Выберите в поле Bot ноду бота.
- Чтобы сохранить настройки, нажмите кнопку Done.
- Перетяните в рабочую область ноду function.
- Дважды кликните на ней — откроется окно Edit function node.
- На вкладке обработчика onMessage должна быть написана строка
После настройки всех трёх нод, соедините их между собой:
- Верхний выход ноды receiver соедините с входом функции.
- Выход функции соедините с входом ноды sender.
После настройки нод и соединений между ними, опубликуйте изменения нажатием на кнопку Deploy в правой верхней части веб-интерфейса Node-RED.
Запрос информации с датчиков контроллера
Чтобы Node-RED мог общаться с MQTT-брокером контроллера, у вас должен быть настроен плагин WB Nodes.
Настроим бота так, чтобы он присылал температуру процессора контроллера Wiren Board в ответ на команду /cputemp .
Перед созданием нового флоу очистите рабочее поле — это исключит ложные срабатывания на команду из чата. При очистке все настройки соединения с контроллером и телеграм-ботом сохранятся.
ChatId
ChatId — это идентификатор чата с ботом, он нужен, чтобы бот понимал куда ему отвечать.
Сохраните chatId в глобальной переменной флоу:
Обработка команды
Настройка бота завершена.
Запрос данных в телеграм-чате с ботом
Теперь проверим работу нашего бота:
- Перейдите в мессенджер Telegram.
- Откройте чат с ботом.
- Введите команду /cputemp , бот должен прислать ответ:
Если ты совсем не ориентируешься в Python, то отличным началом будет прочтение трех вводных статей, которые я публиковал в «Хакере» этим летом, либо посещение курса «Python для новичков», который я начну вести для читателей «Хакера» уже совсем скоро — 30 ноября.
Чтобы создать бота, нам нужно дать ему название, адрес и получить токен — строку, которая будет однозначно идентифицировать нашего бота для серверов Telegram. Зайдем в Telegram под своим аккаунтом и откроем «отца всех ботов», BotFather.
Жмем кнопку «Запустить» (или отправим / start ), в ответ BotFather пришлет нам список доступных команд:
- / newbot — создать нового бота;
- / mybots — редактировать ваших ботов;
- / setname — сменить имя бота;
- / setdescription — изменить описание бота;
- / setabouttext — изменить информацию о боте;
- / setuserpic — изменить фото аватарки бота;
- / setcommands — изменить список команд бота;
- / deletebot — удалить бота.
Отправим бате‑боту команду / newbot , чтобы создать нового бота. В ответ он попросит ввести имя будущего бота, его можно писать на русском. После ввода имени нужно будет отправить адрес бота, причем он должен заканчиваться на слово bot. Например, xakepbot или xakep_bot . Если адрес будет уже кем‑то занят, BotFather начнет извиняться и просить придумать что‑нибудь другое.
Для взаимодействия с Telegram API есть несколько готовых модулей. Самый простой из них — Telebot. Чтобы установить его, набери
В Linux, возможно, понадобится написать pip3 вместо pip , чтобы указать, что мы хотим работать с третьей версией Python.
Эхо-бот
Для начала реализуем так называемого эхо‑бота. Он будет получать от пользователя текстовое сообщение и возвращать его.
Читайте также: