[tuto] : Déclencher des API Octoprint dans Jeedom

Je ne me suis jamais posé la question de la différence entre les variables et les tags. (le terme tags n’existe pas dans les autres langages que je connais.)
Les tags sont un peu des variables locales mais qui peuvent aussi servir de paramètres que l’on passe à un scénario non ?
Du coup, effectivement, le fait d’être local est plus propre.
C’est le raisonnement que tu as ?

C’est ça enfin c’est comme ça que je le comprends.
Mais du coup le tag se remet à « » quand on joue le scénario donc il faut l’initialiser comme il faut au début et le faire vivre à chaque relance de scénario si besoin

Comme genre de variable, j’utilise des fois une info d’un virtual.

1 « J'aime »

Bonjour @chris94440 !
Ton message m’a titillé.
J’ai regardé et j’ai avancé un peu :

J’ai modifié le fichier octoprint.class.php
Qui se trouve là:

Plus précisément :
J’ai ajouté //
/
test d’ajout d’une commande tempbed60 par Michel /
/
*********/

	$tempbed60 = $this->getCmd(null, 'tempbed60');
	if (!is_object($tempbed60)) {
		$tempbed60 = new octoprintcmd();
		$tempbed60->setLogicalId('tempbed60');
		$tempbed60->setDisplay('icon','<i class="fa fa-refresh"></i>');
		$tempbed60->setIsVisible(1);
		$tempbed60->setOrder(36);
		$tempbed60->setName(__('Temp du bed a 60', __FILE__));
	}
	$tempbed60->setType('action');
	$tempbed60->setSubType('other');
	$tempbed60->setEqLogic_id($this->getId());
	$tempbed60->save();
}

}`Texte préformaté```

Juste après ce code :

		$restart = $this->getCmd(null, 'restart');
		if (!is_object($restart)) {
			$restart = new octoprintcmd();
			$restart->setLogicalId('restart');
			$restart->setDisplay('icon','<i class="fa fa-refresh"></i>');
			$restart->setIsVisible(1);
			$restart->setOrder(35);
			$restart->setName(__('Relancer Octoprint', __FILE__));
		}
		$restart->setType('action');
		$restart->setSubType('other');
		$restart->setEqLogic_id($this->getId());
		$restart->save();

ou en d’autres termes, juste avant ce code :

class octoprintCmd extends cmd {
	/***************************Attributs*******************************/

J’ai aussi ajouter ce code :

					/******************************************************************************/
					/******************* Pour exécuter les commandes ajoutées **********/
					/******************************************************************************/

				case 'tempbed60':
					$urlprinter = 'http://' . $servip . '/api/printer/command';
					$request_http = new com_http($urlprinter);
					$request_http->setHeader(array('Content-Type: application/json','X-Api-Key: '.$apikey));
					$request_http->setPost('{"commands":["M140 S60"],"parameters":{}}');
				break;	

juste après ce code:

				case 'restart':
					$urlprinter = 'http://' . $servip . '/api/system/commands/core/restart';
					$request_http = new com_http($urlprinter);
					$request_http->setHeader(array('Content-Type: application/json','X-Api-Key: '.$apikey));
					$request_http->setPost('{"source":"core","action":"restart"}');
				break;

Pour ceux qui préfère, le code total devient :

<?php

/* This file is part of Jeedom.
*
* Jeedom is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Jeedom is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
*/

/* * ***************************Includes**********************************/
require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php';

class octoprint extends eqLogic {
	/***************************Attributs*******************************/	
	public static function cron($_eqlogic_id = null) {
		$eqLogics = ($_eqlogic_id !== null) ? array(eqLogic::byId($_eqlogic_id)) : eqLogic::byType('octoprint', true);
		foreach ($eqLogics as $octoprint) {
			try {
				$octoprint->getOctoprintInfo();
			} catch (Exception $e) {

			}
		}
	}
	
