STATUS.XML et PHP

De GCE Electronics
Aller à la navigation Aller à la recherche



SCRIPTS EXTERNES PHP

AnalogiqueV4.png
Nom SCRIPTS EXTERNES PHP
Famille IPX800 V4
Wiki créé le 02/06/2020
Wiki mis à jour le 02/06/2020
Auteur fgtoul

BUT

Dans ce tutoriel, nous allons voir comment accéder aux données de l'IPX800_V4. Ces données pourront être traitées dans un script externe et pourquoi pas, réinhjectées dans l'IPX800 sous une autre forme.

Pour l'exemple, nous utiliserons un cas concret relevé sur le forum. L'exercice consistait à calculer la puissance thermique d'un chauffage au sol et à réinjecter le résultat dans une analogique virtuelle, afin de permettre l'affichage sur X-DISPLAY. Nous utiliserons un Synology comme serveur web. N'importe quel serveur supportant le PHP fera l'affaire.

Pour votre compréhension, retenez les étapes suivantes

  • accès au fichier Status.xml en PHP
  • lecture de valeurs dans status.xml en PHP
  • accès à l'IPX800 par commande API pour injection de valeurs ou actions.

Le script

<?php
// Variables à modifier dans ce script
$IPX800_IP = 'IP_IPX800' ;   // Mettre ici l'adresse IP ou le nom DNS de l'IPX800 V4
$IPX800_PORT = '80' ;      // Mettre ici le port d'accès de l'IPX800 - 80 par défaut
$IPX800_USER = 'user' ;    // Mettre ici l'utilisateur pour l'accès restreint si activé sur IPX800 V4
$IPX800_PWD = 'MotDePasse' ;  // Mettre ici le mot de passe User pour l'accès restreint  si activé sur IPX800 V4
$IPX800_RESTREINT = false; //mettre true pour un accès restreint, false si accès non protégé
$IPX800_APIKEY=""; //renseignez la clé API si activée

if ($IPX800_APIKEY<>""){
	$API_Key="key=" . $IPX800_APIKEY . "&";
}
// URL résultante d'accès au status de l'IPX800
if ( $IPX800_RESTREINT ) {
		$IPX800_URL = "http://{$IPX800_USER}:{$IPX800_PWD}@{$IPX800_IP}:{$IPX800_PORT}/user/status.xml";
} else {
		$IPX800_URL = "http://{$IPX800_IP}:{$IPX800_PORT}/user/status.xml";
}

// Vérification de l'accessibilité 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);
   
   //Récupération des valeurs brutes
   $IPX800_analog2 = ((($ipx800_status->analog2  * 0.000050354)-  0.25) / 0.028 );
   $IPX800_analog3 = ((($ipx800_status->analog3  * 0.000050354)-  0.25) / 0.028 );
   $c=(($IPX800_analog2-$IPX800_analog3) * 0.8 * 1.16 * 1000);
   echo $IPX800_analog2 . "<br>";
   echo $IPX800_analog3 . "<br>";
   echo number_format($c, 0, '.', "") . "<br>";
   
   //----Envoi des données à l'IPX--------
   $URL_Push="http://" . $IPX800_IP . ":" . $IPX800_PORT . "/api/xdevices.json?" . $API_key . "SetVA32=" . number_format($c, 0, '.', "");
    echo $URL_Push;
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $URL_Push);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	$data = curl_exec($ch);
	curl_close($ch);
}

?>

Dans la première partie du script,

  • Renseignez l'adresse IP de l'IPX800.
  • Si votre interface Utilisateur est protégée par un mot de passe, renseignez les et modifiez le paramètre $IPX800_RESTREINT à la valeur True, comme ceci
$IPX800_RESTREINT = true;
  • Renseignez la clé API si vous l'avez activée sur IPX800_V4 :
$IPX800_APIKEY="mon-api-key";

Le script essaie d'accéder au fichier Status.xml sur l'IPX800_V4.

Si l'accès est possible, les valeurs sur les entrées analogiques 3 et 4 (respectivement analog2 et analog3 dans le script) sont lues.

Le fichier Status.xml contient des valeurs brutes, auxquelles il faut appliquer la formule correspondant au capteur afin d'obtenir la valeur analogique.

Supposons que nous utilisons des sondes TC100 vendues par GCE, la formule est du type

((x * 0.000050354) - 0.25) / 0.028

Les variables $IPX800_analog2 et $IPX800_analog3 contiendront donc les valeurs analogiques après application des formules sur les valeurs lues.

Après traitement des données, nous utiliserons les commandes API de l'IPX800 pour modifier l'état d'un périphérique ou une valeur analogique virtuelle.

C'est ce dernier cas que nous traitons dans cet exemple. Pour les autres commandes API, je vous invite à lire l'article consacré à l'API_V4.

La commande SetVA est utilisée afin d'envoyer notre résultat $C dans une entrée analogique virtuelle sur notre IPX800_V4.

Cette entrée analogique virtuelle pourra être exploitée dans le moteur de scénario de l'IPX800_V4 ou affichée sur le dashboard et sur X-DISPLAY.

Sauvegardez le script dans un dossier de votre serveur Web.

EXECUTION DU SCRIPT

Afin que notre calcul soit mis à jour régulièrement sur IPX800_V4, il faut planifier une tâche à intervalle régulier.

Pour notre exemple sur Synology, créons une tâche dans le Planificateur.

Allez dans le Panneau de Configuration et ouvrez le Planificateur

Créez une nouvelle Tâche planifiée

Syno1.png Syno2.png


192.168.0.9 est l'adresse de mon Synology

gce est le dossier web dans lequel j'ai déposé mon script

PushVA.php est le nom donné au script

NB :  La fonction Curl devra être activée dans vos paramètres PHP.