Interpréter le fichier XML du site embarqué

Bonjour,

Voilà j’essaye d’exploiter sans réussite le fichier XML généré par la carte et le serveur embarqué.
Je souhaiterais faire afficher des images a la place du 0 et du 1 présent dans le retour sur le fichier XML.
Je tourne sur un serveur apache et voici pour l’instant le code que j’utilise:

retour pompe:

si quelqu’un peut m"aider !!!

Merci à vous.

BOnjour,
Je suis devant le même problème, la solution est bien donnée ici par Rno: http://forum.gce-electronics.com/t/actions-preset/32 mais je n’arrive pas à récupérer les état dans un tableau en php
Rno pourrais-tu nous mettre sur la voie?

Merci.

Voici comment lire le status de l’IPX en ligne.


<?php
// ---------------------
// Parsing the XML file
// ---------------------
echo "<br>--------------<br>XML parsing <br>--------------<br>";

$xml = simplexml_load_file('http://89.80.17.72/status.xml');
$result = array();
foreach($xml->children() as $child){
   $result[$child->getName()] = trim($child);
                                    }                               // for each XML child
echo 'RESULT of parsing XML <pre>';
 print_r($result);
echo '</pre>';

?>

Mais ensuite il vous faudra les valeurs des timers aussi non ?

Bye
Rno

Merci Rno pour se parser.
Mais se que je n’arrive pas a faire, c’est d’afficher une certaine image à la place du 0 et une autre à la place du 1 !!
J’etait déja arriver a obtenir dans ma page php le retour, mais que sous forme numérique (soit le 0 ou le 1).
Je souhaite juste que si le statut.xml sur la led1 par exemple me retourne 0 et bien au lieu d’afficher le 0 il m’affiche img0.png !

J’espère avoir été clair dans mes explications !

En vous remerciant de l’aide précieuse que vous m’apporter.

Avec JavaScript tu peux faire comme ci-dessous :

// Etat des 8 relais
for(i = 0; i < 8; i++) {
if(getXMLValue(xmlData, ‹ led ›+i) == ‹ 1 ›)
document.getElementById(‹ led › + i).innerHTML = ‹  ›;
else
document.getElementById(‹ led › + i).innerHTML = ‹  ›;
}

Merci pour vos réponses cela marche maintenant

Pour afficher l’état d’une sortie, j’ai juste à faire pour la sortie 1 par ex:
if ($result[‹ led0 ›] == ‹ 1 ›){ echo( « on »);} else { echo( « off »);}

Tatayet

Content de voir que tu ais pu faire ce que tu voulais…

Ça serait d’ailleurs sympa de mettre ton exemple au complet, il servirait à d’autres utilisateurs moins chevronnés. :wink:

voila:
ne pas oublier de mettre l’ip de la carte!
ce code en html/php doit être mise sur ton serveur web avec l’extension .php
nb étant en cour de réalisation l’état de la sortie n’est pas actualisé lors du changement.

test carte IPX800 GCE

boiler on

boiler off


etat de la sortie <?php //script de Rno $xml = simplexml_load_file('http://relayboard/status.xml'); $result = array(); foreach($xml->children() as $child){ $result[$child->getName()] = trim($child); } // for each XML child //echo 'RESULT of parsing XML
';
//print_r($result);
//echo '
'; //fin script de Rno echo( "boiler: "); if ($result['led0'] == '1'){ echo( "on");} else { echo( "off");} ?>

Pour rafraichir ta page automatiquement avec javascript :
Code à placer entre les balise HEAD

super !!!
Merci a vous pour toutes ses excelentes réponses !
Est t’il possible maintenant d’afficher une image a la place du « on » « off » dans le script décrit par tatayet38 ?

Pour Spy: Est t’il possible de mettre un reload de la page sur un « onclick » ?Sachant que le reload devrait se faire des qu’on clic n’importe ou sur la page php ?

Merci à vous

Il suffit de demander…