	public function getOctoprintInfo() {
		try {
			$servip = $this->getConfiguration('servip','');
			$apikey = $this->getConfiguration('apikey','');
			$urlprinter = 'http://' . $servip . '/api/printer';
			$request_http = new com_http($urlprinter);
			$request_http->setHeader(array('X-Api-Key: '.$apikey));
			$printerinfo=$request_http->exec();
			log::add('octoprint','debug',$printerinfo);
			$jsonprinter = json_decode($printerinfo,true);
			$order = 13;
			foreach($jsonprinter['temperature'] as $key => $val) {
				$octoprintCmd = $this->getCmd(null, 'target'.$key);
				if (!is_object($octoprintCmd)) {
					$octoprintCmd = new octoprintCmd();
					$octoprintCmd->setName(__('Cible ' . $key, __FILE__));
					$octoprintCmd->setLogicalId('target'.$key);
					$octoprintCmd->setEqLogic_id($this->getId());
					$octoprintCmd->setType('info');
					$octoprintCmd->setOrder($order);
					$octoprintCmd->setTemplate('dashboard', 'line');
					$octoprintCmd->setTemplate('mobile', 'line');
					$octoprintCmd->setSubType('numeric');
					$octoprintCmd->setUnite('°C');
					$octoprintCmd->setIsVisible(1);
					$octoprintCmd->save();
				}
				$order += 1;
				$this->checkAndUpdateCmd($octoprintCmd, $jsonprinter['temperature'][$key]['target']);
				$octoprintCmd = $this->getCmd(null, 'actual'.$key);
				if (!is_object($octoprintCmd)) {
					$octoprintCmd = new octoprintCmd();
					$octoprintCmd->setName(__('Actuelle ' . $key, __FILE__));
					$octoprintCmd->setLogicalId('actual'.$key);
					$octoprintCmd->setEqLogic_id($this->getId());
					$octoprintCmd->setType('info');
					$octoprintCmd->setOrder($order);
					$octoprintCmd->setTemplate('dashboard', 'line');
					$octoprintCmd->setTemplate('mobile', 'line');
					$octoprintCmd->setSubType('numeric');
					$octoprintCmd->setUnite('°C');
					$octoprintCmd->setIsVisible(1);
					$octoprintCmd->save();
				}
				$order += 1;
				$this->checkAndUpdateCmd($octoprintCmd, $jsonprinter['temperature'][$key]['actual']);
			}
			foreach($jsonprinter['state']['flags'] as $key => $val) {
				$octoprintCmd = $this->getCmd(null, $key);
				if (is_object($octoprintCmd)) {
					$this->checkAndUpdateCmd($octoprintCmd, $jsonprinter['state']['flags'][$key]);
				}
			}
			$octoprintCmd = $this->getCmd(null, 'status');
			$this->checkAndUpdateCmd($octoprintCmd, $jsonprinter['state']['text']);
			$urljob = 'http://' . $servip . '/api/job';
			$request_http = new com_http($urljob);
			$request_http->setHeader(array('X-Api-Key: '.$apikey));
			$jobinfo=$request_http->exec();
			log::add('octoprint','debug',$jobinfo);
			$jsonjob = json_decode($jobinfo,true);
			foreach($jsonjob['progress'] as $key => $val) {
				$octoprintCmd = $this->getCmd(null, $key);
				if (is_object($octoprintCmd)) {
					$this->checkAndUpdateCmd($octoprintCmd, round($jsonjob['progress'][$key],1));
				}
				$octoprintCmd = $this->getCmd(null, $key.'Human');
				if (is_object($octoprintCmd)) {
					$t = round($jsonjob['progress'][$key],1);
					$this->checkAndUpdateCmd($octoprintCmd, sprintf('%02d:%02d:%02d', ($t/3600),($t/60%60), $t%60));
				}
			}
			$octoprintCmd = $this->getCmd(null, 'filename');
			if (is_object($octoprintCmd)) {
				$this->checkAndUpdateCmd($octoprintCmd, $jsonjob['job']['file']['name']);
			}
		} catch (Exception $e) {
			$octoprintCmd = $this->getCmd(null, 'status');
			if (is_object($octoprintCmd)) {
				$this->checkAndUpdateCmd($octoprintCmd, 'Erreur communication');
			}
		}
	} 
	
