Moonraker-Telegram

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.

Instalando el componente Moonraker-Telegram

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!!!

El proceso de instalación puede durar unos minutos dependiendo del modelo/potencia de tu Raspberry Pi... como se suele decir... la paciencia es la madre de la ciencia!!! :)

Una vez finalizado el proceso nos fijaremos en la parte final para verificar que todo fué correcto:

En el caso que no queramos utilizar Kiauh, de nuevo os recomendamos usarlo, podéis instalar el componente de forma manual realizando los siguientes pasos:

  • clonaremos el repositorio

    cd ~
    git clone https://github.com/nlef/moonraker-telegram-bot.git
    cd moonraker-telegram-bot
  • a continuación lanzaremos el script de instalación que nos solicitará erectrio de nuestras configuraciones de Klipper

    ./scripts/install.sh
  • 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 que después de cada cambio en la configuración del bot es necesario reiniciar el servicio lo cual puedes hacer desde Telegram con el comando /bot_restart o desde SSH usando sudo systemctl restart moonraker-telegram-bot

Creando un bot de Telegram

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

Obtener el Chat ID de Telegram

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:

Añadiendo el bot a un grupo de Telegram para compartir acceso, en este caso seguiremos un proceso similar al utilizado para obtener el ID anteriores pero por simplicidad usaremos un bot

Una vez tengamos la información es aconsejable eliminar el bot del grupo!!!

Configurar el complemento Moonraker Telegram

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!!!

Extras

Actualización del complemento

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.

Añadir [respond] a nuestra configuración Klipper

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:

printer.cfg
[respond]

Macro para almacenar las configuraciones de timelapse

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:

printer.cfg
[gcode_macro _bot_data]
variable_lapse_video_size: 0
variable_lapse_filename: 'None'
variable_lapse_path: 'None'
gcode:
    M118 Setting bot lapse variablesn

Personalizar el icono/imagen de nuestro bot

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!!!

Usos avanzados

Para otros usos avanzados os recomendamos ver la siguiente página de la documentación oficial.

Input Shaper

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

Recuerda que para poder ejecutar shell macros antes se han de habilitar si no lo hicimos antes.

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:

Telegram Multi-Instancia

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.

Última actualización