Erreurs dans les logs "scenario_execution"

Bonjour à tous,

En faisant un tour dans les logs, j’ai trouvé un souci dans « scenario_execution ».

Plusieurs centaines de fois cette alerte :

1078|PHP Notice: Undefined index: #push# in /var/www/html/core/class/scenarioExpression.class.php(1886) : eval()'d code on line 29

Le souci est qu’il n’y pas d’autre indication.
Savez-vous comment je peux identifier la cause du problème ?

Merci.

A minima il serait bien de donner la version du core utilisée.
V3, v4, v4.4 alpha ?

La machine hôte ainsi que l’os.

Car en l’état le sujet est vaste donc autant essayer de reduire le scope des le depart.

Je rappelerai peut etre a tord que vous etes seul devant votre machine et seul a savoir. E que vous avez mis en place.

Toute bonne volonté ne peut deviner et donc aider a diagnostiquer sans veritables infos.

Si tu es mecano et que je te dis ma moto marche pas help… tu reponds quoi ?
Moi de peime a bord met de lessence

Dc un peu plus de serieux dans la remontée des soucis nest que positif pour recevoir une aide.

Sinon bon nombre de helpers passeront.leur chemin

@anon53349806 , ce n’est pas un manque de sérieux, il s’avère que je pensais que cet extrait de log parlerait aux développeurs.

Voici les infos demandées :

  • Machine hôte → cpu Ryzen 2400GE
  • OS → Debian 10
  • Jeedom stable → 4.3.15
  • Aucun plugin beta.

→ Si besoin d’autres éléments, ne pas hésiter.

Bonjour,

C’est lié a un bloc code, sans doute l’utilisation d’un tag qui n’est pas existant.

  • Outils → recherche
  • Recherche par « Mot »
  • Rechercher « #push# »

Tu devrait retrouver le scénario concerné.

2 « J'aime »

TOP ! J’ai trouvé le scénario concerné.
Merci beaucoup @Phpvarious

Bonsoir,

Je reviens sur le sujet, car malgré la correction, les erreurs persistent. (Pour info, ce sont des scénarios avec bloc code qui remplacent le plugin IPX800v3 passé en legacy).

Etat des lieux :

  • 6 scénarios qui gèrent chacun un IPX800v3 (push + polling)
  • Codes identiques à part les paramètres (IP et noms E/S IPX)
  • Dès que je lance l’un des scénarios, j’ai cette erreur systématique :
    PHP Notice: Undefined index: #push# in /var/www/html/core/class/scenarioExpression.class.php(1886) : eval()'d code on line 29

J’ai passé un des codes dans un outil en ligne → RAS. N’étant pas dev, je sèche :thinking:
Si l’un d’entre vous pouvait jeter un oeil…

Merci d’avance !

L’un des codes type :

/* IPX800v3

Ce code permet de mettre à jour un objet virtuel réprésentant l'IPX800 de deux manières :
- Soit par lecture du fichier globalstatus.xml sur l'IPX
- Soit par lancement par le push de l'IPX de ce scénario en transmettant un tag nommé push (permet d'avoir un retour immédiat)

Plus d'informations ici : https://www.jeedom.com/forum/viewtopic.php?f=133&t=47112

*/

/* Configuration */

$IP_IPX800 = "192.168.200.108";	  			// Changer par l'IP de l'IPX800
$PORT_IPX800 = "80"; 		  				// Port de l'IPX800 si modifié, sinon laisser 80
$IDENTIFIANT = "";			  				// Identifiant s'il y a en a un, sinon vide
$MOT_DE_PASSE = "";			  				// Mot de passe s'il y a en a un, sinon vide
$IPX800_virtuel = "vir_IPX800_SSOL4";		// Nom de l'IPX800 

/* Pour le push, dans la configuration de l'IPX aller dans M2M > Push, mettre l'IP de Jeedom dans Server et dans Path mettre /core/api/jeeApi.php?apikey=CLE_API&type=scenario&id=XX&action=start&tags=push%3De$O$I
 CLE_API est à remplacer par le clé API de Jeedom (roue crantée en haut à droite > Configuration > API > Clef API )
 XX est à remplacer par l'ID de ce scénario
 $O contient l'état des 32 relais (8 de l'IPX800 et les éventuelles extensions)
 $I contient l'état des 32 entrées digitales (8 de l'IPX800 et les éventuelles extensions)
*/

// On récupère les tags du scénario
$tags = $scenario->getTags();
// On extrait l'éventuel tag push
$push = $tags['#push#'];

// S'il n'y a pas de tag "push", on lit le fichier xml de l'IPX800

