Bonjour à tous!
Ca fait longtemps que je n’ai pas mis les mains dans jeedom, j’aime beaucoup les changements!
Je suis sur un nouveau besoin (plugin weenect en cours) pour lequel j’aimerai proposer un PR sur le plugin-gsl pour y ajouter une fonctionnalité.
J’ai une machine de dev sous la v4.4.2.
Je cherche à conserver le type quand j’appelle une commande à partir de l’eqLogic :
dans postsave de l’eqLogic j’ai :
if($this->getConfiguration('type') == 'fix' && $this->getConfiguration('coordinatesType') == 'cmd'){
$cmdPrecName = $this->getConfiguration('coordinated_precision');
$cmd = $this->getCmd(null, 'accuracy');
if($cmdPrecName != null && trim($cmdPrecName) != ''){
if (!is_object($cmd)) {
$cmd = new gslContextualCmd();
$cmd->setName('precision');
$cmd->setEqLogic_id($this->getId());
$cmd->setLogicalId('accuracy');
$cmd->setType('info');
$cmd->setSubType('string');
$cmd->save();
}
$cmdPrec = cmd::byId(str_replace('#','',$cmdPrecName));
if(!is_object($cmdLoc)){
log::add(__CLASS__, 'debug', 'cmd coordianted precision error : cmd not found');
}else{
$cmd->event($cmdPrec->execCmd());
}
} elseif (is_object($cmd)){
$cmd->event('');
$cmd->save();
}
}
et ma class de commande gslContextualCmd :
[edit]
Note importante : j’ai deux class de commande gslCmd et gslContextualCmd
=> seule gslCmd est casté au save de commande ???
class gslContextualCmd extends cmd{
public function postSave(){
if($this->getLogicalId()=='accuracy'){
$eqLogic = $this->getEqLogic();
if(!is_object($eqLogic)){
log::add('gsl', 'debug', 'Error Checking "accuracy" command, no logicalId found');
return;
}
if($eqLogic->getConfiguration('type') == 'fix' && $eqLogic->getConfiguration('coordinatesType') == 'cmd'){
$cmdPrecName = $eqLogic->getConfiguration('coordinated_precision');
if($cmdPrecName == null || trim($cmdPrecName) == ''){
log::add('gsl', 'debug', 'removing cmd : '.$this->getId());
$this->remove();
}
}
}
}
}
le but est de supprimer la commande dans les contextes ou elle n’est pas utile, sans lever d’erreur au save de l’équipement parent.
Problème :
Lors de la création de la commande, je passe bien dans le gslContextualCmd ->postSave
mais quand elle la commande existe, l’appel au $cmd->save ne passe pas par gslContextualCmd ->postSave.
Mes tests montre que $cmd n’est pas une instance de gslContextualCmd :$cmd = $this->getCmd(null, 'accuracy');
ne renvoi pas une instance de gslContextualCmd.
Y’a t’il un moyen de conserver le typage ou de caster, encapusler ou je ne sais quoi la commande pour retrouver le postSave de la commande?