Tuto Imprimante 3D sous klipper-moonraker

Bonjour,
Juste pour vous dire que j’ai pu relier jeedom à mon imprimante 3D sous klipper. Normalement, ça marche pour toutes les imprimantes sous klipper.
Si ça vous intéresse je vous donnerai tous les détails, mais le genre de truc que l’on peut faire :
récupérer
-l’état de l’imprimante
-les différentes températures

agir :
-lancer des gcodes et donc par exemple, chauffer la buses, chauffer le bed, positionner la tête,
-faire avancer le filament ou l’extruder. Voir ici : https://www.lesimprimantes3d.fr/forum/topic/9491-tutoriel-liste-des-gcode-principaux-et-couramment-utilis%C3%A9s/

Principe :
Dans un script (via plugin script), on place des requêtes GET qui permettent de récupérer de l’information ou des requêtes POST qui permettant d’agir sur l’imprimante. Ca se fait directement avec l’imprimante, sans passer par un intermédiaire comme Octopi par exemple.

Je vais éditer ce premier message au fur et à mesure pour commencer le tuto.

Principes généraux :
Si notre imprimante est sous klipper / moonraker, vous pourrez dialoguer avec elle en utilisant les API moonraker.voir ici https://moonraker.readthedocs.io/en/latest/web_api/
Dans ce qui suit, nous utiliserons le plugin script pour dialoguer avec l’imprimante via des requêtes GET pour obtenir de l’information telle que l’état de l’imprimante ou POST pour déclencher des actions telles que chauffer la buse ou démarrer une impression. Ces requête peuvent également être déclenchées par exemple via un php ou un python. L’idéal serait d’en faire un plugin.

Faites l’expérience suivante : allumez votre imprimante, qui doit être connecté au réseau interne de chez vous (wifi ou rj45), attendez la fin de son démarrage et tapez dans votre navigateur préféré, sous un micro connecté au même réseau que l’imprimante, cette url :
http://192.168.1.29:7125/printer/info en remplaçant 192.168.1.29 par l’IP de votre imprimante. Bien laisser le :7125 à la fin. Vous devriez avoir une réponse au format JSON de ce style :

{
  "result": {
    "state_message": "Printer is ready",
    "klipper_path": "/home/mks/klipper",
    "config_file": "/home/mks/klipper_config/printer.cfg",
    "software_version": "v0.10.0-530-g3387a9c2-dirty",
    "hostname": "mkspi",
    "cpu_info": "4 core ?",
    "state": "ready",
    "python_path": "/home/mks/klippy-env/bin/python",
    "log_file": "/home/mks/klipper_logs/klippy.log"
  }
}

Si le résultat de ce test a été positif, vous pouvez continuer.
Laissez un message dans cette discussion en donnant le nom/marque de votre imprimante et si ce test a été positif.

Première étape : installation du plugin script
Je suppose que vous savez installer un plugin. Je ne détaille pas. Si besoin, demandez.
Créez un nouveau script
image

L’activer et le rendre visible, rien de spécial pour sa configuration

et remplir l’auto-actualisation par exemple en y plaçant * * * * * pour une actualisation toutes les minutes.

Création d’une première commande : température du bed
facultatif : dans votre navigateur, tapez cette commande :
http://q1pro:7125/printer/objects/query?heater_bed
en remplaçant « q1pro » par l’ip de votre imprimante (192.168.1…) ou son nom réseau.
vous obtenez quelque une réponse au format JSON

{
  "result": {
    "status": {
      "heater_bed": {
        "temperature": 15.14,
        "power": 0,
        "target": 0
      }
    },
    "eventtime": 1323.701121963
  }
}

Ce que l’on cherche à récupérer est la température; ici 15.14°c (oui, il fait froid dans mon bureau :smiley: )

Dans l’onglet commandes, ajoutez une nouvelle commande :
image
Donnez lui un nom
image

et remplissez les paramètres comme ceci :
Dans l’url plaçez
http://q1pro:7125/printer/objects/query?heater_bed
image

en remplaçant « q1pro » par l’ip de votre imprimante (192.168.1…)ou son nom réseau.

