Bonjour,
je rame pour retrouver un nom dans la config de ma carte…
ancien (obsolete) plugin usb8relais que je ré ecrit…
pb : dans le fichier desktop… j’ai mis les variables des noms que je veux affecter aux relais
$nm_rel1 = $this->getConfiguration('nm_relais_1');
if ($nm_rel1=="") {
$nm_rel1 = "Relais 1";
}
$gce8cmd = $this->getCmd(null,'r1on');
if (!is_object($gce8cmd)) {
$gce8cmd = new gce8cmd();
}
$gce8cmd->setName(__($nm_rel1.' ON',__FILE__));
et ma variable nm_rel1 est toujours vide…
sur la version précedente, les mêmes lignes de code fonctionnaient, je retrouvais bien a la création de ma commande le nom choisi …
je sèche…
merci pour votre aide
Pour que $nm_rel1 change, il faut le renseigner dans le paramétrage. Le placeholder devrait être identique. Relais_1 dans la config != Relais 1 dans le code
Sinon il faut $this->setConfiguration('nm_relais_1','Relais 1') pour le changer dans l’eqLogic + save de l’eqLogic.
Bonjour, et merci pour ta réponse
oui, il y a save.
en fait, j’essaie de récupérer la valeur que j’ai donnée dans l’équipement lors de sa création, pour créer la commande avec le bon nom.
quand je crée un équipement, je lui donne un nom, et je souhaite récupérer ce nom pour crée la commande.
mais le retour du getconfiguration est vide, car ma commande est systématiquement crée avec le nom « Relais 1 » du test. j’ai essayé en rajoutant une valeur par défaut, c’est celle qui est retenue.
comme je suis en postsave, il a du créer les valeurs dans la BD, je devrai pouvoir la récupérer.
j’ai rajouté un item value = « Relais_1 » au lieu de placeholder, mais pas de changements
Le nom de l’équipement n’est pas dans sa configuration. Voir la table eqLogic et son champ name getName() permet de le récupérer.
Du coup, je ne comprends pas l’utilité du morceau de fichier desktop que vous avez montré.
Ni pourquoi vous voulez traduire ce nom quand c’est le nom de la commande avec ON.
je vais le pousser sur github, car je dois pas etre clair.
je crée des paramètres pour chaque équipement dans le fichier desktop (port usb ou elle est connecté, nom des 8 relais)
d’ou les input dans le fichier \desktop\gce8.php…
je souhaite récupérer ces paramètres pour nommer les commandes crées, pour rester lisible ( entrée ou portail est plus parlant que relais 1 relais 2…).
j’ai rajouté un $eqid=$this->getId(), je récupère bien le numéro de l’équipement.
mais si dessous je veux la valeur du paramètre de config avec le getconfig… rien
Pourtant c’est bien comme cela que ca fonctionne mais vu qu’on voit que des bouts de code difficile de trouver ton erreur, on ne sait pas si ces bouts de code sont au bon endroit.
Ceci dit, ca me parait un peu compliqué à l’usage… pourquoi donc faire une config qui va servir à nommer les commandes?
Autant laisser l’utilisateur nommer ces commandes dans la liste des commandes direcetment non?
edit: d’ailleurs, ca risque de poser un autre problème derrière: lors du save, les commandes aussi sont sauvées (celle présente dans la liste), donc tu vas renommer des commandes dans le postSave eqLogic (à chaque save de l’équipement! ce serait déjà mieux de le faire en postInsert) qui vont ensuite être elles mêmes sauvées par le core avec comme source la liste des commandes donc les actions de ton postSave vont être écrasées…
Ce n’est définitivement pas la méthode à suivre je pense.
Oui, c’est bien comme cela que je souhaite le faire fonctionner
A la création de l’équipement carte j’enregistre les paramètres
Puis je crée ou modifie 3 commandes par relais
J’aurais préféré changer le nom une fois pour les 3
D’où la maj dans postsave.
Si tu modifie le nom du relais les 3 commandes se modifient
Si elles existent je fais un setname avec la nouvelle valeur
Mais impossible de la récupérer par getconfiguration
Bonsoir,
Effectivement, voici le déroulement lorsque l’user enregistre l’équipement :
eqLogic.class.js par la fonction jeedom.eqLogic.save envoie l’EqLogic ainsi que toutes ces cmd.
eqLogic.ajax.php reçois les données et commence par traiter les $eqLogic
ceci a pour effet de lancer ta class postsave() Eqlogic.
dans celle-ci tu vient faire un setName sur une cmd.
a partir de ce moment le setName a certainement fonctionné, mais c’est du furtif a cause de l’enchainement des étapes ci-dessous.
eqLogic.ajax.php s’occupe maintenant des cmd, qui, je le rappelle sont toujours stocké dans une variable (tableau) et qui par ce fait non pas subis de modification au suite du postsave() Eqlogic.
le setName est initié avec les valeur contenu dans cette variable.
retour au point de départ
Si je me trompe pas, il faudrait plutôt faire le setName dans le preUpdate() de la class cmd, mais sans initier le save() dans celle-ci car tu pourrai finir dans une boucle sans fin.
Le save() sera fait automatiquement par la suite grâce a l’enchainement de eqLogic.ajax.php.
ok, je vais essayer, mais ca ne résoud pas mon pb.
dans le desktop /gce8.php, je crée mes paramètres, et is sont bien sauvegardées.
quand je quitte et que je reviens sur celui ci, tout est conservé.
je remet le postsave()
<
public function postSave() {
$eqlogic= $this->getId(); // ca fonctionne, je récupère l'Id
$eqnam= $this->getName(); // idem pour le nom, cela fonctionne
$duree=$this->getConfiguration('duree_impulsion'); //retour vide
$nmrel1 = $this->getConfiguration('nmrelais1'); //retour vide
Bonjour,
alors là je comprends encore moins…
j’ai fait pas mal de modifs et de tests, j’arrive a :
dans le fichier desktop, si je nomme les data-l2key en autre chose que « param1 », param2… le getconfiguration renvoie vide
j’ai testé jusqu’a param5, cela fonctionne.
dans le class, je fais une ecriture de log avec mes variables, cela fonctionne dans le presave et le postsave.
je retrouve bien l’ensemble, y compris le $final qui est la concaténation des 5 paramètres.
par contre le setname() avec la variable $final ne me renvoie que l’Id et le nom de l’équipement. les 5 autres paramètres sont vides …
j’ai mis les fichiers en annexe.
le problème ça doit être le caractère "/" qui n’est pas accepté pour le nom des commandes.
autre chose tu peux remplacer $nm_rel1 = $this->getConfiguration('nm_relais_1'); if ($nm_rel1=="") { $nm_rel1 = "Relais 1"; }
par $nm_rel1 = $this->getConfiguration('nm_relais_1', 'Relais 1');
essai de faire de même pour les autres params