› Forums › Serveur WES › Installation & Configuration › Modif fichier .CGX perso
- Ce sujet contient 13 réponses, 2 participants et a été mis à jour pour la dernière fois par
Richard, le il y a 4 années et 4 mois.
- Post
-
Bonjour.
J’avais fait un fichier.CGX perso grace au support de Cdlog2
Aujourd’hui je souhaite ajouter dans mon fichier .cgx perso les infos de teleinfo/graphique du tableau TIC1
Année HP, année Hc pour les Kw et les coûts.
Pour trouver le code j’ai appliqué les infos d’un ancien échange.
——–
…..vous êtes sous Firefox vous cliquez dans Examiner l’élément. Et si vous êtes sous Chrome vous cliquez dans Examiner. La Console du Navigateur va s’ouvrir et vous verrez une partie du code HTML de cette Page Web.
Une zone est sélectionné en bleu. C’est la ligne qui contient la valeur qui vous intéresse.
Si vous regardez bien, à coté de la valeur numérique vous trouver un Identifiant entre guillemet sous la forme id= »PLSCM_1″.
PLSCM_1 est l’identifiant qui permet au fichier CGX de trouver ou placer cette valeur numérique dans la Page Web via une fonction JS.
Bon maintenant vous connaissez l’identifiant de la rubrique qui vous intéresse soit : PLSCM_1. Il vous faut maintenant rechercher le CodeClés qui permet d’afficher la valeur pour cet Identifiant PLSCM_1.La Page Web ou vous êtes est PLSGRAPH.HTM ou PLSGRAPH.HTML suivant la version de la page ouverte.
Vous allez Chercher dans le dossier WEBPROG/CGX/ le fichier PLSGRAPH.CGX. Vous éditez le fichier et vous cherchez la ligne qui contient l’Identifiant PLSCM_1.
…..
————–J’ai donc transposé et je suis allé dans le fichier TICGRAPH.CGX et je n’ai rien trouvé.
J’ai certainement loupé un truc
Bonne journée
00
- Replies
-
-
Bonjour,
Désolé mais ces infos CGX sont gérées un peu différemment de ce que vous connaissez. C’est le fichier TICGRAPH.CGX qui vous intéresse.
Toutes les infos de cette page sont construit avec des Codes Clé CGX qui formatent des Tableaux HTML prérempli par le Serveur.Le Code clé qui vous intérresse est :
t <![CDATA[
c ac1
t ]]>Il faut absolument respecter la mise en forme CGX avec ces 3 lignes qui définissent que c’est un Tableau qui est attendu au Serveur.
Le résultat isolé de ce Code Clé me donne ceci par envoie de la requête depuis un fichier CGX de test :
<tr class=’A0′><td>Année HP</td><td align=right>8706</td><td align=right>1418</td></tr> <tr class=’A0′><td>Année HC</td><td align=right>5230</td><td align=right>633</td></tr>
Si je mets cette ligne en forme cela donne ceci :
<tr class=’A0′>
<td>Année HP</td>
<td align=right>8706</td>
<td align=right>1418</td>
</tr>
<tr class=’A0′>
<td>Année HC</td>
<td align=right>5230</td>
<td align=right>633</td>
</tr>On retrouve bien les valeurs Kwh et Coût pour les HP et HC. Si vous souhaitez récupérer ces infos, il vous faut en extraire les valeurs depuis votre Script Jeedom ou Domiticz.
Cdt
00 -
Merci pour ce retour
j’ai donc intégré:
t <![CDATA[
c ac1
t ]]>
Dans mon fichier .CGXJ’ai lancé http://192.168.1.xx/DATA_test.CGX et j’ai le résultat suivant
…….
</info>
<tr class=’A0′><td>Année HP</td><td align=right>4013</td><td align=right>608</td></tr> <tr class=’A0′><td>Année HC</td><td align=right>2830</td><td align=right>324</td></tr>
<tic1>
…..Dans mon scenario Jeedom j’avais des infos de ce type pour récupérer les data du Wes (scenario fait avec votre aide)
lireValeurXml($xml, ‘impulsion’, ‘PULSE1’, 1459, 0);
lireValeurXml($xml, ‘impulsion’, ‘PULSE2’, 1460, 0);Et comme les choses ne sont pas simples pour moi, je ne vois pas comment écrire le bout de code qui va bien dans mon scenario.
00 -
Bonjour,
Désolé pour le retard j’étais absent.
La fonction PHP lireValeurXml($pXml, $pXmlNoeud, $pXmlAttribut, $pId, $pUnite); de votre Script d’Origine permet de faire 3 choses :
– La 1ere est d’extraire depuis un fichier XML une liste de <TAG> enfant depuis le nom d’un <TAG> parent défini par $pXmlNoeud.
– La 2eme est de récupérer la Valeur d’un des <TAG> enfant, nommé par $pXmlAttribut, de la Liste des <TAG> précédemment isolées.
– La 3eme est d’enregistrer la Valeur de ce <TAG> enfant dans JEEDOM référencé par le N° d’identification $pId.Cela fonctionne bien lorsque le XML de référence est structuré avec cette logique :
<parent>
<enfant-1> Valeur </enfant-1>
<enfant-2> Valeur </enfant-2>
<enfant-3> Valeur </enfant-3>
</parent>Hors le résultat de ce Code CGX spécifique « c ac1 » ne renvoie pas la même structure :
<tr class=’A0′>
<td>Année HP</td>
<td align=right>4013</td>
<td align=right>608</td>
</tr>
<tr class=’A0′>
<td>Année HC</td>
<td align=right>2830</td>
<td align=right>324</td>
</tr>On constate d’une part qu’il n’y a pas dans le résultat de cette Zone CGX, de <TAG> parent et que tous les <TAG> enfant ont le même intitulé : <TD>. En plus on s’aperçoit qu’il y du texte parasite « align=right » dans la définition de certains <TAG> enfant : <TD align=right >
Donc en 1er on doit définir un <TAG> parent qui permet d’isoler cette zone du XML, comme on veut récupérer le tableau Année du TIC1 on peut lui donner ce nom » tableau_année_TIC1″ :
t <tableau_année_TIC1>
t <![CDATA[
c ac1
t ]]>
t </tableau_année_TIC1>Maintenant on peut récupérer cette zone XML en le ciblant avec le nom du TAG <tableau_année_TIC1>.
une 1ere FCT pour récupérer cette ZONE XML : $Tabl = $pXml->getElementsByTagName(« tableau_année_TIC1 »)->item(0)->nodeValue;la VAR $Tabl aura pour résultat la zone du XML :
<tr class=’A0′><td>Année HP</td><td align=right>4013</td><td align=right>608</td></tr> <tr class=’A0′><td>Année HC</td><td align=right>2830</td><td align=right>324</td></tr>Il reste maintenant à cibler les Valeurs enfants. mais on doit avant tout supprimer les textes parasites, l’espace et « align=right » des TAG <TD> enfant : On demande pour cela, par une fonction PH preg_replace, de supprimer l’ensemble de ce texte de la zone XML définie par $Tabl
$Tabl = preg_replace( » align=right », « », $Tabl);
le résulat de $Tenfant sera :
<tr class=’A0′>
<td>Année HP</td>
<td>4013</td>
<td>608</td>
</tr>
<tr class=’A0′>
<td>Année HC</td>
<td>2830</td>
<td>324</td>
</tr>Il nous reste maintenant de cibler chaque TAG <TD> enfant pour récupérer chaque valeur. Comme ces enfants ont le même nom de TAG <TD> on doit cibler chaque enfant par son n° de Rang.
// On va cibler le N° Item(x) pour récupérer la valeur de chaque TAG <TD> enfant :
$TexteHP = $Tabl->getElementsByTagName(« td »)->item(0)->nodeValue; // 1er Tag <TD> enfant
$valkwHP = $Tabl->getElementsByTagName(« td »)->item(1)->nodeValue; // 2eme Tag <TD> enfant
$valcoutHP = $Tabl->getElementsByTagName(« td »)->item(2)->nodeValue; // 3eme Tag <TD> enfant
$TexteHC = $Tabl->getElementsByTagName(« td »)->item(3)->nodeValue; // 4eme Tag <TD> enfant
$valkwHC = $Tabl->getElementsByTagName(« td »)->item(4)->nodeValue; // 5eme Tag <TD> enfant
$valcoutHC = $Tabl->getElementsByTagName(« td »)->item(5)->nodeValue; // 6eme Tag <TD> enfantIl ne reste qu’a enregistrer les Infos qui nous intéresse dans les identifiants JEEDOM
$cmd=cmd::byId(xx1231xx);
$cmd->setValue($valkwHP);
$cmd->event($valkwHP);$cmd=cmd::byId(xx1232xx);
$cmd->setValue($valcoutHP);
$cmd->event($valcoutHP);
$cmd=cmd::byId(xx1234xx);
$cmd->setValue($valkwHC);
$cmd->event($valkwHC);$cmd=cmd::byId(xx1236x);
$cmd->setValue($valcoutHC);
$cmd->event($valcoutHC);Mais pour que ces fonctions soit portable pour d’autre type de ZONE CGX équivalent on va regrouper l’ensemble dans une même Fonction PHP :
/*
# Lecture d’une valeur d’un flux XML type Tableau HTML et mise à jour de l’objet virtuel de JEEDOM
# Paramètres:
# – $pXml: contient l’ensemble du document XML à lire.
# – $pXmlNoeud: contient le nom du noeud parent XML à lire.
# – $pXmlAttribut: contient le nom de l’attribut enfant XML à lire.
# – $nItem: contient le n° enfant du TAG à lire (NOUVEAU)
# – $pId: Identifiant du virtuel Jeedom dans lequel la valeur de l’attribut XML doit être stockée.
# – $pUnite: Divise la valeur par ce chiffre si $pUnite est >à zéro.
*/
function lireValeurTableauXml($pXml, $pXmlNoeud, $pXmlAttribut, $pItem, $pId, $pUnite) {
try {
// récupération de la zone XML parent du tableau HTML
$Tabl = $pXml->getElementsByTagName($pXmlNoeud)->item(0)->nodeValue;
// suppression des caractères espaces et textes parasites.
$Tabl= preg_replace( » align=right », « », $Tabl);
// récupération de la valeur du N° Item d’un enfant TAG <TD>
$valeur = $Tabl->getElementsByTagName($pXmlAttribut)->item($pItem)->nodeValue;
if ($pUnite > 0)
$valeur = $valeur / $pUnite;$cmd=cmd::byId($pId);
$cmd->setValue($valeur);
$cmd->event($valeur);
} catch (Exception $e) {
log::add(« WES », « INFO », « XML erreur on Id: ».$pId. »: ».$e->getMessage(), « »);
}
}// ligne pour récupérer la valeur KW HP du TIC 1
lireValeurTableauXml($xml, ‘tableau_année_TIC1’, ‘td’, 1, x1234x, 0); // 2eme Tag <TD> enfant// ligne pour récupérer la valeur Cout HP du TIC 1
lireValeurTableauXml($xml, ‘tableau_année_TIC1’, ‘td’, 2, x1234x, 0); // 3eme Tag <TD> enfant// ligne pour récupérer la valeur KW HP du TIC 1
lireValeurTableauXml($xml, ‘tableau_année_TIC1’, ‘td’, 4, x1234x, 0); // 5eme Tag <TD> enfant// ligne pour récupérer la valeur Cout HP du TIC 1
lireValeurTableauXml($xml, ‘tableau_année_TIC1’, ‘td’, 5, x1234x, 0); // 6eme Tag <TD> enfantVoila, Remplacer les x1234x par vos ID identifiant JEEDOM. c’est à tester je ne peux pas le faire de mon côté !
Attention certain caractères comme le Guillement double et simple cotes sont modifiés par ce Blog. donc corriger chaque Guillement dans la fonction.Cdt
Attachments:
You must be logged in to view attached files.00 -
Re: J’ai Oublié de vous faire remarquer que je vous ai joints dans le Post précédent une archive avec la fonction à rajouter dans votre Script d’origine et les appels aux fonctions pour rentrer les infos dans JEEDOM
00 -
Re: Pour éviter peut être d’avoir des Pbs avec l’usage de caractères accentués, n’utilisez pas ce type de caractère lors de la définition des noms des Tag Parent.
Vous pouvez par exemple personnaliser le TAG Parent pour le Code Clé « c ac1 » dans votre fichier CGX:
t <TblanTIC1>
t <![CDATA[
c ac1
t ]]>
t </TblanTIC1>bien sûr vous modifier l’appel à la fonction avec les bons paramètres : lireValeurTableauXml($xml, ‘TblanTIC1’, ‘td’, (x), x1234x, 0);
Les codes Clés pour récupérer les Valeurs HP/HC du Jour ou Mois sont respectivement « c jc1 » et « c mc1 ». De même vous devez les inscrire dans otre fichier CGX avec la même structure :
t <TbljrTIC1>
t <![CDATA[
c jc1
t ]]>
t </TbljrTIC1>t <TblmoTIC1>
t <![CDATA[
c mc1
t ]]>
t </TblmoTIC1>Le résultat des structures rendu avec ces Codes est identique à celui décrit pour le code « c ac1 ». donc la nouvelle fonction PHP est compatible pour lire ces éléments : lireValeurTableauXml($xml, ‘TbljrTIC1’, ‘td’, (x), x1234x, 0);
Pour personnaliser les infos du Compteurs 2 et 3, juste changer le n° du Code Clé : exemple « c ac2 » , « c jc2 » , « c am2 »
Attention : J’attire encore une fois votre attention sur le fait que l’usage de ces Codes n’est pas Officiel et que leur usage n’engage que votre responsabilité. Ces Structures et Code peuvent être modifiés à discrétion lors de future MAJ du WES.
Cdt
00 -
Merci
Avoir une réponse en un jour c’est raisonnable pour une personne qui fait ceci pour le plaisir.
Je vais lire et re-lire vos informations pour essayer de comprendre un peu (c’est pas gagné)
Petite question supplémentaire, lorsque vous parlez d’un tableau:
c’est un tableau dans le sens informatique (donc indépendant de la position physique dans la page web
ou
le dessin d’un tableau dans une page webPourquoi cette question, si @Nicolas change le visuel ou la position dans la page web votre bout de code ne fonctionne pas
j’espère etre assez clair
00 -
Bonjour,
Récupérer mon fichier que j’ai Posté en archive; Vous y trouvez la fonction à copier tel qu’elle dans votre Script JEEDOM WES ainsi que la manières de récupérer les infos de ces Code Clés un peu spéciaux. Il vous faut aussi modifier votre fichier CGX comme décrit plus haut en rajoutant les TAG Parents dans la structure de Base de ces Codes. Je n’ai pas testé la fonction n’ayant pas JEEDOM. Si cela pose Pb faites un retour. Eviter les caractère avec accents pour nommer les Balise TAG parents.
En HTML, un tableau se construit ligne par ligne. Dans chaque ligne ( <tr> ), on indique le contenu des différentes cellules ( <td> ).
Schématiquement, un tableau se construit comme à la figure suivante. On a une balise de ligne ( <tr> ) qui englobe un groupe de cellules ( <td> )<table>
<tr>
<td>Carmen</td>
<td>33 ans</td>
<td>Espagne</td>
</tr>
<tr>
<td>Michelle</td>
<td>26 ans</td>
<td>États-Unis</td>
</tr>
</table>Les 3 Blocs que vous visualisez en bas de la Page Graph des TIC sont le résultat de 3 Tableaux écrit en HTML directement depuis le serveur qui est ensuite décodé et mis en forme par votre navigateur.
Cela veut dire, que pour construire la Page des Graphs TIC, Nicolas à préféré construire 3 Tableaux HTML avec les valeurs directement depuis le Serveur, qu’il envoie ensuite dans le fichier HTM pour affichage, plus tôt que d’envoyer pour chaque éléments des valeurs associés, dans un Tableau HTML vide qui serait écrit en dur dans le Fichier HTM comme pour la pluspart des autres Pages HTM.
Si Nicolas modifie lors d’une MAJ, s’il veut changer le format de ces Tableaux ou préfère utiliser des ID pour envoyer des valeurs CGX comme les autres Pages HTM directement dans des Tableaux écrit en Dur dans le fichier HTM, Votre fonction et l’indexation des éléments ne seront plus valide.
C’est le risque lorsque l’on sort des sentiers battus ! cela nécessite ensuite de reprendre toute la mécanique lors de MAJ et si Modif il y a ?!.
Cdt
00 -
Bonjour @cdlog2
Après différentes manip pour essayer de trouver le pb je suis sec.
voici joint 2 fichiers
scenario 1
fichier qui fonctionne pour visualiser des infos compteur impulsionscenario 2
Fichier modifier avec vos infos
j’ai une erreur
[2021-05-23 07:45:49][SCENARIO] Call to a member function getElementsByTagName() on nullDans mon fichier cgx j’ai créer la ligne
t <TblanTIC1>
t <![CDATA[
c ac1
t ]]>
t </TblanTIC1>le résultat est
<TblanTIC1>
<tr class=’A0′><td>Année HP</td><td align=right>4034</td><td align=right>611</td></tr> <tr class=’A0′><td>Année HC</td><td align=right>2849</td><td align=right>326</td></tr>
</TblanTIC1>Je ne trouve pas le Pb je ne comprend pas
Attachments:
You must be logged in to view attached files.00 -
infos complémentaires
j’ai constaté une différence entre la méthode objet et tableau# Lecture d’une valeur d’un flux XML et mise à jour de l’objet virtuel de JEEDOM
lireValeurXml($pXml, $pXmlNoeud, $pXmlAttribut, $pId, $pUnite)
lireValeurXml($xml, ‘impulsion’, ‘PULSE1’, 1459, 0);# Lecture d’une valeur d’un flux XML type Tableau HTML et mise à jour de l’objet virtuel de JEEDOM
lireValeurTableauXml($pXml, $pXmlNoeud, $pXmlAttribut, $pItem, $pId, $pUnite
lireValeurTableauXml($xml, ‘TblanTIC1’, ‘td’, 1, 2571, 0);lireValeurTableauXml($xml, ‘TblanTIC1’, ‘td’, 1, x2571x, 0); ( j’ai fait le test avec et sans les 2 x autour de l’ident résultat identique)
Normalement il faut ou pas les x ?Si je comprend bien après découpage du code l’erreur semble être dans cette zone
Autre constat il n’y a pas ce bout de code aussi avant déclaration des éléments
// Lecture des données
$xml = getWesXml($User, $WesIP, $dataPage);
if($xml===null) {
log::add(« WES », « INFO », « XML is null », » »);
}
else {00 -
Re: Quand je dit : « Récupérer mon fichier que j’ai Posté en archive; Vous y trouvez la fonction à copier tel qu’elle dans votre Script JEEDOM WES ainsi que la manières de récupérer les infos de ces Code Clés un peu spéciaux. «
EXPLICATION DE : Vous y trouvez la fonction à copier tel qu’elle dans votre Script JEEDOM:
Cela veut dire >> Vous COPIEZ LA FONCTION lireValeurTableauXml(……..) {…} dans le même fichier avec les autres Fonctions de Votre Script PHP que vous utilisez déjà pour récupérer les valeurs du DATA.CGX ou fichier CGX personnalisés.
Vous aurez donc 2 FCT pour lire les valeurs dans votre SCRIPT , l’une est celle d’origine : lireValeurXml(….){….} et la nouvelle lireValeurTableauXml(…) {…}
C’est à vous de faire appel à la bonne fonction pour lire les valeurs des TAG suivant leur format :
lireValeurXml($xml, ‘impulsion’, ‘PULSE1’, 1459, 0); ==>> pour lire les valeurs des TAG Classiques
lireValeurTableauXml($xml, ‘TblanTIC1’, ‘td’, 1, 1459, 0); ==>> pour lire la valeur choisi par le n° de RANG d’un TAG <td> contenu dans le résultat CGX Type Tableau HTML. Le 1er <td>=Rang 0 , le 2eme <td>=Rang 1, le 3eme <td>=Rang 2 , etc etc….
Résultat Code Cgx « c ac1 » = Structure Tableau HTML
<TblanTIC1>
<tr class=’A0′><td>Année HP</td><td align=right>4034</td><td align=right>611</td></tr> <tr class=’A0′><td>Année HC</td><td align=right>2849</td><td align=right>326</td></tr>
</TblanTIC1>Une fois remis en forme :
<TblanTIC1>
<tr class=’A0′>
<td>Année HP</td> 1er <td> = Rang 0
<td align=right>4034</td> 2eme <td> = Rang 1
<td align=right>611</td> 3eme <td> = Rang 2
</tr>
<tr class=’A0′>
<td>Année HC</td> 4eme <td> = Rang 3
<td align=right>2849</td> 5eme <td> = Rang 4
<td align=right>326</td> 6eme <td> = Rang 5
</tr>
</TblanTIC1>// ligne pour récupérer la valeur KW HP du TIC 1
lireValeurTableauXml($xml, « TblanTIC1″ , « td » , 1 , 1232 , 0); // Rang Item 1 = 2eme Tag <td>
// ligne pour récupérer la valeur Cout HP du TIC 1
lireValeurTableauXml($xml, « TblanTIC1″ , « td », 2 , 1233 , 0); // Rang Item 2 = 3eme Tag <d>// ligne pour récupérer la valeur KW HP du TIC 1
lireValeurTableauXml($xml, « TblanTIC1″ , « td » , 4 , 1235 , 0); // Rang Item 4 = 5eme Tag <td>
// ligne pour récupérer la valeur Cout HP du TIC 1
lireValeurTableauXml($xml, « TblanTIC1″ , « td » , 5 , 1236 , 0); // Rang Item 5 = 6eme Tag <td>
00 -
On commence à saturer ce Blog avec une discussion qui sort de son cadre. Je vous propose de poursuivre cette discussion directement par mail.
Si vous rencontrez encore des difficultés avec cette nouvelle Fonction, envoyez moi un mail sur : testmail@lesutiles.fr
C’est une boite mail provisoire que j’ai ouvert dans un de mes Serveurs, pour permettre d’envoyer encore des Mails depuis le WES, pour les personnes qui sont bloqués avec leur propre Serveur de messagerie qui n’accepte plus l’envoie de Mail non TLS
Prévenez moi sur ce blog si vous m’envoyez un Mail. Je vous répondrez en retour de Mail.
Cdt
00 -
Bonjour @cdlog
Comme demandé j’ai envoyé un message dans votre boite perso
Bonne journée
00 -
Bonjour @cdlog
J’ai envoyé ce matin un message dans votre boite perso avec un lien peux être utile
Bonne journée
00
-
- Vous devez être connecté pour répondre à ce sujet.