Probleme de code mais je ne comprend pas pourquoi

Bonjour tout le monde,

J’ai une erreur dans une de mes updates mais je comprend pas pourquoi. Surtout qu’elle fonctionne sur mon environnement de dev.

Dans une mise à jour, j’ai ajouté une commande a mes équipements (Alarme déclenchée) qui j’ai dans mon fichier JSON (https://raw.githubusercontent.com/mguyard/Jeedom-Diagral_eOne/develop/core/config/config.json)

Dans mon code d’ajout de commande (fonction createCmd que je n’ai pas changé - https://raw.githubusercontent.com/mguyard/Jeedom-Diagral_eOne/develop/core/class/Diagral_eOne.class.php) il me sort une erreur 500 lors du traitement de la nouvelle commande

PHP Fatal error: Uncaught Error: Call to a member function setName() on boolean in /var/www/Jeedom/plugins/Diagral_eOne/core/class/Diagral_eOne.class.php:221\nStack trace:\n#0 /var/www/Jeedom/plugins/Diagral_eOne/core/class/Diagral_eOne.class.php(127): Diagral_eOne->createCmd()\n#1 /var/www/Jeedom/core/class/DB.class.php(199): Diagral_eOne->postSave()\n#2 /var/www/Jeedom/core/class/eqLogic.class.php(945): DB::save(Object(Diagral_eOne), false)\n#3 /var/www/Jeedom/core/ajax/eqLogic.ajax.php(379): eqLogic->save()\n#4 {main}\n thrown in /var/www/Jeedom/plugins/Diagral_eOne/core/class/Diagral_eOne.class.php on line 221, referer: https://jeedom.mguyard.com/index.php?v=d&m=Diagral_eOne&p=Diagral_eOne&id=172

Je ne comprend pas.
Si quelqu’un peut m’éclairer car je n’arrive vraiment pas a comprend le souci. Pourtant j’ai vérifié le contenu de mon $command[‹ name ›] et j’ai bien la valeur attendu

Tu fait un setName sur une variable qui n’est pas une commande.
Tu peux faire un if isobject pour au moins ne pas avoir d’erreur mais ta je pense que t’a commande n’en est pas une.

Merci de ton retour.
C’est ce que je fais a priori et ca marche normalement.
Ca créé la commande si elle n’existe pas. Et l’update si elle existe

image

Salut,

tu as juste oublié de créer ta commande au début de ton if :wink:

if (!is_object($cmd)) {
    $cmd = new xxxxxCmd();
    .....

edit: d’ailleurs tu devrais faire ceci en plus du setname

$cmd->setLogicalId($command["logicalId"]);
$cmd->setEqLogic_id($this->getId()); // en supposant que tu es dans une fonction de la class de ton eqLogic

Bon et bien je ne comprend pas comment ca marchait avant mais tu as bien la solution avec le new XXCmd.
Merci vraiment tu me sors une épine du pied…MERCI :pray:

Pour cette partie je le faisait deja un peu plus bas :wink:

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.