Il faut pouvoir récupérer seulement la température.
Dans le type de script choisissez JSON puisque c’est une réponse au format JSON que l’on va récupérer.
Pour le type, dans un premier temps, choisissez « Autre » pour les essais. Vous le passerez en numérique ultérieurement.
image
Désactivez « Historiser » car si ce que l’on extrait pendant les essais est une chaine trop grande, vous aurez une erreur. Après les essais, vous pourrez cocher cette case dans problème.
image
puis
image

Premier essai :
dans la colonne requête, placez
result>status
puis image
vous obtenez sous-partie une partie de ce que vous aviez obtenu en tapant l’url dans votre navigateur.
image

et si on continue à filtrer encore plus en plaçant result>status>heater_bed>temperature et ce coup ci en se mettant en numérique
image
Lorsque vous sauvegardez, vous obtenez dans la colonne état la température.
image
Voilà, je pense que vous avez compris le principe général de l’utilisation du plugin script pour notre besoin en requête GET avec un résultat au format JSON avec extraction d’une donnée bien précise.

température de la buse
Là, c’est exactement comme pour le bed, mais l’url est
http://q1pro:7125/printer/objects/query?extruder
En replaçant q1pro par l’ip de votre imprimante
et en plaçant dans la colonne requête
result>status>extruder>temperature

Maintenat que vous avez compris le principe, je continue mais en allant droit au but

Cible de température pour le bed
Url : http://q1pro:7125/printer/objects/query?heater_bed
requête : result>status>heater_bed>target

Cible de température pour la buse
Url : http://q1pro:7125/printer/objects/query?extruder
reqûete : result>status>extruder>target

*Etat de l’imprimante première solution
Url : http://q1pro:7125/api/printer
Requête : state>text (attention pas de result au départ)
les valeurs renvoyé peuvent être
« Operational »
« paused »
« Printing »
« Cancelling »
« Pausing »
« Error »
« Ready »
« ClosedOrError »

**Etat de l’imprimante ** Fonctionne chez moi
Url : http://q1pro:7125/printer/objects/query?print_stats
requête ; result>status>print_stats>state

Réponses possible :
printing
paused
standby

Dernier fichier imprimé :
Url : http://q1pro:7125/server/history/list?limit=1&start=0&since=1&order=desc
Requête : result>jobs>0>filename

Comment créer des actions pour agir sur l’imprimante
Tout ce que l’on a vu correspond à de la demande d’information. des GET. Maintenant, on va voir comment agir sir l’imprimante et donc via des POST.
Les POST ne peuvent se faire juste en rentrant une url comme précédemment. On va donc passer par des CURL.
Un CURL permet de lancer des requêtes GET mais aussi, et c’est ce qui nous intéresse, des POST.
Pour le fun, si vous lancez dans une invite de commande ou via putty cette commande (en y mettant votre ip comme on l’a vue précédemment) :

curl -X GET "http://q1pro:7125/printer/info"

Vous obtiendrez le même résultat que lorsque vous l’aviez fait via votre navigateur.

Mettre l’imprimante sur pause
Je commence par une action qui n’a pas besoin de paramètre.
Créez une nouvelle commande script et remplissez les paramètres comme ceci
-Donnez un nom à votre commande (Pause)
-choisissez « script »
-précisez « action » et comme script (avec votre IP) : curl -X POST "http://q1pro:7125/printer/print/pause"

Si vous avez une impression en cours et que vous cliquez sur
image
votre impression se mettra en pause.
Relancer l’imprimante après une pause
Créez une nouvelle commande, nommez là par exemple ResumePause. remplissez les paramètres comme précédemment, mais comme script, vous mettez :
curl -X POST "http://q1pro:7125/printer/print/resume"

Arréter une impression
pareil mais comme script :
curl -X POST "http://q1pro:7125/printer/print/cancel"

Lancer une impression
Là, c’est un peu plus compliqué car il faut donner au POST un paramètre : le nom du fichier à imprimer. Fichier qui se trouve dans l’imprimante.
On va devoir faire un curl de ce genre :
curl -X POST « http://q1pro:7125/printer/print/start » -H « Content-Type: application/json » -d « {"filename": "cube.gcode"} »

Remplacez cube.gcode par le nom de votre fichier. A noter que je n’ai pas donné de chemin. Mais le fichier doit être dans le bon répertoire (répertoire où l’imprimante place les fichiers gcode) dans votre imprimante. Chez moi : /home/mks/gcode_files

