Bonsoir,
J’ai mis en place la solution de Seb82 pour la récupération des états de mes IPX800V3 avec succès sur un gros site (8 IPXV3 avec chacun entre 1 et 3 extension X880).
La version jeedom est 3.3.59.
Le firmware de l’IPX est 3.05.42.
Tout fonctionne sauf la récupération des push sur 2 IPX.
J’ai tout contrôlé mais je n’arrive pas à trouver d’où vient le problème, lorsque le scénario reçoit un push de la part de l’IPX associé, les entrées digitales du virtuel associé passent toutes à 0 alors que les logs du scénario sont correct.
Voici un extrait du virtuel:
Le scénario associé:
ttre à jour un objet virtuel repré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.60.206"; // 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
/* 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][AN1]#")->event((string)$xml->analog0);
//cmd::byString("#[IPX800][IPX800_virtuel][AN2]#")->event((string)$xml->analog1);
//cmd::byString("#[IPX800][IPX800_virtuel][AN3]#")->event((string)$xml->analog2);
//cmd::byString("#[IPX800][IPX800_virtuel][AN4]#")->event((string)$xml->analog3);
// Extraction des compteurs depuis XML
//$scenario->setLog("Mise à jour des compteurs depuis XML");
//cmd::byString("#[IPX800][IPX800_virtuel][C1]#")->event((string)$xml->count0);
//cmd::byString("#[IPX800][IPX800_virtuel][C2]#")->event((string)$xml->count1);
//cmd::byString("#[IPX800][IPX800_virtuel][C3]#")->event((string)$xml->count2);
//cmd::byString("#[IPX800][IPX800_virtuel][C4]#")->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_R+1][R1 Commande Ch 101]#")->event((string)$xml->led0);
cmd::byString("#[IPX800][IPX800_R+1][R2 Commande Ch 102]#")->event((string)$xml->led1);
cmd::byString("#[IPX800][IPX800_R+1][R3 Commande Ch 103]#")->event((string)$xml->led2);
cmd::byString("#[IPX800][IPX800_R+1][R4 Commande Ch 104]#")->event((string)$xml->led3);
cmd::byString("#[IPX800][IPX800_R+1][R5 Commande Ch 105]#")->event((string)$xml->led4);
cmd::byString("#[IPX800][IPX800_R+1][R6 Commande Ch 106]#")->event((string)$xml->led5);
cmd::byString("#[IPX800][IPX800_R+1][R7 Commande Ch 107]#")->event((string)$xml->led6);
cmd::byString("#[IPX800][IPX800_R+1][R8 Commande Ch 108]#")->event((string)$xml->led7);
cmd::byString("#[IPX800][IPX800_R+1][R9 Commande Ch 109]#")->event((string)$xml->led8);
cmd::byString("#[IPX800][IPX800_R+1][R10 Commande Ch 110111]#")->event((string)$xml->led9);
cmd::byString("#[IPX800][IPX800_R+1][R12 occupation Ch 111]#")->event((string)$xml->led11);
// Extraction des entrées digitales depuis XML
$scenario->setLog("Mise à jour des entrées digitales depuis XML");
cmd::byString("#[IPX800][IPX800_R+1][I1 occupation Ch 101]#")->event(((string)$xml->btn0=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I2 occupation Ch 102]#")->event(((string)$xml->btn1=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I3 occupation Ch 103]#")->event(((string)$xml->btn2=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I4 occupation Ch 104]#")->event(((string)$xml->btn3=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I5 occupation Ch 105]#")->event(((string)$xml->btn4=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I6 occupation Ch 106]#")->event(((string)$xml->btn5=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I7 occupation Ch 107]#")->event(((string)$xml->btn6=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I8 occupation Ch 108]#")->event(((string)$xml->btn7=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I9 occupation Ch 109]#")->event(((string)$xml->btn8=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I10 occupation Ch 110]#")->event(((string)$xml->btn9=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I11 SD ch 101]#")->event(((string)$xml->btn10=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I12 SD Ch 102]#")->event(((string)$xml->btn11=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I13 SD Ch 103]#")->event(((string)$xml->btn12=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I14 Sd Ch 104]#")->event(((string)$xml->btn13=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I15 SD Ch 105]#")->event(((string)$xml->btn14=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I16 SD Ch 106]#")->event(((string)$xml->btn15=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I17 SD Ch 107]#")->event(((string)$xml->btn16=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I18 SD Ch 108]#")->event(((string)$xml->btn17=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I19 SD Ch 109]#")->event(((string)$xml->btn18=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I20 SD Ch 110111]#")->event(((string)$xml->btn19=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I21 CCF 7]#")->event(((string)$xml->btn20=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I22 CCF 8]#")->event(((string)$xml->btn21=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I23 CCF 9]#")->event(((string)$xml->btn22=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I24 CCF 10]#")->event(((string)$xml->btn23=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I25 CCF 11]#")->event(((string)$xml->btn24=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I26 CCF 12]#")->event(((string)$xml->btn25=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I27 CCF 13]#")->event(((string)$xml->btn26=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I28 CCF 14]#")->event(((string)$xml->btn27=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I29 CCF 15]#")->event(((string)$xml->btn28=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I30 CCF 16]#")->event(((string)$xml->btn29=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I31 SD divers]#")->event(((string)$xml->btn30=="up")?0:1);
cmd::byString("#[IPX800][IPX800_R+1][I32 SD ventil]#")->event(((string)$xml->btn31=="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_R+1][R1 Commande Ch 101]#")->event(substr($push,1,1));
cmd::byString("#[IPX800][IPX800_R+1][R2 Commande Ch 102]#")->event(substr($push,2,1));
cmd::byString("#[IPX800][IPX800_R+1][R3 Commande Ch 103]#")->event(substr($push,3,1));
cmd::byString("#[IPX800][IPX800_R+1][R4 Commande Ch 104]#")->event(substr($push,4,1));
cmd::byString("#[IPX800][IPX800_R+1][R5 Commande Ch 105]#")->event(substr($push,5,1));
cmd::byString("#[IPX800][IPX800_R+1][R6 Commande Ch 106]#")->event(substr($push,6,1));
cmd::byString("#[IPX800][IPX800_R+1][R7 Commande Ch 107]#")->event(substr($push,7,1));
cmd::byString("#[IPX800][IPX800_R+1][R8 Commande Ch 108]#")->event(substr($push,8,1));
cmd::byString("#[IPX800][IPX800_R+1][R9 Commande Ch 109]#")->event(substr($push,9,1));
cmd::byString("#[IPX800][IPX800_R+1][R10 Commande Ch 110111]#")->event(substr($push,10,1));
cmd::byString("#[IPX800][IPX800_R+1][R12 occupation Ch 111]#")->event(substr($push,12,1));
// Extraction des entrées digitales depuis tag push
$scenario->setLog("Mise à jour des entrées digitales depuis tag");
cmd::byString("#[IPX800][IPX800_R+1][I1 occupation Ch 101]#")->event(substr($push,32+1,1));
cmd::byString("#[IPX800][IPX800_R+1][I2 occupation Ch 102]#")->event(substr($push,32+2,1));
cmd::byString("#[IPX800][IPX800_R+1][I3 occupation Ch 103]#")->event(substr($push,32+3,1));
cmd::byString("#[IPX800][IPX800_R+1][I4 occupation Ch 104]#")->event(substr($push,32+4,1));
cmd::byString("#[IPX800][IPX800_R+1][I5 occupation Ch 105]#")->event(substr($push,32+5,1));
cmd::byString("#[IPX800][IPX800_R+1][I6 occupation Ch 106]#")->event(substr($push,32+6,1));
cmd::byString("#[IPX800][IPX800_R+1][I7 occupation Ch 107]#")->event(substr($push,32+7,1));
cmd::byString("#[IPX800][IPX800_R+1][I8 occupation Ch 108]#")->event(substr($push,32+8,1));
cmd::byString("#[IPX800][IPX800_R+1][I9 occupation Ch 109]#")->event(substr($push,32+9,1));
cmd::byString("#[IPX800][IPX800_R+1][I10 occupation Ch 110]#")->event(substr($push,32+10,1));
cmd::byString("#[IPX800][IPX800_R+1][I11 SD ch 101]#")->event(substr($push,32+11,1));
cmd::byString("#[IPX800][IPX800_R+1][I12 SD Ch 102]#")->event(substr($push,32+12,1));
cmd::byString("#[IPX800][IPX800_R+1][I13 SD Ch 103]#")->event(substr($push,32+13,1));
cmd::byString("#[IPX800][IPX800_R+1][I14 Sd Ch 104]#")->event(substr($push,32+14,1));
cmd::byString("#[IPX800][IPX800_R+1][I15 SD Ch 105]#")->event(substr($push,32+15,1));
cmd::byString("#[IPX800][IPX800_R+1][I16 SD Ch 106]#")->event(substr($push,32+16,1));
cmd::byString("#[IPX800][IPX800_R+1][I17 SD Ch 107]#")->event(substr($push,32+17,1));
cmd::byString("#[IPX800][IPX800_R+1][I18 SD Ch 108]#")->event(substr($push,32+18,1));
cmd::byString("#[IPX800][IPX800_R+1][I19 SD Ch 109]#")->event(substr($push,32+19,1));
cmd::byString("#[IPX800][IPX800_R+1][I20 SD Ch 110111]#")->event(substr($push,32+20,1));
cmd::byString("#[IPX800][IPX800_R+1][I21 CCF 7]#")->event(substr($push,32+21,1));
cmd::byString("#[IPX800][IPX800_R+1][I22 CCF 8]#")->event(substr($push,32+22,1));
cmd::byString("#[IPX800][IPX800_R+1][I23 CCF 9]#")->event(substr($push,32+23,1));
cmd::byString("#[IPX800][IPX800_R+1][I24 CCF 10]#")->event(substr($push,32+24,1));
cmd::byString("#[IPX800][IPX800_R+1][I25 CCF 11]#")->event(substr($push,32+25,1));
cmd::byString("#[IPX800][IPX800_R+1][I26 CCF 12]#")->event(substr($push,32+26,1));
cmd::byString("#[IPX800][IPX800_R+1][I27 CCF 13]#")->event(substr($push,32+27,1));
cmd::byString("#[IPX800][IPX800_R+1][I28 CCF 14]#")->event(substr($push,32+28,1));
cmd::byString("#[IPX800][IPX800_R+1][I29 CCF 15]#")->event(substr($push,32+29,1));
cmd::byString("#[IPX800][IPX800_R+1][I30 CCF 16]#")->event(substr($push,32+30,1));
cmd::byString("#[IPX800][IPX800_R+1][I31 SD divers]#")->event(substr($push,32+31,1));
cmd::byString("#[IPX800][IPX800_R+1][I32 SD ventil]#")->event(substr($push,32+32,1));
}
}
Le push dans la configuration de l’IPX est configuré comme décrit sur le forum
/core/api/jeeApi.php?apikey=CLE_API&type=scenario&id=XX&action=start&tags=push%3De$O$I
Est ce quelqu’un a déjà eu ce problème? J’ai passé tellement de temps à configurer tout ça que je ne sais plus où chercher. Si quelqu’un peut m’aider!
Bonne soirée