Un scénario pour pouvoir déclencher facilement les API octoprint
Le plugin octoprint permet de récupérer des valeurs (température plateau etc…) mais pas de les imposer. Il permet de déclencher certaines actions mais pas toutes.
On peut le faire via des curl en se servant des API octoprint.
En gros, une API se décompose en deux parties :
Une partie que l’on va appeler API et qui donne la famille d’action (par exemple ‹ connection ›
Une seconde partie qui décrit la commande à réaliser dans cette famille (par exemple ‹ connect › ou ‹ disconnect ›)
La liste des API se trouve ici : REST API — OctoPrint master documentation
et vous aurez sans doute aussi besoin de renseignements sur les GCODE, ça se trouve par exemple ici:
Retract | Marlin Firmware
Pour simplifier l’appel à des API via curl, je me suis créé un scénario qui permettra de déclencher des actions. C’est un peu une « fonction » où l’on passe en paramètre les deux parties de l’API via les tags #API# et #commande#
J’ai fait le choix de placer l’url d’octopi et la clef octoprint dans deux infos d’un virtuel.
Créez un virtuel nommé « V imprimante 3D »
dans lequel vous placez une info « URL octopi »
et vous y placez l’url de votre octopi. L’url peut être une adresse IP.
Vous allez aussi créer une info API key octopi pour y placer votre clef octoprint qui se trouve dans octoprint ici :
(remplacez les xxxxxxx par votre clef octoprint)
Le scénario à créer :
Son code :
// Lance une API Octopi
//-------------------------
// mettre en tag dans le lancement du scénario:
// connexion à l'imprimante : #api#="connection" #commande#="connect"
// imposer une température de 40 pour le bed: #api#=printer/command #commande#="M140 S040"
// imposer une température de 100 pour la buse: #api#=printer/command #commande#="M104 S100"
// Sélectionner le fichier à imprimer : #api#="nomfichier.gcode" #commande#="select"
// lance l'impression #api#="job" #commande#="start"
//-------------------------------------------------------------------------------------------
// On récupère la veleur des tags
$tags = $scenario->getTags();
$api = $tags['#api#'];
$commandeOctopi = $tags['#commande#'];
$urlOctopi=cmd::byString('#[imp 3d][V imprimante 3D][Url octopi]#')->execCmd(); // url de votre octopi. Peut aussi être de la forme http://ip
$apiKey=cmd::byString('#[imp 3d][V imprimante 3D][API key octopi]#')->execCmd(); // la clef API
$cmd="curl -H 'Content-Type: application/json' -H 'X-Api-Key: " .$apiKey
."' -X POST -d '{\"command\":\""
.$commandeOctopi
."\"}' "
.$urlOctopi
."/api/"
.$api
."& ";
exec ($cmd);
Utilisation :
Personnellement, dans le même virtuel que précédemment (V imprimante 3D) , j’ai créé des commandes qui appellent ce scénario :
ici : une commande connect.
En cliquant sur
puis configuration, vous pouvez placer ainsi l’appel au scénario
N’oubliez pas de sauvegarder
Il ne vous reste plus qu’à tester :
Un autre exemple :
imposer une température de 50 pour le Bed
et
Faire un retract de 50 mm
je fais toujours avec un appel au même scénario(3 fois) (en cours de test) avec comme tag :
#api#=printer/command #commande#="M83"
#api#=printer/command #commande#="G1 E-50 F300"
#api#=printer/command #commande#="M82"
Il faut le faire dès que l’impression est fini car les retracts, enfin avec mon imprimante, ne peuvent pas se faire si la buse n’est pas assez chaude.
Dans un scénario, je suis obligé de relancer la chauffe de la buse à 175° avant de faire cette rétractation.
#api#=printer/command #commande#="M109 S180"
Scénario pour l’extinction de l’imprimante.
En fait, il ne se sert que du plugin, pas des API.
Déclencheurs :
En commentaire, en haut :
Action du scénario :
Si l'info En impression a changé et si on est pas en impression alors j'enclenche le processus d'arrêt. Arrêt qui ne se fera que si la température de la buse est descendu en dessous d'une certaine valeur.
Dans ce qui suit, Octopi dans par exemple #[imp 3d][Octopi][En impression]# est le nom que j'ai donné à l'équipement du plugin octoprint correspondant à mon imprimante
dans l'onglet général du scénario, mettre en déclenchement :
#[imp 3d][Octopi][En impression]#
et
#[imp 3d][Octopi][Actuelle tool0]#<40
si vous voulez que l'arrêt se fasse pour une température de la buse < 40°
Copie écran de mon scénario
Dans ce qui suit, Octopi dans par exemple #[imp 3d][Octopi][En impression]# est le nom que j’ai donné à l’équipement du plugin octoprint correspondant à mon imprimante
Version plus complète de scénario de fin d’impression.
Cette version est plus complète que la précédente car elle intègre un dialogues via ask /telegram pour confirmation de l’arrêt de l’imprimante et savoir si on veut une forte rétractation du filament ou pas (pour pouvoir retirer la bobine)
Comment connaitre les Gcodes à envoyer ?
Dans Octopi, il y a une fonction qui vous permet de voir tous les gcodes qui sont envoyés à l’imprimante.
Cochez ces cases afin de filtrer pour ne pas voir tous les messages :
Puis, si vous voulez par exemple voir les codes qui permettent de chauffer la buse, allez dans
Et modifiez la température par exemple de la buse (tool) (ici 14°)
Vous verrez alors les codes correspondant défiler.
(ici M104 S14) on devine que le S14 sert à donner la température à atteindre. On a donc deviné le Gcode qui sert à imposer une température.
En allant sur Retract | Marlin Firmware
vous pouvez en appendre plus sur ce code :
et vous apprenez qu’il existe un code M109 qui fait la même chose mais qui attend avant de déclencher l’action suivante
N’hésitez pas à tester toutes ces actions :
pour voir ce que cela donne dans le terminal
Et n’hésitez pas à aller voir la signification des codes dans
Retract | Marlin Firmware