Commande d'une API (dans mon cas celle d'OCTOPRINT)

Bonjour et merci pour l’attention que vous porterez à traiter ma demande :

Je dispose d’une API (celle d’OCTOPRINT) qui me permet de piloter quelques commande d’OCTOPRINT par API (la doc de l’API) stipule :

POST /api/connection HTTP/1.1
Host: example.com
Content-Type: application/json
X-Api-Key: abcdef…

{
« command »: « connect »,
« port »: « /dev/ttyACM0 »,
« baudrate »: 115200,
« printerProfile »: « my_printer_profile »,
« save »: true,
« autoconnect »: true
}

Comment faire en sort que JEEDOM puisse envoyer cette commande ?

Merci par avance pour vos réponses.

Bonjour,
Le plug-in officiel fonctionne pas ?
https://market.jeedom.com/index.php?v=d&p=market_display&id=3295

1 J'aime

Salut tu veut faire quoi exactement, car perso j’ai le plugin octoprint depuis des années

je souhaite en double-cliquant sur une simple icone de mon bureau :

  1. que l’imprimante s’allume (ça c’est ok)
  2. qu’Octoprint se connecte dessus
  3. que les montées en température de la buse et du plateau se fassent

Le plugin octoprint te permet de récupérer des valeurs (température plateau etc…) mais pas de les imposer.

Tu peux le faire avec un curl.
Par exemple, pour te connecter , tu peux faire :
Capture
pour que tu puisse faire un copier coller (change le code API et l’url d’octopi si besoin) :

exec ("
curl -H 'Content-Type: application/json' -H 'X-Api-Key: TONcodeAPIqueTUrecupereDANSoctoprint' -X POST -d '{\"command\":\"connect\"}' http://octopi/api/connection &
") ;

Si tu veux je te donne l’équivalent pour les montés en températures buse et plateau.

Merci pour ta réponse, pour les température (du bed dans mon exemple), j’ai cherché dans la doc le l’API de OCTOPRINT en vain,

exec ("
curl -H 'Content-Type: application/json' -H 'X-Api-Key: monAPIoctoprint' -X POST -d '{/"command/": /"target/",/"target/": 60.0/"}' http://192.168.1.125/api/printer/bed &
") ;

je sens que je ne suis pas loin…

Pour être plus universel, j’ai transformé mon code en :

$urlOctopi='http://octopi'; // url de votre octopi. Peut aussi être de la forme http://ip
$apiKey='XXXXXXXXXXXXXXXXXX';

$commandeOctopi='connect';
$api='connection';// l'API 

$cmd="curl -H 'Content-Type: application/json' -H 'X-Api-Key: " .$apiKey
      ."' -X POST -d '{\"command\":\""
      .$commandeOctopi
      ."\"}' "
      .$urlOctopi
      ."/api/"
      .$api
      ."& ";

exec ($cmd);

Je regarde pour la température.

Pour la température du bed :

$urlOctopi='http://octopi'; // url de votre octopi. Peut aussi être de la forme http://ip
$apiKey='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$commandeOctopi='M140 S050';
$api="printer/command";// l'API 

$cmd="curl -H 'Content-Type: application/json' -H 'X-Api-Key: " .$apiKey
      ."' -X POST -d '{\"command\":\""
      .$commandeOctopi
      ."\"}' "
      .$urlOctopi
      ."/api/"
      .$api
      ."& ";

exec ($cmd);

S050 pour 50° si tu veux 60 ° : S060

Pour la température de la buse, il faut trouver le GCode correspondant.
dans l’exemple ci-dessus, le gcode pour le bed est ```
M140 S050
Je crois mais il faudrait vérifier que pour la buse c’est M104. Là par exemple pour la chauffer à 150° :
M104 S150
Cela donne donc

$urlOctopi='http://octopi'; // url de votre octopi. Peut aussi être de la forme http://ip
$apiKey='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$commandeOctopi='M104 S150';
$api="printer/command";// l'API 

$cmd="curl -H 'Content-Type: application/json' -H 'X-Api-Key: " .$apiKey
      ."' -X POST -d '{\"command\":\""
      .$commandeOctopi
      ."\"}' "
      .$urlOctopi
      ."/api/"
      .$api
      ."& ";

exec ($cmd);

Pour plus de précision, regarde à https://docs.aon3d.com/fr/gcode/detailed_reference/
Regarde la différence entre M104 et M109

Attention, en général, si tu chauffes la buse, tu mets en route le ventilateur. Commande M106 ?

impeccable, je suis parvenu à ce que je voulais.
J’ai juste eu une correction à apporter en enlevant les \"

dans la commande :

$commandeOctopi='M140 S060,M104 S205';
au lieu de
$commandeOctopi='\"M140 S060\",\"M104 S205\"';
Je pilote bien mes 3 étapes :

  1. Allumage
  2. Attente de 5 secondes et Connection
  3. Attente de 10 secondes et chauffes du plateau et de la buse

Merci pour pour ton aide très précieuse.

Tant mieux si on peut le supprimer, je vais les supprimer y compris dans les codes ci-dessus car c’est plus simple. Avec, ça marche,
mais si tu veux combiner deux commande à la fois

Ca ne devait pas être 
commandeOctopi='\"M140 S060\",\"M104 S205\"';
Mais ça devait plutôt être 
$commandeOctopi='\"M140 S060,M104 S205'\" ';

En fait, les \" correspond à des " et donc ce que l'on mettait dans la variable était
"M140 S060,M104 S205"

Mais autant ne pas les mettre si ça marche.

Je suis en train de tester le fait de pouvoir relancer une impression par jeedom:
Je mémorise l’ancien fichier et je donne la possibilité par un clic de relancer la dernière impression. Utile lorsque l’on a la même pièce à faire en plusieurs exemplaires.

Commande pour sélectionner le fichier à imprimer

// sélectionne le fichier à imprimer 
$impNomFichierImpression=cmd::byString('#[imp 3d][V imprimante 3D][Dernier nom fichier]#')->execCmd(); //nom du fichier à imprimer

$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

// les deux lignes précédentes peuvent être remplacé par quelque chose du genre :
//$urlOctopi='http://octopi'; // url de votre octopi. Peut aussi être de la forme http://ip
//$apiKey='XXXXXX';// votre clef API


$commandeOctopi='select';
//$api='files/local/fixationBobine.aw.gcode';// l'API sans / devant
$api='files/local/'.$impNomFichierImpression;// l'API sans / devant
$cmd="curl -H 'Content-Type: application/json' -H 'X-Api-Key: " .$apiKey
      ."' -X POST -d '{\"command\":\""
      .$commandeOctopi
      ."\"}' "
      .$urlOctopi
      ."/api/"
      .$api
      ."& ";

exec ($cmd);

Et pour l’impression elle même :

// démarre l'impression
$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(); 

$commandeOctopi='start';
$api='job';// l'API 

$cmd="curl -H 'Content-Type: application/json' -H 'X-Api-Key: " .$apiKey
      ."' -X POST -d '{\"command\":\""
      .$commandeOctopi
      ."\"}' "
      .$urlOctopi
      ."/api/"
      .$api
      ."& ";

exec ($cmd);