Moonraker-Telegram
Última actualización
¿Te fue útil?
Última actualización
¿Te fue útil?
Con este complemento es posible enviar mensajes sobre el estado de las impresiones 3D, incluidas fotos, a un bot de Telegram (obviamente, solo si se ha configurado una cámara en la Raspberry Pi) y todo ello sin necesidad de configuraciones poco seguras en nuestros routers o con complicadas instalaciones de VPN.
Este complemento nos ofrece las siguientes funcionalidades:
Notificaciones a intervalos con imágenes de nuestra cámara durante la impresión
Contol de luces para la toma de imágenes o videos
Timelapse, un ejemplo https://youtu.be/gzbzW7Vv2cs
Ejecución de macros/gcode desde Telegram
Control del apagado del sistema via Moonraker
Obtención de una captura de imágen cuando deseemos
Pausar, cancelar y retomar nuestra impresión
Parada de emergencia
Lista de comandos disponibles en el bot:
/status - get the status (printing, paused, error) of the printer
/pause - pause the current print
/resume - resume the current print
/cancel - cancel the current print
/files - get the last 5 .gcode files, and the option to print them
/macros - list all available non-hidden macros
/gcode %gcode% - run any gcode command, spaces are supported
/photo - capture a picture from the webstream/webcam
/video - capture a video from the webstream/webcam
/power - turn off a specified moonraker power device
/light - toggle a specified moonraker power device
/emergency - run an emergency stop
/bot_restart - Restart the bot to apply config changes
/shutdown - Shut down the host system
/%macro_name% - Run any macro available on your system.
Nos conectaremos por SSH, usando Putty/Terminus u otro cliente SSH, a nuestra Raspberry Pi y lanzaremos Kiauh ya que nos facilitará enormemente el proceso, si no tienes Kiauh te aconsejamos instalarlo siguiendo estas instrucciones.
// Una vez conectados por SSH lanzaremos Kiauh
cd kiauh
./kiauh.sh
Dentro de Kiauh iremos a la opción Install (1)[Install]) y seleccionaremos Telegram Bot (9)[telegram Bot]) y Kiauh hará su magia para instalar el componente!!!
Una vez finalizado el proceso nos fijaremos en la parte final para verificar que todo fué correcto:
Busque el usuario @BotFather dentro de la aplicación Telegram
Haga clic en Iniciar para iniciar una conversación con @BotFather
Lanzaremos el comando /newbot para comenzar con el proceso
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
Nos indicará que le demos un nombre a nuestro bot, por ejemplo 3DWork Voron 0.1 Bot
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
Seguidamente nos solicitará un nombre de usuario sin espacios y que termine en "bot", por ejemplo tresdwork_voron0I_bot
Done! Congratulations on your new bot. You will find it at t.me/3dwork_voron01_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
<HTTP API token>
Keep your token secure and store it safely, it can be used by anyone to control your bot.
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
Si todo ha ido de forma correcta nos dará un HTTP API Token el cual tendremos que guardar de forma segura ya que lo usaremos a posteriori!!!
Como recuperar un token HTTP API Como hemos visto durante el proceso @BotFather nos facilita el token para usar en nuestro componente de Moonraker. En el caso que lo perdamos podremos usar @BotFather para crear uno nuevo usando el comando /token
Dentro del mensaje también nos devuelve un link para comenzar a hablar con nuestro nuevo bot t.me/tresdworkvoron0Ibot
Los dos parámetros que necesitamos para configurar nuestro componente Telegram de Moonraker es el token HTTP API y el Chat ID, ya que en el punto anterior obtuvimos el token vamos a encontrar nuestro Chat ID.
Desde Telegram abrimos una conversación con nuestro BOT y este nos dará un mensaje incluyendo nuestro chat_id:
Ya casi estamos!!!, ahora iremos a nuestra UI de Klipper, en nuestro caso y para este ejemplo Mainsail, y editaremos el fichero de configuración telegram.conf del módulo de Telegram Moonraker:
En el fichero de configuración básicamente pondremos en chat_id nuestro valor de Chat ID y en bot_token nuestro token
¡Reiniciaremos el servicio Moonraker-telegram-bot para que cargue los nuevos valores y si todo va bien ya tendremos nuestro bot hablándonos!!!
Podremos actualizar el complemento ya sea desde Kiauh o desde la UI de Klipper:
Actualizaremos nuestro fichero de configuración de Moonraker para añadir el nuevo componente al update manager (para poder actualizar de forma sencilla más tarde desde nuestra UI de Klipper)
[update_manager client moonraker-telegram-bot]
type: git_repo
path: ~/moonraker-telegram-bot
origin: https://github.com/nlef/moonraker-telegram-bot.git
env: ~/moonraker-telegram-bot-env/bin/python
requirements: scripts/requirements.txt
install_script: scripts/install.sh
Recuerda reiniciar el servicio Moonraker después del cambio.
Actualmente, la mayoría de funciones de notificación de eventos de Moonraker-Telegram emplean la funcionalidad RESPOND de Klipper. En el caso de no tenerla y para habilitarla es tan sencillo como añadir la siguiente sección en vuestro printer.cfg:
[respond]
En el caso de que tengamos pensado utilizar el módulo de timelapses es aconsejable añadir una macro que almacenar los parámetros del mismo. Para hacerlo simplemente añadiremos esto a nuestra configuración de Klipper:
[gcode_macro _bot_data]
variable_lapse_video_size: 0
variable_lapse_filename: 'None'
variable_lapse_path: 'None'
gcode:
M118 Setting bot lapse variablesn
Podremos personalizar el icono de nuestro bot de una forma muy sencilla.
¡Volvemos a hablar con @BotFather y lanzamos el comando /setuuserpic y seleccionamos nuestro bot, y a continuación le enviaremos una imagen que deseemos como icono... listo!!!
Para otros usos avanzados os recomendamos ver la siguiente página de la documentación oficial.
En el caso de que usemos Input Shaper con acelerómetro, nos puede ser muy útil la posibilidad de lanzar y obtener las gráficas en nuestro Telegram.
Añadiremos las siguientes macros a nuestro printer.cfg o un include donde las carguéis:
[gcode_macro measure_resonances]
gcode:
{% set HZ_PER_SEC = params.HZ_PER_SEC|default(1)|float %} #Parse parameters
{% set POSITION_X = params.POSITION_X|default(175)|int %}
{% set POSITION_Y = params.POSITION_Y|default(175)|int %}
{% set POSITION_Z = params.POSITION_Z|default(50)|int %}
{% if printer.toolhead.homed_axes != 'xyz' %} #home if not homed
G28
{% endif %}
TEST_RESONANCES AXIS=X HZ_PER_SEC={ HZ_PER_SEC } POINT={ POSITION_X },{ POSITION_Y },{POSITION_Z}
TEST_RESONANCES AXIS=Y HZ_PER_SEC={ HZ_PER_SEC } POINT={ POSITION_X },{ POSITION_Y },{POSITION_Z}
RUN_SHELL_COMMAND CMD=shaper_calibrate
RESPOND PREFIX=tg_send_image MSG="path=['/home/trident/printer_data/logs/resonances/resonances_x.png', '/home/trident/printer_data/logs/resonances/resonances_y.png'], message='Shaper results'"
[gcode_shell_command shaper_calibrate]
command: bash /home/pi/printer_data/config/shaper_calibrate.sh
timeout: 600.
verbose: True
Revisar y ajustar las coordenadas por defecto para realizar el test Input Shaper:
{% set POSITION_X = params.POSITION_X|default(175)|int %}
{% set POSITION_Y = params.POSITION_Y|default(175)|int %}
{% set POSITION_Z = params.POSITION_Z|default(50)|int %}
Crearemos desde nuestro terminal SSH (PuttY, Terminus, etc...) un script shaper_calibrate.sh en nuestro directorio printer_data/config/... o aquel que uséis en vuestro Klipper para almacenar las configuraciones de vuestra máquina:
sudo nano /home/pi/printer_data/config/shaper_calibrate.sh
Copiaremos este script, recuerda CTR+X para salir y Y para guardar cambios:
#! /bin/bash
OUTPUT_FOLDER=logs/resonances
PRINTER_DATA=home/pi/printer_data
KLIPPER_SCRIPTS_LOCATION=~/klipper/scripts
RESONANCE_CSV_LOCATION=tmp
if [ ! -d /$PRINTER_DATA/$OUTPUT_FOLDER/ ] #Check if we have an output folder
then
mkdir /$PRINTER_DATA/$OUTPUT_FOLDER/
fi
cd /$RESONANCE_CSV_LOCATION/
shopt -s nullglob
set -- resonances*.csv
if [ "$#" -gt 0 ]
then
for each_file in resonances*.csv
do
$KLIPPER_SCRIPTS_LOCATION/calibrate_shaper.py $each_file -o /$PRINTER_DATA/$OUTPUT_FOLDER/${each_file:0:12}.png
rm /$RESONANCE_CSV_LOCATION/$each_file
done
else
echo "Something went wrong, no csv found to process"
fi
Nos aseguraremos que sea ejecutable:
sudo chmod +x /home/pi/printer_data/config/shaper_calibrate.sh
Con nuestra nueva macro tan solo tendremos que llamarla desde nuestro cliente Telegram y, si tenemos todo correcto y preparado en nuestra máquina, realizará el test y nos enviará el resultado gráfico de este que siempre es de gran ayuda:
En el caso que usemos el módulo de Telegram para controlar nuestras impresoras de forma remota podremos tener diferentes instancias de este para poder gestionarlas de forma individual.
No vamos a entrar en el proceso de instalación o configuración detallado, el cual podéis encontrar aquí.
Comenzaremos clonando el repositorio e instalando:
cd
git clone https://github.com/Raabi91/moonraker-telegram moonraker-telegram2
cd moonraker-telegram2
chmod 755 ./scripts/install.sh
./scripts/install.sh
IMPORTANTE!!
en el comando git clone la parte final indica el directorio donde lo instalaremos. Os aconsejamos usar moonraker-telegram2, moonraker-telegram3,...
en el comando cd lo adaptaremos dependiendo a lo usado en el punto anterior
Durante la instalación nos solicitará el path de Moonraker y de Klipper de cada instancia, aseguraos de poner el correcto para cada instancia ya que ahí dejará el fichero de configuración necesario para su configuración.
Por último nos preguntará el identificador del servicio que es útil para poder evitar problemas de arranque, parada o reinicio del serivicio.
if you want to use multiple instances on one pi, enter an identifier here. this is needed to create the sytemd service
If you only use it once per hardware, simply press enter.
Por ejemplo si usamos 2 la instalación creará una instancia de servicio de arranque llamada moonraker-telegram2.service
Revisaremos en cada instancia nuestro telegram_config.sh ajustando el puerto de Moonraker para que coincida con el de cada instancia.
Además si contamos con varias cámaras nos aseguraremos que la URL en el valor webcam (sobretodo el puerto) es el correcto de nuestra instancia.
Añadiremos el bot @raw_data_bot a nuestro grupo que nos facilitará la información del ID del chat que buscamos: Anotaremos el ID facilitado para añadirlo en los siguientes puntos a la configuración de Moonraker-Telegram.