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 
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));
}
}