Intégration domotique Moonraker (Klipper), gratuite et open source

Suivez et pilotez vos imprimantes 3D Klipper : progression, températures, alertes, macros.
Suivez et pilotez vos imprimantes 3D Klipper depuis Gladys grâce à Moonraker, le serveur d'API derrière Mainsail et Fluidd : Voron, RatRig, Sovol, Elegoo, Creality K1 ou K2 rootées, et toute imprimante sous Klipper. Tout reste sur votre réseau local : Gladys parle directement à Moonraker, sans compte cloud.
L'intégration a été testée contre un vrai Moonraker pilotant Klipper avec un micro-contrôleur simulé (simulavr) : vraies impressions, pause, reprise, annulation, erreur d'impression, arrêt d'urgence, webcam. Développée sans imprimante physique : vos retours sont les bienvenus sur le forum Gladys.
Prérequis
- Gladys Assistant 5.1 ou plus récent.
- Une imprimante sous Klipper et Moonraker (installés avec Mainsail ou Fluidd, KIAUH, MainsailOS, FluiddPi…), joignable depuis la machine de Gladys sur le port 7125 ou par l'adresse de Mainsail ou Fluidd.
- Soit un Moonraker qui fait confiance au réseau de Gladys (
trusted_clientsdansmoonraker.conf, le réglage par défaut de la plupart des installations pour les réseaux locaux), soit une clé d'API de Moonraker. - Pour l'image de la webcam : une webcam déclarée dans Mainsail ou Fluidd, avec une adresse de capture (le cas par défaut avec crowsnest ou mjpg-streamer).
Configuration
- Ouvrez l'onglet Configuration de l'intégration.
- Dans Adresse de Moonraker, saisissez l'adresse IP de l'imprimante, par
exemple
192.168.1.50: l'intégration utilise alors le port 7125, celui de Moonraker. Vous pouvez aussi saisir l'adresse avec laquelle vous ouvrez Mainsail ou Fluidd, commehttp://192.168.1.50(son serveur web relaie l'API de Moonraker), ou un port à vous (192.168.1.50:7126). Préférez une adresse IP : les noms commevoron.localne se résolvent pas dans le conteneur de l'intégration. - Clé d'API n'est utile que si Moonraker ne fait pas confiance au réseau
de Gladys. Mainsail : Paramètres → Autorisation ; Fluidd :
Paramètres → Authentification ; ou
http://<imprimante>:7125/access/api_keydepuis une machine de confiance. - Une deuxième ou troisième imprimante : remplissez Imprimante 2 et Imprimante 3 de la même façon (un Moonraker chacune).
- Langue choisit la langue des noms de fonctionnalités et des textes créés par l'intégration (français par défaut). Les noms des fonctionnalités sont fixés à l'ajout de l'appareil dans Gladys.
- Enregistrez. Tester la connexion affiche l'état de chaque imprimante et la liste de ses macros.
Ajoutez ensuite l'imprimante depuis l'onglet Découverte.
L'appareil imprimante
Un appareil par Moonraker, nommé d'après le nom d'hôte de l'imprimante
(voron, mainsailos…), ou « Klipper ». Les valeurs arrivent en direct de
Moonraker (Klipper pousse ses changements plusieurs fois par seconde) ;
l'intégration les transmet à Gladys au plus toutes les 5 secondes, les
changements d'état immédiatement.
| Fonctionnalité | Ce qu'elle affiche |
|---|---|
| État | Prête, Impression, En pause, Terminée, Annulée, Erreur d'impression, Klipper arrêté (shutdown), Klipper en erreur, Démarrage de Klipper, Klipper déconnecté, Moonraker injoignable, Clé d'API absente ou refusée |
| Fichier | Le fichier en cours d'impression, ou le dernier |
| Progression | Avancement de l'impression, comme sur l'écran de l'imprimante (100 % conservé après une impression terminée) |
| Temps écoulé | Depuis le début de l'impression, en minutes |
| Temps restant | D'après l'estimation du trancheur quand le fichier en a une, sinon extrapolé de la progression, en minutes (0 au repos) |
| Couche, Nombre de couches | Quand le trancheur les envoie (SET_PRINT_STATS_INFO, comme les profils Klipper de PrusaSlicer, OrcaSlicer et SuperSlicer) ; 0 sinon |
| Buse, Buse 2, Plateau… | Températures, en degrés entiers : chaque extrudeur, le plateau chauffant, chaque heater_generic (un caisson…) |
| … (consigne) | Consignes, en lecture seule : chauffer par le widget ou les actions de scène |
| Capteurs de température | Chaque temperature_sensor et temperature_fan de Klipper (Raspberry Pi, MCU, caisson…), six au plus |
| Ventilateur de pièce | Vitesse du [fan], en pourcentage |
| Pause, Reprise | Boutons poussoirs |
| Webcam | La capture de la première webcam de Mainsail ou Fluidd, rafraîchie chaque minute |
Il n'y a volontairement pas de bouton annuler sur l'appareil : un appui
sans confirmation ruinerait une impression. L'annulation est proposée par le
widget (avec confirmation) et par les scènes. Les températures et consignes
sont aussi en lecture seule : une chauffe d'imprimante ne peut pas être lancée
par erreur depuis le tableau de bord, ni par HomeKit, Alexa ou Google. On
chauffe par le widget (préchauffer, refroidir) et les actions de scène. Ce sont
des « températures d'appareil » pour Gladys : elles ne comptent jamais dans la
température de la pièce. Les bornes de chaque chauffe sont le max_temp de
Klipper.
Ce que possède l'imprimante (chauffes, capteurs, ventilateur, webcam) est lu dans Klipper à chaque connexion. Quand cela change, Gladys propose de mettre à jour l'appareil dans l'onglet Découverte.
Widget de tableau de bord
Ajoutez le widget Impression 3D Klipper à un tableau de bord et choisissez l'imprimante dans ses réglages. Il affiche :
- la jauge de progression, le temps restant, les températures de la buse et du plateau (en direct) ;
- l'état, le fichier, la couche, le temps écoulé, l'heure de fin prévue, les consignes actives ;
- les boutons utiles au moment : Pause ou Reprendre et Annuler (demande confirmation) pendant une impression ; Préchauffer et, quand quelque chose chauffe, Refroidir au repos ; Redémarrer Klipper (demande confirmation) après un arrêt de Klipper sur une erreur.
Les températures de préchauffage sont des réglages du widget (200 °C et 60 °C par défaut, PLA). Il n'y a pas de bouton d'arrêt d'urgence : l'arrêt d'urgence de Klipper est pour quelqu'un qui se tient à côté de l'imprimante.
Déclencheurs de scène
Dans la catégorie Intégrations de l'éditeur de scènes. Chacun peut être limité à une imprimante.
- Impression démarrée : variables nom de l'imprimante, fichier.
- Impression terminée : variables nom de l'imprimante, fichier, durée
d'impression (en texte, comme
1 h 05 min, et en minutes). - Impression échouée ou annulée : peut être limité à une raison (annulée, erreur). Une erreur comprend l'arrêt de Klipper pendant l'impression. Variables nom de l'imprimante, fichier, durée d'impression, raison.
- Impression en pause : par Gladys, Mainsail, Fluidd, l'écran de l'imprimante ou un capteur de filament. Variables nom de l'imprimante, fichier, temps écoulé.
- Klipper arrêté sur une erreur : Klipper est passé en arrêt (shutdown)
ou en erreur (défaut de chauffe, carte perdue, arrêt d'urgence). Variables
nom de l'imprimante, message de Klipper (par exemple
MCU 'mcu' shutdown: ADC out of range).
Les variables se lisent dans les actions suivantes avec, par exemple,
{{triggerEvent.data.file}} et {{triggerEvent.data.duration}}.
Actions de scène
- Mettre en pause, reprendre ou annuler une impression : renvoie Appliqué à faux quand il n'y avait rien à mettre en pause, reprendre ou annuler (la scène continue).
- Préchauffer l'imprimante : consignes de toutes les buses et du plateau,
200 °C et 60 °C par défaut, dans la limite du
max_tempde chaque chauffe. Refusé pendant une impression (Appliqué : faux) : une scène qui préchauffe à heure fixe ne touche jamais une impression en cours. - Couper les chauffes :
TURN_OFF_HEATERS, aussi pendant une impression (qui échoue alors). - Lancer une macro Klipper : lance une macro G-code de l'imprimante par
son nom, sans paramètre, par exemple
LIGHTS_ON. Seules les macros listées par Klipper sont acceptées (voir Tester la connexion) ; les macros privées (dont le nom commence par_) et le G-code libre sont refusés. Appliqué : faux quand Klipper n'est pas prêt.
Une commande que Klipper tarde à confirmer (une pause attend les mouvements de sa file, une macro peut chauffer plusieurs minutes) est considérée comme acceptée au bout de 15 secondes.
Exemples de scènes
- Impression terminée → notification : déclencheur Impression terminée,
action « Envoyer un message » :
{{triggerEvent.data.file}} terminé en {{triggerEvent.data.duration}}. - Klipper arrêté → alerte : déclencheur Klipper arrêté sur une erreur,
message
Imprimante arrêtée : {{triggerEvent.data.message}}. - Fumée détectée → tout arrêter : déclencheur sur le détecteur de fumée, actions Mettre en pause, reprendre ou annuler une impression (annuler), puis Couper les chauffes, puis éteindre la prise connectée de l'imprimante.
- Prête au petit déjeuner : à 7 h en semaine, Préchauffer l'imprimante (sans effet si une impression tourne).
- Lumière pour la webcam : Impression démarrée → Lancer une macro Klipper
LIGHTS_ON, ou allumer la lumière de l'atelier ; Impression terminée ou échouée → l'éteindre.
Dépannage
- Moonraker injoignable : vérifiez l'adresse depuis la machine de Gladys
(
curl http://192.168.1.50:7125/server/info). Utilisez une adresse IP plutôt quevoron.local. Derrière Mainsail ou Fluidd, saisissez leur adresse sans le port. - Clé d'API absente ou refusée : Moonraker ne fait pas confiance au réseau
de Gladys. Collez sa clé d'API, ou ajoutez le réseau de Gladys à
trusted_clientsdansmoonraker.conf. Une clé régénérée invalide l'ancienne. - Klipper arrêté (shutdown) ou Klipper en erreur : Klipper demande
votre attention (son message est dans le déclencheur, et dans Mainsail ou
Fluidd). Une fois la cause corrigée, Redémarrer Klipper dans le widget
lance
FIRMWARE_RESTART. - La couche reste à 0 : le trancheur n'envoie pas
SET_PRINT_STATS_INFO; ajoutez-le au G-code de changement de couche du trancheur (voir la documentation de Klipper). - Le temps restant est approximatif : sans les métadonnées du trancheur, il est extrapolé de la progression du fichier, peu fiable en début d'impression.
- Pas d'image de webcam : l'image doit être un JPEG de 150 Ko au plus
(limite de Gladys) : baissez la résolution de la webcam. Une adresse de
capture relative à Mainsail (
/webcam/?action=snapshot) est lue sur le port 80 de l'imprimante. - Logs : dans la page de l'intégration de Gladys, ou
docker logssur l'hôte.LOG_LEVEL=debugdonne le détail. La clé d'API n'apparaît jamais dans les logs.
Limites
- Trois Moonraker au plus.
- Pas d'envoi de fichier, pas de lancement d'impression depuis Gladys, pas de G-code libre, pas de timelapse, pas de Spoolman, pas des prises (« power devices ») de Moonraker.
- L'image de la webcam est une capture rafraîchie chaque minute (et à la demande), pas un flux vidéo ; seule la première webcam est utilisée.
- Un événement plus court qu'un quart de seconde peut être fusionné avec le suivant par Klipper (une impression qui échoue aussitôt est signalée en échec, sans « démarrée »).
- Développée sans imprimante physique (Klipper avec un micro-contrôleur simulé a servi) : vos retours sont les bienvenus.
- Sans lien avec les projets Klipper et Moonraker.
Paramètres de configuration
Voici les paramètres demandés par Moonraker (Klipper) dans son écran de configuration dans Gladys.
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| Connecter votre imprimante Klipper | section | Non | Saisissez l'adresse de Moonraker : l'adresse IP de l'imprimante (port 7125 par défaut), ou l'adresse avec laquelle vous ouvrez Mainsail ou Fluidd. Une clé d'API n'est utile que si Moonraker ne fait pas confiance à votre réseau. Jusqu'à trois imprimantes. |
| Adresse de Moonraker | string | Non | |
| Clé d'API (facultatif) | secret | Non | Mainsail : Paramètres, Autorisation, clé d'API. Fluidd : Paramètres, Authentification. Laissez vide sur un réseau de confiance. |
| Imprimante 2 (facultatif) | section | Non | |
| Adresse de Moonraker 2 | string | Non | |
| Clé d'API 2 (facultatif) | secret | Non | |
| Imprimante 3 (facultatif) | section | Non | |
| Adresse de Moonraker 3 | string | Non | |
| Clé d'API 3 (facultatif) | secret | Non | |
| Options | section | Non | Langue des noms et textes créés par l'intégration (les noms des fonctionnalités sont fixés à l'ajout de l'appareil). |
| Langue | select | Non |
Comment installer Moonraker (Klipper) dans Gladys
- Dans Gladys, ouvrez Intégrations : Moonraker (Klipper) apparaît dans le catalogue, aux côtés des intégrations natives, avec un badge communautaire.
- Cliquez sur Installer. Gladys télécharge l'image Docker (
ghcr.io/guim31/gladys-moonraker:1.0.1), la démarre dans un bac à sable isolé du cœur, et génère l'interface de l'intégration (appareils, découverte et configuration). - Ouvrez l'écran Configuration de l'intégration, remplissez les paramètres, puis enregistrez.
- Vous pouvez aussi l'installer directement depuis l'URL de son dépôt : https://github.com/guim31/gladys-moonraker.
Moonraker (Klipper) nécessite Gladys >=5.1.0. Le catalogue dans Gladys se rafraîchit toutes les heures : une nouvelle version est donc disponible au plus tard une heure après sa sortie.
Vous n'utilisez pas encore Gladys ? C'est gratuit et open source : suivez le guide d'installation pour démarrer.
À propos des intégrations externes
Moonraker (Klipper) est une intégration externe : une intégration communautaire empaquetée dans un conteneur Docker et publiée sur GitHub, que Gladys installe en un clic et exécute dans un bac à sable isolé de son cœur. Elle est publiée et maintenue par guim31, et non par l'équipe cœur de Gladys.
- Parcourir toutes les intégrations externes
- Découvrir les intégrations natives intégrées à Gladys
- Créer et publier votre propre intégration externe
- Code source sur GitHub — source de cette documentation