	public function getImage(){
		return 'plugins/octoprint/plugin_info/octoprint_icon.png';
	}
	
			
		/******************************************************************************/
		/******************* Pour l'affichage. commandes ajoutées à la fin **********/
		/******************************************************************************/
	
	public function postSave() {
		$status = $this->getCmd(null, 'status');
		if (!is_object($status)) {
			$status = new octoprintcmd();
			$status->setLogicalId('status');
			$status->setIsVisible(1);
			$status->setOrder(1);
			$status->setName(__('Statut', __FILE__));
		}
		$status->setType('info');
		$status->setSubType('string');
		$status->setEqLogic_id($this->getId());
		$status->save();
		
		$filename = $this->getCmd(null, 'filename');
		if (!is_object($filename)) {
			$filename = new octoprintcmd();
			$filename->setLogicalId('filename');
			$filename->setIsVisible(1);
			$filename->setOrder(2);
			$filename->setName(__('Nom fichier', __FILE__));
		}
		$filename->setType('info');
		$filename->setSubType('string');
		$filename->setEqLogic_id($this->getId());
		$filename->save();
		
		$operational = $this->getCmd(null, 'operational');
		if (!is_object($operational)) {
			$operational = new octoprintcmd();
			$operational->setLogicalId('operational');
			$operational->setIsVisible(0);
			$operational->setOrder(3);
			$operational->setName(__('Opérationelle', __FILE__));
		}
		$operational->setType('info');
		$operational->setSubType('binary');
		$operational->setEqLogic_id($this->getId());
		$operational->save();
		
		$paused = $this->getCmd(null, 'paused');
		if (!is_object($paused)) {
			$paused = new octoprintcmd();
			$paused->setLogicalId('paused');
			$paused->setIsVisible(0);
			$paused->setOrder(3);
			$paused->setName(__('En pause', __FILE__));
		}
		$paused->setType('info');
		$paused->setSubType('binary');
		$paused->setEqLogic_id($this->getId());
		$paused->save();
		
		$printing = $this->getCmd(null, 'printing');
		if (!is_object($printing)) {
			$printing = new octoprintcmd();
			$printing->setLogicalId('printing');
			$printing->setIsVisible(0);
			$printing->setOrder(4);
			$printing->setName(__('En impression', __FILE__));
		}
		$printing->setType('info');
		$printing->setSubType('binary');
		$printing->setEqLogic_id($this->getId());
		$printing->save();
		
		$error = $this->getCmd(null, 'error');
		if (!is_object($error)) {
			$error = new octoprintcmd();
			$error->setLogicalId('error');
			$error->setIsVisible(0);
			$error->setOrder(5);
			$error->setName(__('En erreur', __FILE__));
		}
		$error->setType('info');
		$error->setSubType('binary');
		$error->setEqLogic_id($this->getId());
		$error->save();
		
		$ready = $this->getCmd(null, 'ready');
		if (!is_object($ready)) {
			$ready = new octoprintcmd();
			$ready->setLogicalId('ready');
			$ready->setIsVisible(0);
			$ready->setOrder(6);
			$ready->setName(__('Prête', __FILE__));
		}
		$ready->setType('info');
		$ready->setSubType('binary');
		$ready->setEqLogic_id($this->getId());
		$ready->save();
		
		$sdready = $this->getCmd(null, 'sdReady');
		if (!is_object($sdready)) {
			$sdready = new octoprintcmd();
			$sdready->setLogicalId('sdReady');
			$sdready->setIsVisible(0);
			$sdready->setOrder(7);
			$sdready->setName(__('SD prête', __FILE__));
		}
		$sdready->setType('info');
		$sdready->setSubType('binary');
		$sdready->setEqLogic_id($this->getId());
		$sdready->save();
		
		$printTimeLeft = $this->getCmd(null, 'printTimeLeft');
		if (!is_object($printTimeLeft)) {
			$printTimeLeft = new octoprintcmd();
			$printTimeLeft->setLogicalId('printTimeLeft');
			$printTimeLeft->setIsVisible(0);
			$printTimeLeft->setTemplate('dashboard', 'line');
			$printTimeLeft->setTemplate('mobile', 'line');
			$printTimeLeft->setOrder(8);
			$printTimeLeft->setName(__('Temps restant', __FILE__));
		}
		$printTimeLeft->setType('info');
		$printTimeLeft->setSubType('numeric');
		$printTimeLeft->setUnite('s');
		$printTimeLeft->setEqLogic_id($this->getId());
		$printTimeLeft->save();
		
		$printTimeLeftHuman = $this->getCmd(null, 'printTimeLeftHuman');
		if (!is_object($printTimeLeftHuman)) {
			$printTimeLeftHuman = new octoprintcmd();
			$printTimeLeftHuman->setLogicalId('printTimeLeftHuman');
			$printTimeLeftHuman->setIsVisible(1);
			$printTimeLeftHuman->setTemplate('dashboard', 'line');
			$printTimeLeftHuman->setTemplate('mobile', 'line');
			$printTimeLeftHuman->setOrder(9);
			$printTimeLeftHuman->setName(__('Temps restant (humain)', __FILE__));
		}
		$printTimeLeftHuman->setType('info');
		$printTimeLeftHuman->setSubType('string');
		$printTimeLeftHuman->setEqLogic_id($this->getId());
		$printTimeLeftHuman->save();
		
		$printTime = $this->getCmd(null, 'printTime');
		if (!is_object($printTime)) {
			$printTime = new octoprintcmd();
			$printTime->setLogicalId('printTime');
			$printTime->setIsVisible(0);
			$printTime->setTemplate('dashboard', 'line');
			$printTime->setTemplate('mobile', 'line');
			$printTime->setOrder(10);
			$printTime->setName(__('Durée d\'impression', __FILE__));
		}
		$printTime->setType('info');
		$printTime->setSubType('numeric');
		$printTime->setUnite('s');
		$printTime->setEqLogic_id($this->getId());
		$printTime->save();
		
		$printTimeHuman = $this->getCmd(null, 'printTimeHuman');
		if (!is_object($printTimeHuman)) {
			$printTimeHuman = new octoprintcmd();
			$printTimeHuman->setLogicalId('printTimeHuman');
			$printTimeHuman->setIsVisible(1);
			$printTimeHuman->setTemplate('dashboard', 'line');
			$printTimeHuman->setTemplate('mobile', 'line');
			$printTimeHuman->setOrder(11);
			$printTimeHuman->setName(__('Durée d\'impression (humain)', __FILE__));
		}
		$printTimeHuman->setType('info');
		$printTimeHuman->setSubType('string');
		$printTimeHuman->setEqLogic_id($this->getId());
		$printTimeHuman->save();
		
		$completion = $this->getCmd(null, 'completion');
		if (!is_object($completion)) {
			$completion = new octoprintcmd();
			$completion->setLogicalId('completion');
			$completion->setIsVisible(1);
			$completion->setOrder(12);
			$completion->setName(__('Pourcentage d\'avancement', __FILE__));
		}
		$completion->setType('info');
		$completion->setSubType('numeric');
		$completion->setTemplate('dashboard', 'line');
		$completion->setTemplate('mobile', 'line');
		$completion->setUnite('%');
		$completion->setEqLogic_id($this->getId());
		$completion->save();
		
		$refresh = $this->getCmd(null, 'refresh');
		if (!is_object($refresh)) {
			$refresh = new octoprintcmd();
			$refresh->setLogicalId('refresh');
			$refresh->setIsVisible(1);
			$refresh->setName(__('Rafraîchir', __FILE__));
		}
		$refresh->setType('action');
		$refresh->setSubType('other');
		$refresh->setEqLogic_id($this->getId());
		$refresh->save();
		
		$resume = $this->getCmd(null, 'resume');
		if (!is_object($resume)) {
			$resume = new octoprintcmd();
			$resume->setLogicalId(resume);
			$resume->setDisplay('icon','<i class="fa fa-play"></i>');
			$resume->setIsVisible(1);
			$resume->setOrder(30);
			$resume->setName(__('Reprendre limpression', __FILE__));
		}
		$resume->setType('action');
		$resume->setSubType('other');
		$resume->setEqLogic_id($this->getId());
		$resume->save();
		
		$pause = $this->getCmd(null, 'pause');
		if (!is_object($pause)) {
			$pause = new octoprintcmd();
			$pause->setLogicalId(pause);
			$pause->setDisplay('icon','<i class="fa fa-pause"></i>');
			$pause->setIsVisible(1);
			$pause->setOrder(31);
			$pause->setName(__('Mettre en pause', __FILE__));
		}
		$pause->setType('action');
		$pause->setSubType('other');
		$pause->setEqLogic_id($this->getId());
		$pause->save();
		
		$cancel = $this->getCmd(null, 'cancel');
		if (!is_object($cancel)) {
			$cancel = new octoprintcmd();
			$cancel->setLogicalId('cancel');
			$cancel->setDisplay('icon','<i class="fa fa-stop"></i>');
			$cancel->setIsVisible(1);
			$cancel->setOrder(32);
			$cancel->setName(__('Arrêter limpression', __FILE__));
		}
		$cancel->setType('action');
		$cancel->setSubType('other');
		$cancel->setEqLogic_id($this->getId());
		$cancel->save();
		
		$shutdown = $this->getCmd(null, 'shutdown');
		if (!is_object($shutdown)) {
			$shutdown = new octoprintcmd();
			$shutdown->setLogicalId('shutdown');
			$shutdown->setDisplay('icon','<i class="fa fa-power-off"></i>');
			$shutdown->setIsVisible(1);
			$shutdown->setOrder(33);
			$shutdown->setName(__('Eteindre le serveur', __FILE__));
		}
		$shutdown->setType('action');
		$shutdown->setSubType('other');
		$shutdown->setEqLogic_id($this->getId());
		$shutdown->save();
		
		$reboot = $this->getCmd(null, 'reboot');
		if (!is_object($reboot)) {
			$reboot = new octoprintcmd();
			$reboot->setLogicalId('reboot');
			$reboot->setDisplay('icon','<i class="fa fa-random"></i>');
			$reboot->setIsVisible(1);
			$reboot->setOrder(34);
			$reboot->setName(__('Reboot le serveur', __FILE__));
		}
		$reboot->setType('action');
		$reboot->setSubType('other');
		$reboot->setEqLogic_id($this->getId());
		$reboot->save();
		
		$restart = $this->getCmd(null, 'restart');
		if (!is_object($restart)) {
			$restart = new octoprintcmd();
			$restart->setLogicalId('restart');
			$restart->setDisplay('icon','<i class="fa fa-refresh"></i>');
			$restart->setIsVisible(1);
			$restart->setOrder(35);
			$restart->setName(__('Relancer Octoprint', __FILE__));
		}
		$restart->setType('action');
		$restart->setSubType('other');
		$restart->setEqLogic_id($this->getId());
		$restart->save();
		
		/******************************************************************************/
		/******************* test d'ajout d'une commande par Michel **********/
		/******************************************************************************/
		
		
		$tempbed60 = $this->getCmd(null, 'tempbed60');
		if (!is_object($tempbed60)) {
			$tempbed60 = new octoprintcmd();
			$tempbed60->setLogicalId('tempbed60');
			$tempbed60->setDisplay('icon','<i class="fa fa-refresh"></i>');
			$tempbed60->setIsVisible(1);
			$tempbed60->setOrder(36);
			$tempbed60->setName(__('Temp du bed a 60', __FILE__));
		}
		$tempbed60->setType('action');
		$tempbed60->setSubType('other');
		$tempbed60->setEqLogic_id($this->getId());
		$tempbed60->save();
	}
}


class octoprintCmd extends cmd {
	/***************************Attributs*******************************/