if (!$push) {
  
  $scenario->setLog("Pas de tag push, lecture du fichier globalstatus.xml sur l'IPX800");

  // Url du fichier globalstatus.xml de l'IPX800
  $Url = "http://".(($IDENTIFIANT == "")?"":($IDENTIFIANT.":".$MOT_DE_PASSE."@")).$IP_IPX800.":".$PORT_IPX800."/globalstatus.xml";
  $scenario->setLog("Url du fichier : ".$Url);

  // Récupération du fichier avec curl
  $InitPage = curl_init();
  curl_setopt($InitPage, CURLOPT_URL, $Url);
  curl_setopt($InitPage, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($InitPage, CURLOPT_USERAGENT, 'Jeedom');
  $resultat = curl_exec ($InitPage);
  //$scenario->setLog($resultat); // Décommenter cette ligne pour vérifier dans le log du scénario le contenu récupéré 
  $response_code = curl_getinfo($InitPage,CURLINFO_RESPONSE_CODE); // Récupération du statut de réponse de la requête http
  curl_close($InitPage);
  
  if ($response_code == 200) { // Vérifie si la récupération s'est bien passée
    
    // Conversion du XML en objet PHP 
    $xml = simplexml_load_string($resultat);
    
    // Extraction de la version pour voir si le fichier est valide
    $version = (string)$xml->version;
    $scenario->setLog("Version : ".$version);
    
	if ($version == "") {
      $scenario->setLog("Fichier globalstatus.xml non valide");
      log::add('ipx800','error',"Fichier globalstatus.xml non valide");
    } else {

      // Extraction des valeurs analogiques depuis XML
      $scenario->setLog("Mise à jour des valeurs analogiques depuis XML");
      cmd::byString("#[IPX800][$IPX800_virtuel][AN01]#")->event((string)$xml->analog0);
      cmd::byString("#[IPX800][$IPX800_virtuel][AN02]#")->event((string)$xml->analog1);
      cmd::byString("#[IPX800][$IPX800_virtuel][AN03]#")->event((string)$xml->analog2);
      cmd::byString("#[IPX800][$IPX800_virtuel][AN04]#")->event((string)$xml->analog3);
      
      cmd::byString("#[IPX800][$IPX800_virtuel][AN05]#")->event((string)$xml->analog4);
      cmd::byString("#[IPX800][$IPX800_virtuel][AN06]#")->event((string)$xml->analog5);
      cmd::byString("#[IPX800][$IPX800_virtuel][AN07]#")->event((string)$xml->analog6);
      cmd::byString("#[IPX800][$IPX800_virtuel][AN08]#")->event((string)$xml->analog7);

      
      // Extraction des compteurs depuis XML
      $scenario->setLog("Mise à jour des compteurs depuis XML");
      cmd::byString("#[IPX800][$IPX800_virtuel][C01]#")->event((string)$xml->count0);
      cmd::byString("#[IPX800][$IPX800_virtuel][C02]#")->event((string)$xml->count1);
      cmd::byString("#[IPX800][$IPX800_virtuel][C03]#")->event((string)$xml->count2);
      cmd::byString("#[IPX800][$IPX800_virtuel][C04]#")->event((string)$xml->count3);

      
      // Extraction des états des relais depuis XML
//      $scenario->setLog("Mise à jour de l'état des relais depuis XML");
//      cmd::byString("#[IPX800][$IPX800_virtuel][R01]#")->event((string)$xml->led0);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R02]#")->event((string)$xml->led1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R03]#")->event((string)$xml->led2);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R04]#")->event((string)$xml->led3);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R05]#")->event((string)$xml->led4);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R06 - Carillon ssol]#")->event((string)$xml->led5);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R07 - Gache portillon]#")->event((string)$xml->led6);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R08 - Carillon rdc]#")->event((string)$xml->led7); 
      
//      cmd::byString("#[IPX800][$IPX800_virtuel][R09]#")->event((string)$xml->led8);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R10]#")->event((string)$xml->led9);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R11]#")->event((string)$xml->led10);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R12]#")->event((string)$xml->led11);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R13]#")->event((string)$xml->led12);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R14]#")->event((string)$xml->led13);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R15]#")->event((string)$xml->led14);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R16]#")->event((string)$xml->led15);
      
//      cmd::byString("#[IPX800][$IPX800_virtuel][R17]#")->event((string)$xml->led16);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R18]#")->event((string)$xml->led17);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R19]#")->event((string)$xml->led18);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R20]#")->event((string)$xml->led19);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R21]#")->event((string)$xml->led20);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R22]#")->event((string)$xml->led21);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R23]#")->event((string)$xml->led22);
//      cmd::byString("#[IPX800][$IPX800_virtuel][R24]#")->event((string)$xml->led23); 
            
      
      // Extraction des entrées digitales depuis XML
//      $scenario->setLog("Mise à jour des entrées digitales depuis XML");
//      cmd::byString("#[IPX800][$IPX800_virtuel][I01 - Diff1]#")->event(((string)$xml->btn0=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I02 - Diff2]#")->event(((string)$xml->btn1=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I03 - Diff3]#")->event(((string)$xml->btn2=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I04 - Diff4]#")->event(((string)$xml->btn3=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I05 - Main 220v]#")->event(((string)$xml->btn4=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I06]#")->event(((string)$xml->btn5=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I07 - Cde gache portillon]#")->event(((string)$xml->btn6=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I08 - IR escalier]#")->event(((string)$xml->btn7=="up")?0:1);
      
//      cmd::byString("#[IPX800][$IPX800_virtuel][I09]#")->event(((string)$xml->btn9=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I10]#")->event(((string)$xml->btn10=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I11]#")->event(((string)$xml->btn11=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I12]#")->event(((string)$xml->btn12=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I13]#")->event(((string)$xml->btn13=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I14]#")->event(((string)$xml->btn14=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I15]#")->event(((string)$xml->btn15=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I16]#")->event(((string)$xml->btn16=="up")?0:1);       
      
//      cmd::byString("#[IPX800][$IPX800_virtuel][I17]#")->event(((string)$xml->btn17=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I18]#")->event(((string)$xml->btn18=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I19]#")->event(((string)$xml->btn19=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I20]#")->event(((string)$xml->btn20=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I21]#")->event(((string)$xml->btn21=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I22]#")->event(((string)$xml->btn22=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I23]#")->event(((string)$xml->btn23=="up")?0:1);
//      cmd::byString("#[IPX800][$IPX800_virtuel][I24]#")->event(((string)$xml->btn24=="up")?0:1);       
      
    }
    
  } else {
    $scenario->setLog("Erreur lors de la récupération du fichier globalstatus.xml");
    log::add('ipx800','error',"Erreur lors de la récupération du fichier globalstatus.xml");
  }

} else {
  
  $scenario->setLog("Tag push détecté, information reçue : ".$push);
  
  if (substr($push,0,1) == 'e') {  // On vérifie que le tag push commence par un 'e' pour être sûr d'avoir une bonne information 
    
    // Extraction des états des relais depuis tag push - 
    $scenario->setLog("Mise à jour de l'état des relais depuis tag");
    cmd::byString("#[IPX800][$IPX800_virtuel][R01 - LED BAL]#")->event(substr($push,1,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R02 - Blocs LED mur rue]#")->event(substr($push,2,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R03]#")->event(substr($push,3,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R04]#")->event(substr($push,4,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R05]#")->event(substr($push,5,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R06 - Carillon ssol]#")->event(substr($push,6,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R07 - Gache portillon]#")->event(substr($push,7,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R08 - Carillon rdc]#")->event(substr($push,8,1));
    
    cmd::byString("#[IPX800][$IPX800_virtuel][R09]#")->event(substr($push,9,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R10]#")->event(substr($push,10,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R11]#")->event(substr($push,11,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R12]#")->event(substr($push,12,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R13]#")->event(substr($push,13,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R14]#")->event(substr($push,14,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R15]#")->event(substr($push,15,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R16]#")->event(substr($push,16,1));
    
    cmd::byString("#[IPX800][$IPX800_virtuel][R17]#")->event(substr($push,17,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R18]#")->event(substr($push,18,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R19]#")->event(substr($push,19,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R20]#")->event(substr($push,20,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R21]#")->event(substr($push,21,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R22]#")->event(substr($push,22,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R23]#")->event(substr($push,23,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][R24]#")->event(substr($push,24,1));
        

    // Extraction des entrées digitales depuis tag push
    $scenario->setLog("Mise à jour des entrées digitales depuis tag");
    cmd::byString("#[IPX800][$IPX800_virtuel][I01 - Diff1]#")->event(substr($push,32+1,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I02 - Diff2]#")->event(substr($push,32+2,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I03 - Diff3]#")->event(substr($push,32+3,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I04 - Diff4]#")->event(substr($push,32+4,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I05 - Main 220v]#")->event(substr($push,32+5,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I06]#")->event(substr($push,32+6,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I07 - Cde gache portillon]#")->event(substr($push,32+7,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I08 - IR escalier]#")->event(substr($push,32+8,1));
    
    cmd::byString("#[IPX800][$IPX800_virtuel][I09]#")->event(substr($push,32+9,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I10]#")->event(substr($push,32+10,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I11]#")->event(substr($push,32+11,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I12]#")->event(substr($push,32+12,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I13]#")->event(substr($push,32+13,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I14]#")->event(substr($push,32+14,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I15]#")->event(substr($push,32+15,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I16]#")->event(substr($push,32+16,1));
    
    cmd::byString("#[IPX800][$IPX800_virtuel][I17]#")->event(substr($push,32+17,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I18]#")->event(substr($push,32+18,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I19]#")->event(substr($push,32+19,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I20]#")->event(substr($push,32+20,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I21]#")->event(substr($push,32+21,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I22]#")->event(substr($push,32+22,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I23]#")->event(substr($push,32+23,1));
    cmd::byString("#[IPX800][$IPX800_virtuel][I24]#")->event(substr($push,32+24,1));
    
  }

}

Salut,

Tu peux essayer ça :

// On extrait l'éventuel tag push
$push = false;
if (isset($tags['#push#'])) {
  $push = $tags['#push#'];
} 

A l’aveugle depuis mon mobile donc pas certain de pas avoir loupé quelque chose

@salvialf,
Bravo et merci → Problème réglé :+1:

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