if ($result[‹ led0 ›] == ‹ 1 ›){ echo ‹  ›;} else { echo’';}

:wink:

Excelent !!! y’a pas d’autre mots !!
En tout cas un grand merci pour toute l’aide.

on peut recuperer l’etat du xml sur un serveur externe en java ?
un peut comme a l’origine en fait !!!

Sans doute oui mais en javascript, ne pas googler avec ‹ java › c’est pas pareil du tout!

Ici en externe PHP ça marche. Mais en interne PHP ne tourne pas sur les carte IPX, donc javascript est une bonne idée.

Je propose de tester SIMPLE en modifiant juste UNE SEULE LIGNE en demandant a UNE CARTE d’afficher UNE AUTRE CARTE:
Dans ‹ index.htm › si 192.168.0.100 est la carte UN y mettre l’url de la carte DEUX 192.168.0.6

setTimeout("newAJAXCommand('http://192.168.0.6/status.xml', updateStatus, true)",500);

Comme cela on commence petit et facile,
mais voilà je n’ai qu’une seule carte … avis aux autres donc.
a continuer…
Bye
Rno

[size=85][color=#0000FF]PS: Comment ça devrait marcher avec N cartes ?
Dans la page par défaut des IPX il y a le code il faut l’adapter…

  1. dupliquer les balises spans "<span id="an1" style="font-weight:normal">?</span></p> "
  2. faire des ID par cartes !!! dans ces ‹  › ici « an1 » n’est pas un bon ID pour N cartes! mettre « carte01an1 » aisni de suite
  3. pour afficher des Temperatures il faut travailler la valeur, voir le post qui donne le code et la ref. de la sonde.
  4. Changer le javascrpit qui va rechercher les ID pour y écrire la valeur des XML !!!

function updateStatus(xmlData) { [.......] // Update analog value document.getElementById('an1').innerHTML = getXMLValue(xmlData, 'an1');
Cette fonction pointe les ID il faut quelle boucle sur N cartes maintenant…

[color=#0000FF][size=85]

LA JE CALE: mais voici ou j’en suis:

setTimeout("newAJAXCommand('status.xml', updateStatus, true)",500);

on pointe vers le XML et la fonction (container??) de lecture.
A ce code il faudrait ajouter une boucle sur N cartes et leurs IP.
Aussi ajouter ces 2 param (N carte et IP) dans le code « updateStatus » pour qu’il pointe alors le bon ID.
[/size][/color]

[/color][/size]

Ici en externe PHP ça marche. Mais en interne PHP ne tourne pas sur les carte IPX, donc javascript est une bonne idée.

salut

tu veux dire par là que si j’attaque une carte avec un autre serveur que la carte je peux aller interroger le status de l 'ipx en utilisant php car c’est ce que je cherche à faire

si oui comment ?
avec ce que tu as mis plus haut ?

<?php // --------------------- // Parsing the XML file // --------------------- echo "
--------------
XML parsing
--------------
"; $xml = simplexml_load_file('http://89.80.17.72/status.xml'); $result = array(); foreach($xml->children() as $child){ $result[$child->getName()] = trim($child); } // for each XML child echo 'RESULT of parsing XML
';
print_r($result);
echo '
'; ?>

par contre moi dans ma page j’ai mis ça setTimeout(« newAJAXCommand(‹ http://192.168.1.55:82/status.xml ›, updateStatus, true) »,500); mais ça ne marche pas que faudrait il mettre pour utliser le php à la place
merci

Ben oui on ne fait que ça dans ce post faire interroger les IPX par un autre site :slight_smile: .

C’est pourquoi il s’est posé la question pour ce site EXT de " l’interpreter " car lire un XML c’est bien mais ensuite il faut en sortir les données et leurs valeurs, c’est la notion de ‹ Parser › ou interpréter en grenouille.

Installe EasyPHP sur un PC et met dans le dossier ./EasyPHPxyz/www/test.php avec dedans le code que tu cites et zou il lit la carte!!! ensuite tu peux ajouter du html pour la mise en page…

Bye
Rno

PS: ne marche pas? tu as des « ? » et des points gris (non verts) ou « connection was lost »?
En cliquant sur les boutons gris les relais marchent-ils (vers ON) ?

merci de ta reponse
donc je crée a la racine de mon site status.php avec ce code mais aprés dans mon index plutot que de faire

newAJAXCommand(‹ http://192.168.1.55:82/status.xml ›, updateStatus, true)",500)

je fais

newAJAXCommand(‹ status.php ›, updateStatus, true)",500)

en fait je pense que cela ne marchera pas comme cela car il faudrait avoir une variable xml

si tu peux m’expliquer

merci

Ou la, il ne faut pas tout mélanger.

Ici dans le début du post: un PC va en code PHP lire le status.xml d’une carte IPX et en faire une page web…
Un fois cela fait avec succès une remarque de « tfoutfou » laisse entendre un besoin de tout REFAIRE pareil mais en javascript.
Et cela ne marche pas encore… quoique faisable selon GCE… il faut tester debugger… surtout avoir au moins 2 cartes.

Pour revenir a ton besoin, pour lire depuis un PC une ou N cartes:

  1. Crée le script status.php dans le dossier /www de EasyPHP
  2. Ensuite pour exécuter le code et voir le résultat de ce script il faut l’appeler. Pour cela depuis le PC avec EasyPHP qui tourne, lancer FireFOx ou autre et taper http://localhost/status.php ENTER.

Le php a de cela de bien est qui peu se mettre dans une page HTML comme vu au dessus " Publié: 09 Juin 2010, 14:18" par tatayet38. Page a mettre aussi dans ./www et a visualiser avec http: / / localhost/Ma_page_a_moi_de_toutes_mes_cartes_avec_du_PHP_dedans.PHP

Edit: HTML + PHP il faut que la page se termine par .php, le HTML peut s’écrire en dehors des balises <?php ?>
Ou si dedans il faut le mettre en echo ‹ 

Titre
 ›;

Bye
Rno

Voici une telecommande FULL php pour piloter une carte.

Juste mettre votre chemin et ip
// Donnees
$linkurl = ‹ http://localhost/PHP/GCE/David/ ›;
$file = ‹ RoadWarrior.php ›;
$ip[‹ CARTE01 ›] = ‹ 192.168.0.6 ›;

Dites moi ce que vous en pensez!
Bye
Rno

Edit: petite erreur ligne 48 si on change d’IP elle est la aussi… :
Pour simplifier, il faut editer la ligne 48 de ‹ RemoteControlRefreshed.php › et la changer par:

$xml = simplexml_load_file('http://'.$ip['CARTE01'].'/status.xml');

<a class=‹ attachment › href=‹ /uploads/default/original/1X/6e2ead4f27a73afb43c4bb335754c9d6ac6c5efb.rar › title=‹ Telecommande PHP a partir d’un webserver EasyPHP, ON, OFF, all ON, All OFF ›>GCE_IPX.rar (1.78 KB)

merci beaucoup

en attendant j’avais compris qques trucs et j’avais reussie à faire cela

le statut est par contre rafraichi ttes les 5 secondes par exemple avec le script de SPY plus haut mais cela est lourd de rafraichir la page

on ne peut pas mettre dans l’echo juste d’aller rafraichir
et si oui comment ? voici mon echo pour mon bouton éclairage allée

if ($result['led7'] == '1'){ echo '<img src="images/lighton.png" alt="">';} else { echo( '<img src="images/lightoff.png" alt="">');}

le code de spy marche bien mais recharge la page entiére et un peu lourd

[code]/* Ce script permet de rafraichir la page
*/

function reFresh() {
location.reload(true)
}
/* Definir le temp en milliseconds, 1 minute = 60000 milliseconds. */
window.setInterval(« reFresh() »,9500);[/code]

merci pour ta page je vais regarder comment intégrer tous ça

@ plus et merci encore