Клиппер является одной из самых популярных прошивок для 3Д-принтеров. Многочисленные пользователи не понаслышке знают о ее богатых возможностях. Касается это не только основного функционала, связанного непосредственно с процессом печати, но и сервисных функций, повышающих удобство использования и не только. Одна из таких удобных дополнительных вещей и будет рассмотрена в данной статье. Речь пойдет об уведомлениях в мессенджере Телеграмм.
Часто печать детали занимает несколько часов, иногда десятки часов. Наблюдать постоянно за работой принтера, особенно если их несколько, мало для кого представляется реальной задачей. Отправка важных сообщений в мессенджер, клиент которого установлен на смартфон, может оказать существенную помощь в этом. Например, принтер сообщит об успешном завершении печати, о необходимости сменить филамент, о возникновении ошибки и даже пришлет снимок с камеры, подключенной к принтеру.
Вариантов реализации существует множество. Вот, например, рекомендуемые инструменты для отправки уведомлений на оригинальных Raspberry Pi с ее родной ОС Mainsail. Впрочем, большая часть из них доступна и на других устройствах с другими ОС на базе Linux. Например, в Moonraker уже есть механизм нотификаций, использующий в своей работе инструмент Apprise. Именно этот вариант в силу его универсальности и “родной” интеграции и будет рассмотрен далее.
Для реализации задуманного необходимо реализовать довольно простой план, состоящий из нескольких пунктов:
На деле, конечно, все не так просто, есть нюансы, но в отличие от большинства материала по теме, представленного в Интернете, здесь они будут расписаны, что называется, для “чайников”.
Итак, поехали!
Первое, с чего стоит начать, — это создание своего собственного телеграмм-бота, который будет выступать приемником сообщений от принтера. Для этого в поиске контактов клиента Телеграмм вбиваем “botfather”. Первым же результатом поиска будет контакт, изображенный на следующем скриншоте. Следует обратить внимание, что у этого контакта присутствует специальный значок, означающий, что это подтвержденный официальный контакт. Остерегайтесь подделок 🙂
Выбираем первый пункт “/newbot”.
Теперь необходимо дать создаваемому боту имя. Для этого нужно просто отправить его в чат в сообщении. Рекомендуется в конце названия добавлять суффикс“_bot”. Например, “My3D_test_bot”.
Готово. Теперь нужно дать имя пользователя для созданного бота. Тут можно не напрягать извилины и просто повторить имя чата. Также отправляем его в чат. В ответ получим такой ответ:
Необходимо скопировать и куда-нибудь временно записать строчку, выделенную на скриншоте маркером. Это токен вновь созданного бота. Он состоит из 10 цифр, разделителя “:” и буквенно-цифрового идентификатора.
Как следует из предупреждающего сообщения, не стоит передавать кому-либо этот токен, т.к. кто угодно может использовать его для управления созданным ботом.
Теперь нужно запустить наш бот. Для этого находим его в списке контактов поиском по имени и нажимаем на кнопку “Запустить” в окне чата нашего бота, как это показано на скриншоте ниже.
Нажатие этой кнопки отправит команду “/start” боту. В итоге откроется возможность чата с новым ботом.
Кроме токена, который мы записали ранее, нам понадобится также ChatID нашего бота. Существует много способов его получения, в том числе и встроенный в Apprise. Однако, самый простой и надежный способ — воспользоваться API Телеграмм при помощи запроса в поисковой строке Браузера. Его мы и будем использовать. Скопируйте запрос:
https://api.telegram.org/bot{token}/getUpdates
Вставьте его в поисковую строку Браузера, замените макро “{token}” на скопированный ранее токен и выполните получившийся запрос.
В результате будет получен ответ, из которого мы возьмем интересующий нас ChatID:
Копируем выделенный маркером идентификатор и временно сохраняем его вместе с нашим токеном. Если вдруг забыли сохранить токен или идентификатор чата — не беда, их можно будет восстановить позднее.
Настало время поковыряться в одноплатнике, управляющем нашим принтером.
Прежде всего нужно установить Apprise. Для этого необходимо подключиться к “железке” по SSH или зайти в консоль непосредственно на ней, если подключен монитор и клавиатура. Далее авторизуемся пользователем ОС (в случае с Mainsail он задается в настройках при создании образа) и выполняем следующую команду:
pip install apprise
Результат выполнения отображен на скриншоте.
Осталось дело за малым — произвести настройку конфигурации Moonraker. Здесь все просто. Открываем Web интерфейс Клиппера — Fluidd, переключаемся в раздел “МАШИНА” / ”MACHINE” и открываем файл “moonraker.conf”.
Далее приведен вариант универсального обработчика для всех шести стандартных событий, реализованных в Moonraker:
# Notifier
[notifier telegram]
# url: tgram://{bottoken}/{ChatID}
url: tgram://6081060237:AAFJzBaJyGdICq-gXEZy9KfRaJwXXXXXXl0/1875700028
events: started, complete, error, cancelled, paused, resumed
body_format: text
title: ⚠️ Сообщение от принтера.
body: Статус принтера изменен на {event_name}. Файл: '{event_args[1].filename}'.
attach: http://127.0.0.1:8080/?action=snapshot
Вот как это выглядит в редакторе оболочки Fluidd:
Пояснения:
Ну, что ж, стандартные обработчики сконфигурированы, но мы хотим большего. Например, чтобы принтер оповестил о необходимости смены филамента в нужный момент времени.
Сделать это достаточно просто. Как уже было сказано выше, нужно создать обработчик с событием, не совпадающим с одним из стандартных, например, “gcode”.
[code]
[notifier my_telegram]
url: tgram://6081060237:AAFJzBaJyGdICq-gXEZy9KfRaJwXXXXXXl0/1875700028
events: gcode
body_format: html
title: 🛠 Принтер требует внимания.
body: {event_message}
attach: http://127.0.0.1:8080/?action=snapshot
Осталось лишь добавить макрос с вызовом этого обработчика в файле printer_gcode_macro.cfg (этот файл, конечно, должен быть включен в printer.cfg).
[gcode_macro NOTIFY_MY_TELEGRAM]
gcode:
{action_call_remote_method("notify",
name="my_telegram",
message="Например, надо сменить филамент 🔄.")}
Стоит обратить внимание, что в сообщении, отправляемом из макроса в параметре message, можно также использовать эмодзи. Это очень удобно.
После того, как все установлено и настроено, конечно же, хочется убедиться, что все это еще и работает. Проще всего провести для этого две проверки:
Запускаем печать любого файла, загруженного в хранилище Клиппера, либо отправляем файл непосредственно из слайсера. В наш Телеграмм-бот должны поступить сообщения. Ниже приведен пример таких сообщений при выключенном питании самого принтера, поэтому сразу после сообщения о начале печати было отправлено сообщение об ошибке, а для продолжения работы пришлось перезапустить девайс, зато никто и ничто не пострадало.
Здесь все еще проще. В дашборде Fluidd нажимаем кнопку нашего макроса “NOTIFY_MY_TELEGRAM”.
В итоге получаем еще одно сообщение от принтера:
Теперь, когда работоспособность уведомлений проверена, можно выполнить некоторые косметические доработки.
Помимо кастомизации обработчиков можно, и даже желательно, провести кастомизацию бота. Сделать это можно при помощи того же самого “отца” ботов (BotFather). Открываем уже привычный нам чат BotFather, нажимаем кнопку “Меню” и выбираем “/mybots”. Эта команда выведет список зарегистрированных ботов, в котором нужно выбрать интересующий нас бот.
После этого отобразится меню выбора возможных операций с ботом. Выберем в нем “Edit Bot”.
Теперь можно отредактировать профиль нашего бота, в том числе задать узнаваемый аватар (“Edit Botpic”).
Как видно на этих скриншотах, тут можно выполнять и другие операции с ботом, такие как напомнить токен для доступа через API (“API Token”), а также удаление, если бот больше не нужен.
Мы создали и кастомизировали своего Телеграмм-бота для получения сообщений от 3Д-принтера.
Мы запустили Телеграмм-уведомления от принтера о стандартных событиях, таких как начало и окончание печати, ошибка и др.
Мы реализовали возможность принудительной отправки кастомного уведомления из кода макросов, например, для отправки уведомлений о необходимости смены филамента.
Конечно, данную статью нельзя считать всеобъемлющей. Однако, по мнению автора, в ней довольно подробно и наглядно описывается процесс установки и первоначальной настройки работы с уведомлениями, что должно послужить хорошим подспорьем на старте. А дальнейшее углубление в тему при наличии “в кармане” работающего механизма должно стать более увлекательным и продуктивным.
Автор статьи: Сергей Артюшенков
Дата публикации: 12.06.2023 г.
#Телеграмм #бот #Клиппер #уведомления #сообщения #3Д-принтер #3Д #печать #автоматизация #Apprise #Moonraker #Klipper #Mainsail #Telegram #bot #notification #messages #3D-Printer #3D #print #automation