Fichier Status.xml

Bonsoir,
je cherche à récupérer une valeur du fichier status.xml (en php) de l’ipx800 pour vérifier si la sortie(x) est activée ou non.
je ne suis malheureusement pas un expert en php.
comment peut on extraire une valeur et la tester si elle est à 0 ou 1 ou up ou down.

Cette vérification me permettrai de renvoyer ou pas un push lorsque je coupe mon alarme créée avec l’ ipx: (coupure de la masse(GND) sur les l’entrées fait remettre les entrées à 0 et me renvoi un push sur mon teL cela est très bien quand l’alarme est activé mais embêtant lors de l’arrêt .

Je veux contourner par mon serveur: l’ipx par push exécute un fichier controle.phP—> si alarme activée (sortie1) alors envoie de push sinon rien.

Je confirme que l’ipx est très fiable utilisation en alarme (sans sirène pour l’instant) et pushingbox notifry+ mail + caméra foscam, commande de chauffe eau, le retour des alertes sont assez rapides.

Merci de votre aide je ne demande pas de réponses clé en main, mais des pistes si possible,google est mon amis mais je n’est pas trouvé la réponse à mes attentes.

A 49 ans je me suis lancé dans la domotique, électricien à la base, avec quelques connaissance en informatiques certes légères(aucune en PHP) ,on peu faire pas mal de choses avec cet appareil pour ceux que ça intéresse. de se lancer tout est possible .
Merci d’avance .
M G

Bonjour, voilà un exemple en PHP d’accès au status de l’IPX800 (exemple pour le v2, mais devrait convenir pour le V3)

L’affichage du tableau des valeurs, n’est absolument pas nécessaire, le vrai test est « // Test d’une sortie en particulier (la 2ème ici, soit led1) »

<?php
error_reporting(E_ALL);

// Variables à modifier
$IPX800_IP = '1.2.3.4' ;   // Mettre ici l'adresse IP ou le nom DNS de l'IPX800
$IPX800_PORT = '80' ;      // Mettre ici le port d'accès de l'IPX800 - 80 par défaut
$IPX800_USER = 'utilisateur' ;    // Mettre ici l'utilisateur pour l'accès restreint
$IPX800_PWD = 'motdepasse' ;  // Mettre ici le mot de passe pour l'accès restreint

// URL résultante d'accès au status de l'IPX800
$IPX800_URL = 'http://' . $IPX800_USER . ':' . $IPX800_PWD . '@' . $IPX800_IP . ':' . $IPX800_PORT . '/status.xml';

// Vérification de l'accessibilitée de l'IPX800
$ipx800_available= false ;
$ipx800_check = @get_headers($IPX800_URL);
if (strpos($ipx800_check[0],'200 OK') !== false ) { $ipx800_available = true ; }
unset ($ipx800_check );

// Si l'IPX800 est accessible on l'interroge et on affiche le contenu "décodé"
if ( $ipx800_available ) 
{ 
	$ipx800_status = @simplexml_load_file($IPX800_URL);

	// Sortie HTML, rafraichie toutes les 30 secs
	echo "<html><head><meta http-equiv='refresh' content='30'>";
	echo "<title>PHP IPX800 Status Reader</title>";
	echo "</head><body>"; 
	// Entete du tableau
	echo "<br><font face='verdana,arial,sans-serif' size='-1'><table border='0' width='75%' cellpadding='5' cellspacing='2' border align='center'>\n";
	echo "<tr><td colspan='2' rowspan='1'><center><strong>PHP IPX 800 Status Reader</strong></center></td></tr>";
	echo "<tr><th><strong>Variable</strong></th><td><strong>Value</strong></td></tr>";
	// Ligne dans le tableau
	echo "<tr><th colspan='2' rowspan='1'><hr></th></tr>";

	foreach ($ipx800_status as $key => $value) {
	echo "<tr><td>".$key."</td><td>".$value."</td></tr>";
	}
		
	// Ligne dans le tableau
	echo "<tr><th colspan='2' rowspan='1'><hr></th></tr>";

	//Test d'une sortie en particulier (la 2ème ici, soit led1)
	if ($ipx800_status['led1'] == 0) {echo "<tr><td colspan='2' rowspan='1'>La sortie 2 est <strong>OFF</strong></td></tr>"; }
	else { echo "<tr><td colspan='2' rowspan='1'>La sortie 2 est <strong>ON</strong></td></tr>";
	 }

	// Ligne dans le tableau
	echo "<tr><th colspan='2' rowspan='1'><hr></th></tr>";
	// Fin de l'HTML 
	echo "</table></font>\r\n";
	echo "</font></body>";
	
}
else 
// Si l'IPX800 est inaccessible on l'affiche, avec l'url
{
echo "IPX 800 non accessible a l'URL : " . $IPX800_URL; 
}

// Fin
?>

La version courte qui teste juste une sortie (pas d’affichage des valeurs)

[code]<?php
error_reporting(E_ALL);

// Variables à modifier
$IPX800_IP = ‹ 1.2.3.4 › ; // Mettre ici l’adresse IP ou le nom DNS de l’IPX800
$IPX800_PORT = ‹ 80 › ; // Mettre ici le port d’accès de l’IPX800 - 80 par défaut
$IPX800_USER = ‹ utilisateur › ; // Mettre ici l’utilisateur pour l’accès restreint
$IPX800_PWD = ‹ motdepasse › ; // Mettre ici le mot de passe pour l’accès restreint

// URL résultante d’accès au status de l’IPX800
$IPX800_URL = ‹ http:// › . $IPX800_USER . ‹ : › . $IPX800_PWD . ‹ @ › . $IPX800_IP . ‹ : › . $IPX800_PORT . ‹ /status.xml ›;

// Vérification de l’accessibilitée de l’IPX800
$ipx800_available= false ;
$ipx800_check = @get_headers($IPX800_URL);
if (strpos($ipx800_check[0],‹ 200 OK ›) !== false ) { $ipx800_available = true ; }
unset ($ipx800_check );

// Si l’IPX800 est accessible on l’interroge et on test la sortie voulue
if ( $ipx800_available )
{
$ipx800_status = @simplexml_load_file($IPX800_URL);

// Test d'une sortie en particulier (la 2ème ici, soit led1)
if ($ipx800_status['led1'] == 0) {echo "La sortie 2 est off"; } else { echo "la sortie 2 est ON"; }

}
else
// Si l’IPX800 est inaccessible on l’affiche, avec l’url
{
echo "IPX 800 non accessible a l’URL : " . $IPX800_URL;
}

// Fin
?>[/code]

Merci brouno pour ce retour.

désolé du retard de la réponse (déplacement).

je ne suis pas très bon en php , mais j’avais testé ce code qui fonctionne apparemment en php 5 mais pas en php 4.

<?php $fichier = "http://yyyyy:angry:xxxx@192.168.1.70/status.xml"; $dom = new DOMDocument(); if (!$dom->load($fichier)) { die("Impossible de charger le fichier XML"); } // test valeur désiré $itemList = $dom->getElementsByTagName("btn7"); echo '
'."\n"; echo $itemList->item(0)->nodeValue; //test de la valeur si dn ou up if ($itemList->item(0)->nodeValue == 'dn') { //retour echo "ok "; } else { echo "no_ok"; } ?>

on peut tester ttes les valeurs et exécuter ce que l’on désire après, malheureusement ne fonctionne pas sur mon NAS Freecom qui est en PHP 4.
je testerai le votre .
Merci

MG

bonjour,
je suis novice sur IPX, tout comme en PHP.

je teste les différents scripts de Brouno ci-dessus avec une ipx800v3.

La boucle d’écriture de toutes les valeurs du fichier xml fonctionne très bien.
je récupère bien le tableau html correctement rempli.
Il n’y a donc pas de problème de lecture du fichier status.xml.

foreach ($ipx800_status as $key => $value) { echo "<tr><td>".$key."</td><td>".$value."</td></tr>"; }

Par contre, le test direct de la valeur d’une entrée ou d’une sortie ne fonctionne pas.

//Test d'une sortie en particulier (la 2ème ici, soit led1) if ($ipx800_status['led1'] == 0) {echo "<tr><td colspan='2' rowspan='1'>La sortie 2 est <strong>OFF</strong></td></tr>"; } else { echo "<tr><td colspan='2' rowspan='1'>La sortie 2 est <strong>ON</strong></td></tr>"; }

Mon IPX est en 3.05.38, je vais la mettre à jour.
Mes soucis ne proviennent certainement pas de là, puisque le fichier status.xml est correcte.

je ne comprends pas ce qui se passe.
Cela proviendrait t-'il de la version php ?
j’héberge mes pages sur un syno en DSM5

merci de vos avis.

bonjour,

j’ai fini par trouver après un peu de recherche.

Dans le script de Brouno, la commande de type $ipx800_status[‹ led0 ›] renvoie une chaine vide.

Pour ceux que ça interesse, la solution n’était pas loin :

[code]if ( $ipx800_available )
{
$ipx800_status = simplexml_load_file($IPX800_URL);

// Test d’une sortie en particulier (la 2ème ici, soit led1)
if ($ipx800_status->led1 == 0) {echo « La sortie 2 est off »; } else { echo « la sortie 2 est ON »; }
}[/code]

et ça marche.

A+