Energie3 : Unsupported operand types: string + int

Bonjour,

Juste pour remonter une anomalie sur le plugin-energy3 certainement lié à PHP8.

0000|PHP Fatal error:  Uncaught TypeError: Unsupported operand types: string + int in /var/www/html/plugins/energy3/core/class/energy3.class.php:168
0001|Stack trace:
0002|#0 /var/www/html/plugins/energy3/core/class/energy3.class.php(84): energy3->calculImportExport()
0003|#1 /var/www/html/core/class/listener.class.php(267): energy3::listenner()
0004|#2 /var/www/html/core/php/jeeListener.php(49): listener->execute()
0005|#3 {main}
0006|thrown in /var/www/html/plugins/energy3/core/class/energy3.class.php on line 168

Pour le moment j’ai mis des cast en float devant les variables des fonctions calculImportExport() et calculPerformance() ça à l’air de faire le job mais n’utilisant pas vraiment ce plugin (contrairement au plugin-energy) je ne sais pas si c’est le seul endroit pouvant poser problème.


Informations Jeedom

Core : 4.4.19 (master)
DNS Jeedom : non

Plugin : Energie dashboard
Version : 2024-04-05 01:10:46 (stable)

Mips m’a indiqué ce matin que j’utilisais une image de jeedom/jeedom:latest deb 12 + jeedom 4.4, du coup cela n’était pas supporté officiellement.

J’ai donc fait marche arrière et j’allais clôturer tous les sujet que j’ai ouvert mais après être passé sur l’image : jeedom/jeedom:4.4-bullseye deb 11 + jeedom 4.4, j’ai de nouveaux des anomalies qui remontent correspondant aux mêmes lignes.

Dans le fichier de log listerner_execution :

0624|PHP Warning:  A non-numeric value encountered in /var/www/html/plugins/energy3/core/class/energy3.class.php on line 175
0625|PHP Warning:  Division by zero in /var/www/html/plugins/energy3/core/class/energy3.class.php on line 175
0626|PHP Warning:  A non-numeric value encountered in /var/www/html/plugins/energy3/core/class/energy3.class.php on line 182

En attendant une solution officiel, j’ai mis ces corrections :

Dans la fonction calculPerformance(), j’ai donc caster en float les valeurs + ajout de test pour les divisions par 0:

public function calculPerformance() {
    //$production = $this->getCmd('info', 'elec::production')->execCmd();
    //$export = $this->getCmd('info', 'elec::export')->execCmd();
    //$consumption = $this->getCmd('info', 'elec::consumption')->execCmd();
    $production = (float)$this->getCmd('info', 'elec::production')->execCmd();
    $export = (float)$this->getCmd('info', 'elec::export')->execCmd();
    $consumption = (float)$this->getCmd('info', 'elec::consumption')->execCmd();

    //$autoconsumption = round((($production - $export) / $production) * 100, 1);
    if ($production > 0) {
      $autoconsumption = round((($production - $export) / $production) * 100, 1);
    }
    else {
      $autoconsumption = 0;
    }
    
    if ($autoconsumption < 0) {
      $autoconsumption = 0;
    } elseif ($autoconsumption > 100) {
      $autoconsumption = 100;
    }
    $this->checkAndUpdateCmd('elec::autoconsumption', $autoconsumption);
    
    //$selfsufficiency = round((($production - $export) / $consumption) * 100, 1);
    if ($consumption > 0) {
      $selfsufficiency = round((($production - $export) / $consumption) * 100, 1);
    }
    else {
      $selfsufficiency = 0;
    }
    
    if ($selfsufficiency < 0) {
      $selfsufficiency = 0;
    } elseif ($selfsufficiency > 100) {
      $selfsufficiency = 100;
    }
    $this->checkAndUpdateCmd('elec::selfsufficiency', $selfsufficiency);
  }

Dans la fonction calculImportExport() j’ai l’ano suivante qui remonte après avoir appliqué la première correction 0005|PHP Warning: A non-numeric value encountered in /var/www/html/plugins/energy3/core/class/energy3.class.php on line 168 du coup un test que la valeur est bien numérique avant de l’utiliser :

public function calculImportExport() {
    $net_power = jeedom::evaluateExpression($this->getConfiguration('elec::net::power'));
    $elec_production = jeedom::evaluateExpression($this->getConfiguration('elec::production::instant'));
    if ($net_power > 0) {
      $this->checkAndUpdateCmd('elec::import::instant', $net_power);
      $this->checkAndUpdateCmd('elec::export::instant', 0);
    } else {
      $this->checkAndUpdateCmd('elec::import::instant', 0);
      $this->checkAndUpdateCmd('elec::export::instant', -$net_power);
    }
    if ($elec_production > 0) {
      if ($net_power > 0) {
        $this->checkAndUpdateCmd('elec::production::consumption::instant', $elec_production);
      } else {
        $this->checkAndUpdateCmd('elec::production::consumption::instant', $elec_production + $net_power);
      }
    } else {
      $this->checkAndUpdateCmd('elec::production::consumption::instant', 0);
    }

    // Test valeur numérique sinon application de 0 par défaut
    if (!is_numeric($net_power)) {
        $net_power = 0;
    }

    if (!is_numeric($elec_production)) {
        $elec_production = 0;
    }

    $this->checkAndUpdateCmd('elec::consumption::instant', $elec_production + $net_power);
  }

Ma page de santé

Ayant des problèmes de conflit de version python avec cette image, j’ai décidé ce matin de faire un retour-arrière en réactivant ma VM et du coup je suis un peu plus attentif au log, et je constate que j’avais déjà les mêmes messages.

Du coup le sujet n’est pas lié à docker.

Bonjour,
Merci pour le sujet je viens de pousser les corrections en beta (ca sera disponible demain)

1 « J'aime »

Merci @Loic, j’ai installé la beta ce matin et je confirme que c’est bon :slight_smile:
Encore merci pour ta réactivité.

Bonne soirée

Du coup, energy3 compatible deb12 ?

J’essaye de tester ça rapidement et je te fais un retour. J’ai réinstallé la beta avec la correction sur une debian 11.

Finalement je viens de tester avec l’image jeedom/jeedom:latest et j’ai cette erreur qui remonte dans la log energy

0000|[2025-01-22 21:45:04] ERROR  : Erreur sur la fonction cron15 du plugin : Unsupported operand types: string * float

Je n’ai pas d’autres logs qui s’affiche avec le message en parallèle… Ca va être plus compliqué pour faire le debug.

Bonjour,
Il faut attendre la 4.5 qui donnera plus d’informations sur ce type d’erreur pour me permettre de corriger

Super merci Loic,
Dès que j’ai un peu de temps j’essayerais avec la 4.5.

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