	/*************************Methode static****************************/

	/***********************Methode d'instance**************************/

		/******************************************************************************/
		/******************* Pour exécuter la commande **********/
		/******************************************************************************/
	public function execute($_options = null) {
		if ($this->getType() == '') {
			return '';
		}
		$eqLogic = $this->getEqlogic();
		$servip = $eqLogic->getConfiguration('servip','');
		$apikey = $eqLogic->getConfiguration('apikey','');
		$logical = $this->getLogicalId();
		if ($logical != 'refresh'){
			$urlprinter = 'http://' . $servip . '/api/job';
			$request_http = new com_http($urlprinter);
			$request_http->setHeader(array('Content-Type: application/json','X-Api-Key: '.$apikey));
			switch ($logical) {
				case 'cancel':
					$request_http->setPost('{"command":"cancel"}');
				break;
				case 'pause':
					$request_http->setPost('{"command":"pause","action":"pause"}');
				break;
				case 'resume':
					$request_http->setPost('{"command":"pause","action":"resume"}');
				break;
				case 'shutdown':
					$urlprinter = 'http://' . $servip . '/api/system/commands/core/shutdown';
					$request_http = new com_http($urlprinter);
					$request_http->setHeader(array('Content-Type: application/json','X-Api-Key: '.$apikey));
					$request_http->setPost('{"source":"core","action":"shutdown"}');
				break;
				case 'reboot':
					$urlprinter = 'http://' . $servip . '/api/system/commands/core/reboot';
					$request_http = new com_http($urlprinter);
					$request_http->setHeader(array('Content-Type: application/json','X-Api-Key: '.$apikey));
					$request_http->setPost('{"source":"core","action":"reboot"}');
				break;
				case 'restart':
					$urlprinter = 'http://' . $servip . '/api/system/commands/core/restart';
					$request_http = new com_http($urlprinter);
					$request_http->setHeader(array('Content-Type: application/json','X-Api-Key: '.$apikey));
					$request_http->setPost('{"source":"core","action":"restart"}');
				break;
							
				
					/******************************************************************************/
					/******************* Pour exécuter les commandes ajoutées **********/
					/******************************************************************************/

				case 'tempbed60':
					$urlprinter = 'http://' . $servip . '/api/printer/command';
					$request_http = new com_http($urlprinter);
					$request_http->setHeader(array('Content-Type: application/json','X-Api-Key: '.$apikey));
					$request_http->setPost('{"commands":["M140 S60"],"parameters":{}}');
				break;				
				
			}
			$result=$request_http->exec();
			log::add('octoprint','debug',$result);
		}
		$eqLogic->getOctoprintInfo();
	}

