3Dwork - Klipper
Hacer una pregunta…
⌃K
Links

Moonraker-Telegram

​​
- English
​
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 3dwork_voron01_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/3dworkvoron01bot

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 el propio BOT
Usando el BOT GetIDs
Manual usando navegador web
Desde Telegram abrimos una conversación con nuestro BOT y este nos dará un mensaje incluyendo nuestro chat_id:
La forma más rápida y sencilla es usando https://t.me/getidsbot que es un bot al que le enviamos un mensaje de nuestro bot y nos dira los datos que buscamos:
Lo primero de todo es asegurarnos que iniciamos un chat con nuestro nuevo bot, esto lo haremos en el link que nos puso @BotFather durante la creación... en nuestro ejemplo t.me/3dwork_voron01_bot y daremos el botón START/INICIAR o usaremos el comando /start.
Abriremos un navegador web, Chrome por ejemplo y pondremos la siguiente URL, recuerda cambiar la parte <API-access-token> por el token que obtuvimos en el punto anterior!!!
https://api.telegram.org/bot<API-access-token>/getUpdates?offset=0
Deberiamos obtener una pagina con el siguiente texto:
{"ok":true,"result":[]}
Volveremos a Telegram en nuestro chat con nuestro nuevo bot y le escribiremos cualquier mensaje. Y volveremos al navegador y refrescaremos la página donde veremos que aparece más información:
Por seguridad se han difuminado los valores.
El valor que deberemos anotar para nuestra configuración será el marcado en el cuadro rojo.

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: