500 internal server error sur commande lock / unlock

Bonjour, merci pour le développement de ce plugin, qui globalement fonctionne.

J’ai une erreur, mais qui n’empêche pas totalement le fonctionnement du plugin : lorsque je lance la commande lock / unlock du chargeur, j’ai un message qui s’affiche dans Jeedom : 500 internal server error. LE problème : il n’apparait dans aucun log (ni celui du plugin wallbox, ni ailleurs dans jeedom), et qu’en plus la commande est bien exécutée puisque le chargeur se verrouille / déverrouille bien.

Plus compliqué : lorsque je change l’ampérage autorisé, je n’ai pas d’erreur.

Auriez-vous une piste de recherche à me suggérer ou une idée de la raison de cette erreur ?

JE ne sais pas de quand elle date, j’ai installé le plugin il y a longtemps, l’ai laissé dormant, et je viens de le remettre en service. Il est à jour dans sa version de 11/2022.

Autrement (et après que l’erreur apparaisse), j’ai apporté une petite modification au code du plugin pour le compléter. Si jamais quelqu’un est intéressé, j’ai remplacé le code de la fonction statustotext qui ne reprenait que les états principaux par la liste complète des états (trouvée sur Home assistant pour info).

  public function statustotext($statusid)
  {
     $codes = array(0=> DISCONNECTED, 14=> ERROR, 15=> ERROR, 161=> READY, 162=> READY, 163=> DISCONNECTED, 164=> WAITING, 165=> LOCKED, 166=> UPDATING, 177=> SCHEDULED, 178=> PAUSED, 179=> SCHEDULED, 180=> WAITING_FOR_CAR, 181=> WAITING_FOR_CAR, 182=> PAUSED, 183=> WAITING_IN_QUEUE_POWER_SHARING, 184=> WAITING_IN_QUEUE_POWER_SHARING, 185=> WAITING_IN_QUEUE_POWER_BOOST, 186=> WAITING_IN_QUEUE_POWER_BOOST, 187=> WAITING_MID_FAILED, 188=> WAITING_MID_SAFETY, 189=> WAITING_IN_QUEUE_ECO_SMART, 193=> CHARGING, 194=> CHARGING, 195=> CHARGING, 196=> DISCHARGING, 209=> LOCKED, 210=> LOCKED_CAR_CONNECTED);
     return $codes[$statusid]; 
  }

Pour une erreur 500 il faut regarder dans le log http.error

Merci, bien vu je retrouve en effet l’erreur dans le log HTTP.error. Des fois on se sent naze…

0000|[Fri May 12 12:20:34.735037 2023] [php7:error] [pid 17369] [client 192.168.1.84:52348] PHP Fatal error:  Uncaught Error: Call to a member function setName() on null in /var/www/html/plugins/wallbox/core/class/wallbox.class.php:815
0001|Stack trace:
0002|#0 /var/www/html/core/class/cmd.class.php(1165): wallboxCmd->execute(Array)
0003|#1 /var/www/html/core/ajax/cmd.ajax.php(102): cmd->execCmd(Array)
0004|#2 {main}
0005|thrown in /var/www/html/plugins/wallbox/core/class/wallbox.class.php on line 815, referer: http://192.168.1.73/index.php?v=d&m=wallbox&p=wallbox&id=164

Peut-être une idée ?

faut pas :wink:

non je ne sais pas, je ne connais pas le plugin mais l’erreur est clair: il y a un petit bug à régler ligne 815

Ok, merci. On est dans une boucle Else if :

else if($this->getLogicalId() == 'lockcontrol')

      {

         log::add('wallbox', 'info', 'execute lockcontrol');

         $info = $this->getEqLogic()->getChargerStatus();

         $locked=$info['config_data']['locked'];

         log::add('wallbox', 'debug', 'locked is '.$locked);

         $this->getEqLogic()->defineLockState($locked);

         $eqlogic->getCmd(null, 'lockcontrol');

         if($locked ==0){

            $lockcontrol->setName(__('Verrouiller le chargeur', __FILE__));

         }

         else

         {

            $lockcontrol->setName(__('Déverrouiller le chargeur', __FILE__));

         }

et la ligne 815 est celle-ci (8è ligne de l’extrait) :

$lockcontrol->setName(__('Verrouiller le chargeur', __FILE__));

Qu’est-ce qu pourrait être null dans le setName ? je ne sais pas à quoi correspond le __ après le setName, ni le__FILE__ , mais j’imagine que ce n’est pas le string qui pose problème.

c’est $lockcontrol qui n’existe pas (c’est lui le « null »), le message dit bien: Call to a member function setName() on null

et c’est parce qu’il manque l’assignation 3 lignes plus haut, il faut écrire:

$lockcontrol = $this->getEqLogic()->getCmd(null, 'lockcontrol');

au lieu de

$eqlogic->getCmd(null, 'lockcontrol');

qui tout seul ne sert à rien du tout;

ceci dit c’est pas très propre comme code…
et c’est encore plus moche de changer le nom de la commande ! ($lockcontrol->setName()) en fonction de son état, c’est pas du tout comme ça qu’il faut procéder selon moi…

1 « J'aime »

Merci, c’était effectivement cela.

Et c’est pour cela que ça n’avait pas d’incidence sur le fonctionnement, c’est que l’erreur portait sur le nom de la commande et pas sur l’action qui elle était menée à bien.

A la décharge du développeur du plugin, le plugin est néanmoins fonctionnel, même s’il n’est pas élégant. Le sujet de départ est résolu. Merci à toi pour l’efficacité et la rapidité de l’aide.

1 « J'aime »

Oui tout à fait.
Je suis direct dans mes propos mais ca n’enleve rien au fait que je trouve super d’avoir plein de devs tiers qui font tous les plugins qui sont dispos, on aurait pas autant d’intégration sur jeedom sans tous les devs tiers.
Et on fait tous des bugs, il n’y a que ceux qui ne font rien qui ne se trompent jamais.

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