	/************************Getteur Setteur****************************/
}
?>

Et donc maintenant, j’ai la commande


et ça fonctionne.

Le problème est qu’en réalité, il faudrait que l’utilisateur puisse rentrer la valeur de la température ou pourquoi pas, car plus universelle directement kle GCODE.
Pas encore trouvé…

Mais ça avance !

Une commande action message fera l’affaire
Tu traites l’action dans la class qui érend cmd

class tonPluginCmd extends cmd {

Avec un code du genre

$eqlogic = $this->getEqLogic();
      	$logicalId=$this->getLogicalId();
      	
      	switch ($logicalId) {
				case 'taNouvelleCommandeActionSetTemperature':
            		
            		if (isset($_options['title'])){
                      if ($_options['title'] == 'setTempBed') {
                        if (isset($_options['message'])) {
							$eqlogic->checkAndUpdateCmd('taCmdInfoTempBed', '$_options['message']);

@chris94440

Honnêtement, j’ai du mal à comprendre (je suis débutant…)
Bon, ça commence mal, c’est quoi une action message ? (tu veux dire une info ?)

Pour ça :

class tonPluginCmd extends cmd {

J’ai bien trouvé ça dans le code

class octoprintCmd extends cmd {

Et visiblement, c’est là où l’on décrit ce que la commande doit faire lorsqu’on l’exécute.

Dans le code que j’ai, on a

		$eqLogic = $this->getEqlogic();
		$servip = $eqLogic->getConfiguration('servip','');
		$apikey = $eqLogic->getConfiguration('apikey','');
		$logical = $this->getLogicalId();
		if ($logical != 'refresh'){
			$urlprinter = 'http://' . $servip . '/api/job';
			$request_http = new com_http($urlprinter);
			$request_http->setHeader(array('Content-Type: application/json','X-Api-Key: '.$apikey));
			switch ($logical) {
				case 'cancel':
					$request_http->setPost('{"command":"cancel"}');
				break;
................

Je reconnais donc un peu le début de ton code :

$eqlogic = $this->getEqLogic();
      	$logicalId=$this->getLogicalId();
      	
      	switch ($logicalId) {

Et j’en déduis qu’il faut ajouter dans les cases ce code

case 'taNouvelleCommandeActionSetTemperature':
            		
            		if (isset($_options['title'])){
                      if ($_options['title'] == 'setTempBed') {
                        if (isset($_options['message'])) {
							$eqlogic->checkAndUpdateCmd('taCmdInfoTempBed', '$_options['message']);

Là, je ne pense pas me tromper car c’est effectivement comme ça que j’avais ajouté le code à exécuter pour la commande action tempbed60
Je suppose qu’il va falloir aussi que j’ajoute du code dans la fonction public function postSave() {
Qui sert à l’affichage des commandes.
Il va falloir que je trouve ce qu’il faut mettre pour une commande message.

SI je reviens à ton code, la commande clef a l’air d’être

$eqlogic->checkAndUpdateCmd('taCmdInfoTempBed', '$_options['message']);

J’ai recherché sur internet ce que pouvait faire checkAndUpdateCmd : pas trouvé.
$_options[‹ message ›] contiendra justement le paramètre (par exemple « M140 S60 ») ?
checkAndUpdateCmd(‹ taCmdInfoTempBed ›, '$_options[‹ message ›]); va permettre de déclencher la commande taCmdInfoTempBed en lui passant en genre de paramètre le message de la commande message ?
Et comment ma commande va elle pouvoir utiliser ce paramètre ?

Bon tu vois, ce n’est pas limpide pour moi !
Mais je vais m’accrocher !!

Hello,
Envoi moi par message privée ou dans cette conversation la class complète … je te ferais une proposition de code avec des commentaires pour que tu comprennes … à mon avis y aura aucun soucis

1 « J'aime »

Juste pour tenir au courant les « lecteurs » de ce post :
En ce qui concerne le fait d’intégrer ces nouvelles fonctions dans le plugin : on a continué en MP.
Grace à @chris94440 on a un code qui marche. Et donc un plugin complété.(enfin, je dis on, mais c’est lui qui a tout fait le boulot :smiley: Trop fort et trop sympa et partient @chris94440 )
Si quelqu’un est pressé, on peut lui passer, mais je vais regarder comment le compléter.
C’est le moment d’ailleurs d’exprimer vos besoins :
Quelles fonctions vous manquent ?
Pour l’instant, j’avancerai à petits pas : je vais me concentrer sur les fonctions qui peuvent se faire via GCODE, mais lâchez vous quand même :smiley:
Ne soyez pas trop pressés, je vais avoir une semaine où je ne pourrai pas coder.

3 « J'aime »

C’est le moment d’ailleurs d’exprimer vos besoins :
Quelles fonctions vous manquent ?
J’ai du mal à trouver les bon noms (ce que vous verrez à gauche dans la page des commandes. N’hésitez pas à faire des propositions.

Pour l’instant :

-Chauffer le bed non bloquant-(slider) (fait)
-Chauffer le bed bloquant
-Arrêt chauffe bed (fait)
-Chauffer la buse non bloquant (slider) (fait)
-Chauffer la buse bloquant
-Arrêt chauffe buse (fait)
-Extrusion fil (fait)
-Paramètre Déplacement tête de l’action suivante(x,y,z, vitesse)
-Action déplacement tête
-Pouvoir lancer n’importe quelle série de Gcode (c’est l’utilisateur qui rentre la série en question de gcodes. Les gcodes sont séparés par exemple par une virgule) (fait)
-zoffset ? (voir ici : M206 ... ou le Z-offset dans un gcode - Paramétrer et contrôler son imprimante 3D - Forum pour les imprimantes 3D et l'impression 3D)

-Connexion octoprint à l’imprimante (fait)
-Déconnexion octoprint à l’imprimante (fait)
-Télécharger un fichier d’impression (il me semble que c’est possible de le faire)
-Lancer l’impression (fait)
-Réimprimer le fichier précédent (je m’étais fait ça. Bien pratique) (fait)

Pas besoin de faire la rétractation : c’est une extrusion négative.

Pensez-vous que l’on ait besoin de pouvoir déplacer la tête en x, y, z ?
C’est facile à faire, mais c’est peut être dangereux ? (je pense qu’il faut le faire, qu’"en pensez-vous ?)
Pas facile à comprendre mais le « déplacement tête de l’action suivante (x,y,z) » contiendra le déplacement qui sera fait lors de l’action "action déplacement tête. Si vous avez mieux du point de vue libellé…

Il y a donc une commande info qui permet de rentrer la température en question mais c’est bien les commandes « Chauffer Bed » ou « Chauffer buse » qui permettent de déclencher la chauffe.
Il existe des chauffes bloquantes = Aucun autre ordre ne peut se faire tant que la température cible n’est pas atteinte. Enfin, si, mais les commandes suivantes sont mises en fil d’attente et ne sont exécutées qu’après.

1 « J'aime »

Bonjour

Alors je réfléchis depuis hier à ça :thinking:

Pour moi il faut qu’il y ait le strict minimum nécessaire et non dévastateurs.
En résumé si je cliques sur une action il faut pas tout casser la machine !!!

Donc rester simple connexion déconnexion à octoprint, mise en chauffe suivant des températures ou listes type PLA etc… que l’on défini par ailleurs, lancer l’impression, indications d’impression terminée pour notification, temps d’impression pour extrapoler la consommation énergétique, longueur de fils pour extrapoler la consommation et faire un coût d’impression de la pièce.

Après les reste est intéressant aussi mais attention :warning: mise en garde en cas d’erreur sur l’intégrité de la machine etc…

J’ai un CR Touch par exemple et avoir la possibilité de faire l’ajustement du Z offset depuis l’ordi est sympa mais peut être risqué aussi

Il y a déjà un certain nombre de fonctions comme la connexion déconnexion qui sont dans le plugin d’origine.
Enfin je crois. Je vérifierai. Edit : hé non, elles n’y sont pas. Il faudra les ajouter. Je vais éditer la liste d’actions pour les ajouter. Par contre, le temps d’impression y est déjà. L’indication de fin d’impression y est aussi (enfin, il y a l’info « en impression »)

Et effectivement certaines fonctions peuvent être dangereuses.

Pour si on veut le faire (mais effectivement voir si pas trop risqué), je n’ai pas de CR Touch et ne peux donc pas le tester, mais la solution a l’air d’être contenue dans ce message :

Merci pour le tuto sur le z offset c’est intéressant
Je vais peut être tester voir si cela résoudra mon réglage

Mais ce qui est certain c’est que depuis que j’ai refait le réglage avec CR touch RAS plus aucun soucis

Compliqué de dire il faut tel ou tel commande en fait.

Peut être pause de l’impression, reprise de l’impression avec maintien de la buse chaude pour changer le fil donc peut être une commande changement de fil.

En fait en dehors du contrôle, de scénarios de mise en route et chauffe et d’extinction de l’imprimante je fais le reste par octoprint

En fait, mettre en pause / reprendre l’impression existe déjà dans le plugin

Sinon, j’ai beaucoup avancé sur le plugin avec l’aide de @ chris94440
J’ai édité le message plus haut où j’avais écrit ce que je pensais que l’on pouvait faire en spécifiant quand c’était fait.
Si quelqu’un veut servir de testeur…