Relancer la dernière impression
Là, on va combiner ce que l’on vient de voir mais en passant en paramètre le nom du dernier fichier imprimé. Nom que l’on obtiendra via la commande que l’on avait créé ayant pour but justement de récupérer le nom du dernier fichier imprimé (voir plus haut).

Supposons que la commande en question se nomme DernierImprime
et que votre équipement se nomme q1pro et qu’il ait comme objet parent imp 3d
image

Alors, pour jeedom, dans tout script jeedom, #[imp 3d][q1pro][DernierImprime]#contiendra le résultat de la commande DernierImprime
Le plus simple pour récupérer l’équivalent de #[imp 3d][q1pro][DernierImprime]# chez vous est d’aller dans Outils / testeur d’expression
image
puis
image
et d’aller chercher l’équivalent de


cliquez sur
image
et dans l’historique, vous faites un copier de l’équivalent de `

#[imp 3d][q1pro][DernierImprime]#

Il n’a plus qu’à remplacer dans
curl -X POST "http://q1pro:7125/printer/print/start" -H "Content-Type: application/json" -d "{\"filename\": \"cube.gcode\"}"
bien sûr q1pro par votre ip,
mais aussi cube.gcode par
#[imp 3d][q1pro][DernierImprime]#

Cela donne pour moi :
curl -X POST "http://q1pro:7125/printer/print/start" -H "Content-Type: application/json" -d "{\"filename\": \"#[imp 3d][q1pro][DernierImprime]#\"}"

Envoyer un gcode
Pouvoir envoyer un gcode permet de faire énormément de choses. changer les températures extruder, bouger le plateau, ma tête (attention prudence…) etc. On trouve facilement sur internet la liste des gcodes possibles. Par exemple ici https://reprap.org/wiki/G-code
Il y a des nuances à prendre en compte. Par exemple, M140 S20 lance la chauffe du plateau à 20° et lance le Gcode suivant sans attendre, alors que M190 S20 lance la chauffe du plateau à 20° mais attend d’avoir fini pour lancer le gcode suivant.
Pour la buse, c’est M104 S20 (sans attente) et M109 S20 (avec attente)
Par exemple, pour monter la température du bed à 20°, Le curl est
curl -X POST « http://q1pro:7125/printer/gcode/script » -H « Content-Type: application/json » -d « {"script": "M140 S20"} »
M140 S20 est le gcode que vous pouvez remplacer par n’importe quel autre.
Arréter la chauffe du bed :
curl -X POST « http://q1pro:7125/printer/gcode/script » -H « Content-Type: application/json » -d « {"script": "M140 S0"} »
Chauffer la buse à 20°
curl -X POST « http://q1pro:7125/printer/gcode/script » -H « Content-Type: application/json » -d « {"script": "M104 S20"} »
Arrêter la chauffe de la buse
curl -X POST « http://q1pro:7125/printer/gcode/script » -H « Content-Type: application/json » -d « {"script": "M104 S0"} »

Lancer plusieurs gcode à la fois par exemple arrêter la chauffe du bed ainsi que la chauffe de la buse…
Il suffit de séparer les gcodes par un ;
curl -X POST « http://q1pro:7125/printer/gcode/script » -H « Content-Type: application/json » -d « {"script": "M104 S0; M140 S0"} »

Bonjour,

Super
Ça mériterait presque un plugin :wink:
tu peux partager le script ?

2 « J'aime »

Bonsoir,

Super.
Ton script serai-il compatible avec une Ender 3 V3 KE de creality ?
Je veux bien le tester :wink: :wink: et te faire un retour :wink:

Je rejoints SWR, peux-tu partager ton script ?

Je ne sais malheureusement pas faire les plugins. Mais oui, ça pourrait, et ça m’intéresserait
En fait, ce n’est pas un script, mais des requêtes POST ou GEt que je place lance grace au plugin script.
Et oui, bien sûr, je partage tout.

Je ne connais pas cette imprimante, mais si elle est basée sur Klipper / Moonraker, il y a des chances.

Pour tester :dans un navigateur, tape comme url
http://ipDeTonImprimante:7125/printer/info

en remplacant ipDeTonImprimante par l’ip de ton imprimante.

Ca devrait te renvoyer un truc du style
{« result »: {« state_message »: « Printer is ready », « klipper_path »: « /home/mks/klipper », « config_file »: « /home/mks/klipper_config/printer.cfg », « software_version »: « v0.10.0-530-g3387a9c2-dirty », « hostname »: « mkspi », « cpu_info »: « 4 core ? », « state »: « ready », « python_path »: « /home/mks/klippy-env/bin/python », « log_file »: « /home/mks/klipper_logs/klippy.log »}}

Si ça le fait, c’est bon.
Je donnerais plus de détail demain.

Edit : c’est pas gagné. Voici ce que chatgpt me répond :
question posée à chatgpt :
L’imprimante Ender 3 V3 KE de creality est elle sous klipper / moonraker

réponse
L’imprimante Creality Ender 3 V3 KE peut être configurée pour utiliser Klipper et Moonraker, mais cela nécessite une mise à jour du firmware et l’accès root à l’imprimante2. Vous pouvez suivre des tutoriels en ligne pour installer ces logiciels et obtenir un contrôle complet de votre imprimante2.

J’ai commencé à éditer le premier message pour commencer le tuto.

Dites moi si ça fonctionne pour vous.

1 « J'aime »

J"ai à peu près fini le tuto (voir le premier message).Il faut que je me relise.

Si vous avez d’autres besoins en infos ou actions, posez la question ici, et je chercherai.

Bonjour @loutre38
Curieux de savoir si c’est compatible avec ton imprimante.Tu as pu faire un essai ?

(rentrer cette url après modification de l’ip pour celle de ton imprimante : http://192.168.1.29:7125/printer/info ) et voir si ça renvoie quelque chose )

Bien le bonjour mic7800,

Je n’ai pas oublié :innocent:
Semaine bien chargée pro et perso pas eu le temps de tester. J’espère pouvoir regarder dans le week-end et faire un retour.

Ma ender 3v3 ke est bien sous klipper et il faut activer le mode root qui fait sauter la garantie (déjà fait).

Bon week-end.

1 « J'aime »

J’ai pas mal progressé, j’ai réussi à faire du MQTT avec mon imprimante sous klipper.
Plus satisfaisant pour recueillir des donnés et évènement car dans ce cas, on ne dépend pas d’un cron comme ci-dessus et donc on a l’évènement en termps presque réel (fin de l’impression par exemple) et non au bout de par exemple la mn du cron.

Je n’ai pas encore réussi à déclencher des actions (lancer une impression…) via MQTT, mais là, la méthode POST que je décrit plus haut n’a pas d’inconvénient, en gros, par rapport au MQTT.

Je donnerai des précisions lus tard sur le MQTT, mais regardez quand même le tuto acruel, ce ne sera pas perdu, au moins pour lres POST.

Pour ce qui est du MQTT par rapport à klipper pour mon imprimante, vous pouvez aller voir ici, mais je ferais plus tard, surtout s’il y a de la demande, un TUTO dédié jeedom-MQTT klipper.

https://www.lesimprimantes3d.fr/forum/topic/61181-tuto-mqtt-avec-une-q1pro-%C3%A7a-a-lair-de-marcher-en-partie/#comment-620832

Salut,

Voici mon retour,
Imprimante 3D : Créality Ender 3 V3 KE en V1.1.0.15 et compte root activé.
Moonracker non installé.

J’arrive à me connecter en ssh sans problème.

Par contre sur chrome avec http://192.168.x.xx:7125/printer/info, j’ai le message suivant : Ce site est inaccessible.

Il faut certainement Moonraker :thinking: :thinking:
Je vais chercher comment installer Moonracker.

La partie MQTT semble intéressante, à suivre :wink: :wink:

Bonne soirée.

@mic78000
Je confirme qu’il faut que Moonraker soit installé.

J’ai suivi ce tuto pour installer Moonracker sur ma Creality Ender 3 V3 KE très simplement.

Voici ce que j’ai quand je tape http://ip_impri_3D:7125/printer/info :

image

Bonne soirée.

Donc c’est bon, tu dois pouvoir suivre le tuto.
Et aussi sans doute celui sur MQTT / moonraker